使用矩形遮罩叠加

7
场景: 我想用一个矩形遮罩(例如,背景为#000且不透明度为0.8)来覆盖一个元素。接下来,在被覆盖的区域中,我想突出显示一个区域。
这是一个示例截图:

Overlay with rectangular cut out mask

正如您所注意到的那样,有一个矩形从黑色遮罩中剪切出来。在Photoshop中,这很容易 - 只需在顶部放置一个图层并将矩形剪切出来。

我该如何在CSS中实现它?

附注:这种技巧似乎经常用于“向用户介绍新功能”。


谢谢。你的回答很有帮助!我已经点赞了,但忘记标记它了。 - hiro
3个回答

14

您可以使用边框或阴影来实现此效果。并且可以在伪元素上使用它们来最小化标记。

使用 box-shadows 的示例:

div{
  height:100%;
  position:relative;
}
.overlay{
  display:inline-block;
  position:relative;
  z-index: 1;
}
.overlay:after{
  content:'';
  position:absolute;
  top:0; left:0;
  width:100%; height:100%;
  box-shadow: 0px 0px 0px 9999px rgba(0,0,0,.85);
}
<div>
  <p>Some content</p>
  <p class="overlay">Other content</p>
  <p>More content</p>
</div>


1
聪明的想法!一定要试试这个! - RoccoB
如果你将这个应用于一个嵌套深层的DOM元素,并且上层的其他元素设置了z-index(而你希望覆盖所有元素),那么这种方法可能行不通。在这种情况下,我发现你需要在顶层定义覆盖窗口,并使用JavaScript将突出显示窗口定位到你想要突出显示的项目上。 - undefined

1
你可以使用 CSS 的 z-index 属性来使高亮元素显示在遮罩层之上,如下所示:
.overlay{
  display:none;
  position:absolute;
  background:rgba(0,0,0,0.8);
  width:100%;
  height:100%;
  top:0;
  left:0;
  z-index:999;
}

.highlight{
  position:relative;
  z-index:9999;
}

实时演示


这并没有回答问题。我们不能假设黑色遮罩下面的元素/图形任何东西。 - hiro
这是我对你所解释的内容的理解。如果没有帮助,很抱歉。 - EdenSource

0

目前只能在 Webkit 中完成此操作,使用属性 -webkit-mask-box-image。除此之外,我们无法仅使用 CSS 实现此操作。


那么如果他同意使用JavaScript,我们如何以这种方式实现呢? - Matthijs van Hest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接