css - CSS中的分层蒙版
问题描述
我试图弄清楚CSS中是否有可能的图层蒙版。基本上我有一个表示某种阶段的 SVG。这使用 mask-image 显示为掩码,并且具有黑色背景色。类似于以下内容:
mask-image: url(image.svg);
background-color: #000;
...
根据某些相关状态,我需要通过在其上叠加另一个 svg 来引起对该蒙面 svg 的注意,例如感叹号。这将具有另一种颜色,例如红色,但可能会根据情况而改变。
下面显示了一个粗略的示例,其中我有一个带有一些文本的按钮。正方形是一个 svg,仅在某些状态(状态 A)存在时才会出现,在这种情况下,会向 div 添加一个类。正方形内的圆圈是相关状态,仅在正方形为状态 A 为真时出现,加上一些附加状态。所以在一个 Less/BEM 结构中,这个额外的状态将被实现为一个修饰符,如下所示:
&__state {
mask-image: url(state.svg);
background-color: #000;
...
&--inner-state {
mask-image: url(inner-state.svg);
background-color: red;
...
}
}
该按钮对svgs一无所知,因为我根据状态动态添加div和上面的CSS。
这在 CSS 中很容易实现吗?如前所述,我使用的是带有 BEM 结构的 Less,但我不一定需要与这些结构相关的答案。我对这个概念更感兴趣。
如果需要,请随时询问更多信息,我将不胜感激!
解决方案
如果我正确理解了您的问题...您可以像这样简单地将额外的覆盖 svg 放置为<img>
或内联<svg>
:
.masked{
width: 100px;
position: relative;
}
.masked img{
width: 100%;
-webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><circle cx='50' cy='50' r='50' fill='#fff'></circle></svg>") top left / cover;
mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><circle cx='50' cy='50' r='50' fill='#fff'></circle></svg>") top left / cover;
}
.masked svg{
width: 100%;
position: absolute;
top: 0;
opacity: 0;
}
.masked:hover svg{
opacity: 1;
}
<div class="masked">
<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/3/Harry-Potter-1-.jpg" />
<svg viewBox="0 0 100 100">
<rect x="25" y="25" width="50" height="50" fill="red"></rect>
</svg>
</div>
推荐阅读
- python - 如何使用熊猫根据唯一天数删除记录?
- java - 有没有办法使用spring boot和jpa来维护活动日志?
- http - 在 Flutter 中使用 http.post 和注册表单上传图片?
- javascript - 我怎样才能缩短这个?
- reactjs - 状态变量的反应问题 - 数字与字符串
- c++ - 如何最好地让用户重新定义类方法?
- asp.net-core - 发生错误时,我的 asp.net 核心应用程序未写入标准输出日志
- wordpress - 显示离线状态的 Wordpress 页面
- mysql - 3 或 4 分钟不活动后出现错误“odbc 驱动程序不支持请求的属性”
- ray - 我们如何在训练期间在 RLlib 中打印动作分布?