如何在元素上设置mix-blend-mode,而不是它的子元素?将子项设置为默认值normal
似乎不起作用:
答案 0 :(得分:2)
HTML
<div class="bkdg">
<h1>Header</h1>
<div class="blend">
</div>
</div>
CSS
.blend {
background-color: green;
mix-blend-mode: multiply;
width: 700px;
height: 35px;
}
h1 {
color: white;
position: absolute;
top: -15px; left: 10px;
z-index: 1;
}
答案 1 :(得分:2)
如何避免mix-blend-mode
影响儿童的解决方案:
mix-blend-mode
; inner
元素。使其位置绝对,并将其置于其他元素之上; <强> HTML 强>
<div class="bkdg">
<div class="blend">
<div class="inner">
<h1>Header</h1>
</div>
</div>
</div>
<强> CSS 强>
.blend {
position: relative; // Make position relative
width: 100%;
height: 100%;
}
.blend::before { // Apply blend mode to this pseudo element
content: '';
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
z-index: 1;
background-color: green;
mix-blend-mode: multiply;
}
.inner { // This is our content, must have absolute position
position: absolute;
z-index: 2;
}
h1 {
color: white;
}
答案 2 :(得分:1)
我知道这是在两年前提出来的,但它在未来可能会有用,因为它可能比创建伪元素更好。
CSS isolation
属性允许选择子元素应该在其父上下文(auto
)中呈现,或者作为新上下文的一部分,因此没有任何属性应用了混合模式(isolate
)。
查看this page示例
答案 3 :(得分:1)
不可能从子元素中删除一个元素的 mix-blend-mode
。
MDN says 那个 mix-blend-mode
:
设置元素的内容应该如何与元素的父元素的内容和元素的背景混合
为了达到预期的效果,将子元素放在单独的 stacking context 中,并确保它在设置了 mix-blend-mode
的元素上方呈现。
要完成这项工作,您需要做两件事:
mix-blend-mode
将为它创建一个堆叠上下文,您可能需要为您的内容提供自己的堆叠上下文以确保它在其上方呈现。使用 CSS 网格定位您的元素:
然后,在文本元素上设置 isolation: isolate
以确保它呈现在上方,而不是呈现在背景元素下方。
工作示例
.container {
display: grid;
grid-template-areas: 'item';
place-content: end stretch;
height: 200px;
width: 400px;
background-image: url(https://picsum.photos/id/237/400/200);
background-size: cover;
background-repeat: no-repeat;
}
.container::before {
content: '';
grid-area: item;
background-color: seagreen;
mix-blend-mode: multiply;
}
.item {
grid-area: item;
isolation: isolate;
color: white;
}
h1,
p {
margin: 0;
padding: 10px;
}
<div class="container">
<div class="item">
<h1>HEADLINE</h1>
<p>Subhead</p>
</div>
</div>
答案 4 :(得分:0)
如果您使用的是Rashad Ibrahimov发布的出色的伪元素:: before / :: after解决方案,请注意
。我发现我必须先从父元素中删除z-index,然后才将其应用于伪元素和子元素,然后mix-blend-mode: multiply
才能起作用。
例如
#wrapper {
position: relative;
}
#wrapper .hoverlabel {
position: absolute;
bottom: 0;
left: 0;
right: 0;
/* z-index: 90; Uncomment this to break mix-blend-mode. Tested in Firefox 75 and Chrome 81. */
}
#wrapper .hoverlabel::before {
position: absolute;
content: "";
top: 0;
bottom: 0;
left: 0;
right: 0;
mix-blend-mode: multiply;
z-index: 90;
background-color: rgba(147, 213, 0, 0.95);
}