【问题标题】:Using mix-blend-mode on nested components with a different z-index在具有不同 z-index 的嵌套组件上使用混合混合模式
【发布时间】:2020-03-26 18:21:45
【问题描述】:

我有一个使用嵌套的、绝对定位的 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 的限制?

【问题讨论】:

  • display:contents;#layer-2

标签: html css mix-blend-mode


【解决方案1】:

只需将 mix-blend-mode 应用于 div #layer-2。这个与#layer-1 在同一个堆栈上下文中。 #layer-3img 不能直接与 #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>

来自the specification:

CSS 中创建堆叠上下文的所有内容都必须被视为“孤立”组。 HTML 元素本身不应创建组。

应用了混合的元素必须与该元素所属的堆叠上下文的所有底层内容混合。

有关堆叠上下文的更多详细信息的相关问题:Why can't an element with a z-index value cover its child?

【讨论】:

  • 感谢您的回复,但这也会将mix-blend-mode 添加到可能位于#layer-2 内部且不应具有混合模式的其他层中 - 抱歉,我应该将其包含在我的示例中
  • @gabranches 在这种情况下,如果您继续使用 z-index,将不可能。如果创建了堆叠上下文,那么您不能在该堆叠上下文中只有一些元素与外部元素混合。所有堆叠上下文都可以混合或不混合。
  • @gabranches 顺便说一句,我很确定我们可以克服 z-index,如果您在认为有必要的地方共享完整代码,请不要使用它
猜你喜欢
  • 2017-04-29
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
相关资源
最近更新 更多