背景过滤器超出边界半径

Posted

技术标签:

【中文标题】背景过滤器超出边界半径【英文标题】:Backdrop Filter extends beyond Border Radius 【发布时间】:2016-07-22 13:40:19 【问题描述】:

我正在尝试同时使用 CSS backdrop-filterborder-radius,但背景滤镜似乎超出了边框半径。

body 
  background-attachment: fixed;
  background-color: #541B84;
  background-image: url("https://source.unsplash.com/random");
  background-position: 50% 50%;
  background-size: cover;
  height: 100%;
  width: 100%;

.con 
  -webkit-backdrop-filter: blur(1rem) saturate(200%);
  backdrop-filter: blur(1rem) saturate(200%);
  background: rgba(247, 247, 249, 0.8);
  border-radius: 100%;
  font-size: 7rem;
  font-weight: 300;
  height: 11rem;
  line-height: 1.5;
  margin: 1rem auto;
  width: 11rem;
  text-align: center;
<body>
  <div class="con">KM</div>
</body>

【问题讨论】:

【参考方案1】:

你刚刚发现了一个错误!

这是 WebKit 实现 backdrop-filter CSS 属性的 bug。它不考虑过滤器的 border-radius 分隔 - 即使使用 overflow: hidden; 时也不考虑。

clip-path 或几乎所有使用 backdrop-filter 应用于元素的掩蔽属性也是如此,截至 2016 年 5 月 21 日,它在最新的 WebKit Nightly Build 中仍未解决。

虽然这个问题没有解决,但您有三个选择:

等待修复实现该功能。 无论如何都要实现有缺陷的功能,因为这不是您的代码的问题。 改用javascript

如果这个问题不太明显(即border-radius: 5px;),我会坚持使用第二个选项,并且当错误变得非常明显时(比如在你的 sn-p 中)完全避免使用它。

这是 WebKit Bugzilla 上的错误报告:https://bugs.webkit.org/show_bug.cgi?id=142662

编辑:

自发布补丁以来,Webkit Bugzilla 错误报告已于 2016/05/25 关闭。在最新的 webkit nightly build 中可以看到更正。 ;)

【讨论】:

我刚遇到这个问题,它已在 Safari Technology Preview 6 中修复。 @AsaCarter 好!您是否在最新的稳定 Safari 更新上对其进行了测试? 在 Chrome 71.0.3578.98 上仍然是一个 bug:bugs.chromium.org/p/chromium/issues/detail?id=547937【参考方案2】:

在此修复发布之前,您可以通过在父元素上使用 0px 模糊作为背景过滤器来避免此错误。这需要隐藏溢出,因此您的示例中的 K 和 M 的边缘不再可见。

body 
  background: url("https://source.unsplash.com/random") center /cover;
  height: 100%;
  width: 100%;


.con 
  -webkit-backdrop-filter: blur(0);
  backdrop-filter: blur(0);
  margin: 1rem auto;
  width: 11rem;
  height: 11rem;
  overflow: hidden;
  border-radius: 50%;
  font-size: 7rem;
  font-weight: 300;
  line-height: 1.5;
  text-align: center;
  position: relative;

.inner 
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  -webkit-backdrop-filter: blur(0.1em);
  backdrop-filter: blur(0.1em);
  border-radius: 50%;
  margin: -1px;
<body>
  <div class="con">
    <div class="inner">KM</div>
  </div>
</body>

【讨论】:

这似乎不起作用,它只会完全禁用blur 效果。

以上是关于背景过滤器超出边界半径的主要内容,如果未能解决你的问题,请参考以下文章

带边界半径的多线圆角

根据父母的边界半径裁剪孩子

angularJs 控制文本长度,超出省略号过滤器

堆叠圆圈在边界半径上产生一个黑条

CKError:查询过滤器超出了值的限制:容器为 250

SQL Server:当过滤器值超出索引直方图范围时使用错误的索引