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

能否使用多个DIV与CSS实现背景图片指定区域高亮的聚光效果?

实现双区域聚光灯效果的可行方案

你之前遇到的外阴影互相遮盖问题,是因为两个元素的阴影层级互相覆盖导致,以下是两种可直接落地的实现方案:

方案1:使用CSS mask实现遮罩挖空(兼容性好,无重叠冲突)

核心思路是给背景容器加一个全局变暗的遮罩层,再在遮罩层上把两个亮区对应的位置挖空,透出底下的原图,无论多少个亮区都不会出现遮盖问题。

<div class="background-image">
    <div class="light-area-1"></div>
    <div class="light-area-2"></div>
</div>
.background-image {
  position: relative;
  width: 100vw;
  height: 100vh;
  /* 替换为你的背景图地址 */
  background: url("xxx.jpg") center/cover no-repeat;
}
/* 用伪元素做全局变暗遮罩 */
.background-image::after {
  content: "";
  position: absolute;
  inset: 0;
  /* 最后一位0.7是调暗程度,数值越高越暗 */
  background: rgba(0,0,0,0.7);
  /* 以下mask参数对应两个亮区的位置、大小,和下方light-area的样式保持一致即可 */
  -webkit-mask-image: 
    linear-gradient(#000, #000),
    linear-gradient(#000, #000);
  -webkit-mask-size: 
    200px 300px, /* 第一个亮区宽高 */
    150px 150px; /* 第二个亮区宽高 */
  -webkit-mask-position: 
    100px 100px, /* 第一个亮区坐标 */
    400px 200px; /* 第二个亮区坐标 */
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-composite: xor;
  mask-image: 
    linear-gradient(#000, #000),
    linear-gradient(#000, #000);
  mask-size: 
    200px 300px,
    150px 150px;
  mask-position: 
    100px 100px,
    400px 200px;
  mask-repeat: no-repeat;
  mask-composite: exclude;
  pointer-events: none; /* 不遮挡下方元素的交互事件 */
}
.light-area-1 {
  position: absolute;
  width: 200px;
  height: 300px;
  left: 100px;
  top: 100px;
  /* 可按需加边框、内容等样式,不影响聚光灯效果 */
  border: 2px solid #fff;
}
.light-area-2 {
  position: absolute;
  width: 150px;
  height: 150px;
  left: 400px;
  top: 200px;
  border: 2px solid #fff;
}

方案2:使用超大扩散半径box-shadow(写法极简)

如果你的亮区是矩形且间距较远,可直接用超大扩散半径的外阴影实现,无需额外写遮罩逻辑:

.background-image {
  position: relative;
  width: 100vw;
  height: 100vh;
  background: url("xxx.jpg") center/cover no-repeat;
  overflow: hidden; /* 剪掉超出容器的阴影部分 */
}
.light-area-1, .light-area-2 {
  position: absolute;
  z-index: 2;
  /* 扩散半径设为9999px确保覆盖整个容器,最后一位为调暗透明度 */
  box-shadow: 0 0 0 9999px rgba(0,0,0,0.7);
}
.light-area-1 {
  width: 200px;
  height: 300px;
  left: 100px;
  top: 100px;
}
.light-area-2 {
  width: 150px;
  height: 150px;
  left: 400px;
  top: 200px;
}

注意该方案如果两个亮区距离较近,阴影重叠区域会比其他区域更暗,存在重叠亮区需求优先选方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:15:06