【问题标题】:backdrop-filter not working for nested elements in Chrome背景过滤器不适用于 Chrome 中的嵌套元素
【发布时间】:2020-07-14 19:12:23
【问题描述】:

我有一个div.outer 和一个div.inner,两者都有position: absolute;backdrop-filter: blur(8px);

https://jsbin.com/nihakiqocu/1/edit?html,css,output

Safari(左)给出了想要的结果——两个 div 都模糊了它们背后的东西。

但是,Chrome(右)只应用了 div.outer 的模糊:

我有一个解决方案:在 div.outer 中添加另一个 div 并将 backdrop-filter: blur(8px); 移动到该新 div。

但是,我希望有一个不需要从第一个 jsbin 更改 DOM 的解决方案。另外,有人知道是什么原因造成的吗?是 Chrome 的错误吗?

https://jsbin.com/rasudijame/1/edit?html,css,output

PS:它适用于 iOS 的 Chrome,但不适用于 Android 的 Chrome,也不适用于 Mac OS 的 Chrome

【问题讨论】:

  • backdrop-filter 支持不佳:caniuse
  • 您是否尝试过使用-webkit- 前缀?
  • 另外,它在 iOS safari、chrome 和 Firefox 上运行良好。
  • 我同时使用 -webkit- 和普通版本。奇怪的是,它适用于 iOS 的 Chrome,但不适用于 Android 的 Chrome,也不适用于 Mac OS 的 Chrome(根据 caniuse 的说法,所有当前版本都应该支持背景过滤器)
  • 这是 Chrome 上跟踪的错误,请参阅:bugs.chromium.org/p/chromium/issues/detail?id=993971

标签: html css css-filters


【解决方案1】:

将背景滤镜放置在 css 伪元素上。这允许嵌套背景过滤器。您也可以使用z-index: -1; 将背景放在元素后面

div {
  height: 100px;
  width: 100px;
}
.wrapper {
  position: absolute;
}
.outer, .inner {
  position: relative;
}
.outer::before {
  content: '';
  position: absolute;
  width: 100%;
  height: 100%;
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
}
.outer {
  background: rgba(255, 0, 0, .5);
}
.inner::before {
  content: '';
  position: absolute;
  width: 100%;
  height: 100%;
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  
}
.inner {
  background: rgba(0, 0, 255, .5);
  top: 50px;
  left: 50px;
}
main {
  position: relative;
}
<main>
  <div class="wrapper">
    <div class="outer">
      <div class="inner"></div>
    </div>
  </div>

  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
</main>

这里是codepen

【讨论】:

  • 如果这对任何人都不起作用,我发现我的解决方案是减少(或删除)堆栈中较低元素的 z-index。不知道为什么玻璃层 (z 1000) 不能与较早的兄弟 (z 100) 一起使用,但是将兄弟层减少到 z 10 修复了它。
  • @MikeStopContinues 你能解释一下吗?我碰到了这个问题!
  • 你能把它应用到引导下拉菜单吗?它可以在 safari 中运行,但不能在 chrome 中运行。
  • @Sibidharan 我已经很久没有解决这个问题了,但我可以这样说:我现在使用两个固定标题,一个用于过滤效果,一个用于内容。这似乎对我有用。类似:&lt;header&gt;&lt;div class="glass"/&gt;&lt;nav /&gt;&lt;/header&gt;。使标题位置:固定,使孩子位置:绝对,你应该没有问题让一切正常。
  • @MikeStopContinues 我修好了.. 一切都很好:) 你的回答帮助了人。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
相关资源
最近更新 更多