css - 有没有办法使用 CSS 创建蒙版(正文中的示例图像)
问题描述
如果您看到上面的图像,则有一个父容器应用了一个渐变的背景图像。它分为垂直堆叠的 2 个细分。其中一个 div 包含一个绝对定位的红色 div 和一个蓝色 div。蓝色 div 应该像一个只覆盖 subdiv2 内容的掩码。它锚定到 subdiv2 中的其他东西(不在图像中),因此如果“某物”移动,它就会移动。如果它恰好覆盖了红色div,它应该在保留渐变背景的同时隐藏红色div。有没有办法使用css来实现这一点?
如果渐变不存在,One 将沿链继承背景颜色,蓝色 div 将简单地隐藏红色 div。如果您继承背景图像,我们会在 2 个细分中得到一个不正确的分割渐变。如果我们保持 2 个细分的背景透明,我不知道蓝色 div 无法隐藏红色 div。
谢谢!
编辑:很抱歉没有早点指定。我的错。我已经更改了措辞,以确保你们理解蓝色 div 并不总是覆盖红色 div 的事实,否则解决方案将很简单。
解决方案
如果父 div 有background:transparent
,它会给你想要的效果。困难的部分是让父母“站在”孩子面前。我可以通过z-index
对孩子设置负面来做到这一点,但你可能需要别的东西。没有看到你的标记,我不能确定。
document.getElementById('toggle').onclick = () => {
const inner = document.getElementById('inner');
const style = window.getComputedStyle(inner);
const index = style.getPropertyValue('z-index');
document.getElementById('inner').style.zIndex = index === "-1" ? "0" : "-1";
}
.bg {
width:600px;
height:400px;
background:url(http://placekitten.com/600/400);
}
.div1 {
height:200px;
border: 2px solid red;
}
.div2 {
position:relative;
}
.subdiv2 {
position:absolute;
left:40%;
top:80px;
height:80px;
width:200px;
border: 2px solid blue;
background:transparent;
}
#inner {
position:absolute;
top:10px;
left:80px;
width:60px;
height:60px;
background:red;
z-index:-1;
}
<div class="bg">
<div class="div1"></div>
<div class="div2">
<div class="subdiv2">
<div id="inner"></div>
</div>
</div>
</div>
<button id="toggle">toggle z-index</button>
推荐阅读
- javascript - 在 NodeJS 上连续获取数据的最佳方式(或订阅)
- java - 如何从缓冲区阅读器的第一行读取
- javascript - 在依赖项 requirejs 获取未捕获错误之前加载应用程序:不匹配的匿名定义()
- java - 如何使用 yielder 库将呈现的 C# 代码(用于按长度分割字符串,相对于空间)适应 Java?
- sparql - SPARQL 文字有类型吗?
- c# - C# - 如何显示有关从另一个表中检索的 sql 表的元数据?
- reactjs - 导出 WebStorm 中未使用的默认值
- java - 在作为运行时输入输入后从锯齿状数组中检索元素
- sql-server - 未找到 SSISDB,无法在 SQL Server 2012 中创建新目录
- python - Windows 下 Python 3.6 和 3.7 中带有 end="" 的不可预测的打印函数行为