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

图片黑色覆盖层致hover失效,如何实现hover时灰度切换且保留覆盖层?

解决方案

问题根源是black_layer层级在图片上方,导致鼠标无法直接触发图片的hover事件。我们可以把hover事件绑定到父容器.box上,这样只要鼠标移到整个容器区域(包括覆盖层),就能触发图片的灰度变化,同时黑色覆盖层保持显示。

修改后的CSS代码:

.box{
  width:300px;
  height:200px;
  position: relative;
}

.image{
  width:100%;
  height:100%;
  object-fit: cover;
  filter:grayscale(1);
  /* 可选:添加过渡动画让效果更平滑 */
  transition: filter 0.3s ease;
}

/* 把hover触发条件改成父容器.box */
.box:hover .image{
  filter:grayscale(0)
}

.black_layer{
  position: absolute;
  width:100%;
  height:100%;
  top:0;
  left:0;
  background-color:black;
  z-index:1;
  opacity:.3;
}

HTML代码无需修改,保持原样即可:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>

<div class="box">
<img  src="https://images.unsplash.com/photo-1616578738046-8d6bbb4ee28e?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxzZWFyY2h8MjB8fGFyY2hpY3R1cmV8ZW58MHx8MHx8&auto=format&fit=crop&w=500&q=60" class="image"  />

<div class="black_layer"></div>
   
</div>
  
</body>
</html>

原理说明:

  • 父容器.box是相对定位,包含图片和覆盖层,鼠标移到容器任意位置都会触发hover
  • 通过后代选择器.box:hover .image,在容器hover时修改图片的灰度滤镜
  • 黑色覆盖层的z-index保持1,依然在图片上方,不会影响显示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:10:48