html - 在具有不同 z-index 的嵌套组件上使用混合混合模式
问题描述
我有一个使用嵌套的、绝对定位的 div 的设置,我需要mix-blend-mode
将 div 的元素与 z-index 低于该 div 的所有元素混合。
问题是每个 div 必须有自己独立的 z-index(由于可访问性原因,不能更改)。
用一个例子更容易解释:
#layer-1 {
width: 700px;
height: 700px;
position: absolute;
background-color: maroon;
z-index: 1;
}
#layer-2 {
position: absolute;
height: 100px;
width: 200px;
z-index: 2;
}
#layer-3 {
position: absolute;
z-index: 3;
mix-blend-mode: darken;
}
#layer-3 img {
width: 300px;
}
<div id="layer-1"></div>
<div id="layer-2">
<div id="layer-3">
<img src="https://i.picsum.photos/id/100/2500/1656.jpg" />
</div>
</div>
我需要内部的图像layer-3
与layer-1
. 如果您从layer-2
小提琴中删除 z-index,您将看到混合工作正常;但是,如上所述,出于可访问性的原因,这不是一个选项。
我在这里做了一个jsfiddle:https ://jsfiddle.net/gabranches/v6cuL2o4/44/
有没有办法解决这个问题,或者这只是一个限制mix-blend-mode
?
解决方案
只需将 应用于mix-blend-mode
div #layer-2
。这与#layer-1
. #layer-3
或img
不能直接与#layer-1
#layer-1 {
width: 700px;
height: 700px;
position: absolute;
background-color: maroon;
z-index: 1;
}
#layer-2 {
position: absolute;
height: 100px;
width: 200px;
z-index: 2;
mix-blend-mode: darken;
}
#layer-3 {
position: absolute;
z-index: 3;
}
#layer-3 img {
width: 300px;
}
<div id="layer-1"></div>
<div id="layer-2">
<div id="layer-3">
<img src="https://i.picsum.photos/id/100/2500/1656.jpg" />
</div>
</div>
从规范:
CSS 中创建堆叠上下文的所有内容都必须被视为“孤立”组。HTML 元素本身不应创建组。
应用了混合的元素必须与该元素所属的堆叠上下文的所有底层内容混合。
有关堆叠上下文的更多详细信息的相关问题:Why can't an element with a z-index value cover its child?
推荐阅读
- php - eBay API 总是在生产中返回 invalid_client 但沙盒工作正常
- vaadin - 为什么自定义实现的 VaadinServiceInitListener 不在 vaadin 13.0.2 中监听?
- symfony - Symfony Locale 基于子域修改
- cassandra - Cassandra 更改表以添加新列将 null 添加为文本
- performance - 如何测量 dynamodb 的性能?
- deployment - 如何在 gitlab-ci 管道中获取合并请求信息?
- sybase - ct_connect():网络数据包层:内部网络库错误:Net-Lib 协议驱动程序调用连接两个端点失败 stackoverflow
- react-native - 仅 iOS 中 react-native-twitter-signin 中的 Twitter 登录错误
- apache-spark - 有没有办法重新分配持久的数据集复制?
- php - 在 AWS Elasticbeanstalk 上部署 PHP 应用程序