You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅使用CSS实现鼠标hover时切换卡片图片的解决方案

纯CSS实现卡片悬停切换图片方案

原代码失效原因

  • <img>是替换元素,src属性加载的前景图层级高于CSS设置的background-image,背景图会被完全遮挡,无法显示
  • 直接在hover状态修改图片宽高会触发页面重排,导致布局抖动

实现方案

方案1:双图叠加切换(推荐,支持平滑过渡)

通过绝对定位将两张图完全重叠,hover时修改透明度实现切换,无布局抖动,支持过渡动画。

HTML代码

<div class="card">
  <img class="img-default" src="images/image-equilibrium.jpg" alt="默认展示图" />
  <img class="img-hover" src="images/hijab-icon-black-vector-illustration-260nw-1712786086.jpg" alt="悬停展示图" />
</div>

CSS代码

.card {
  position: relative;
  min-width: 90%;
  background-color: white;
  margin: 20px auto 0;
  border-radius: 10px;
  overflow: hidden;
}

/* 伪元素撑高卡片,避免图片绝对定位导致容器塌陷,padding-top值按实际图片宽高比调整 */
.card::after {
  content: "";
  display: block;
  padding-top: 100%;
}

.card img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: 10px;
  transition: opacity 0.3s ease;
}

/* 初始状态隐藏悬停图 */
.img-hover {
  opacity: 0;
}

/* 悬停时切换两张图的透明度 */
.card:hover .img-default {
  opacity: 0;
}
.card:hover .img-hover {
  opacity: 1;
}

方案2:无结构修改方案(复用原有HTML)

不需要调整现有HTML结构,直接通过CSS的content属性替换img加载资源,代码改动最小。

CSS代码(原有HTML无需修改)

.card {
  height: auto;
  min-width: 90%;
  background-color: white;
  margin: 20px auto 0;
}

.card img {
  width: 100%;
  height: auto;
  border-radius: 10px;
  transition: all 0.3s ease;
}

.card:hover img {
  content: url("images/hijab-icon-black-vector-illustration-260nw-1712786086.jpg");
}

注意:该方案首次悬停时会加载悬停图,若图片体积较大可能出现短暂闪烁,适合小尺寸图标类场景使用。


内容的提问来源于stack exchange,提问作者naqrar naqrar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 02:57:24