css - 如何在转换转换时阻止 Chrome 切断 CSS 模糊过滤器

标签 css google-chrome

我正在 CSS 中构建视觉效果,它将 filter: blur 应用于元素并为该元素的子元素设置动画。其中一些 child 部分不在视野范围内,这会导致在 Chrome 中设置动画时呈现不一致:

当过渡处于事件状态时,CSS 滤镜的呈现方式与元素静止时不同。它似乎在移动时仅裁剪并模糊视口(viewport)内的元素部分。这会导致元素接触窗口边缘时出现不需要的渐变(如下例)。

我假设在动画转换时会创建一个新的堆叠上下文,类似于应用 transform3dwill-change: transform 时。应用这些属性会产生相同的效果,即使元素是静态的。

当将元素嵌套在另一个元素中并在父元素上设置变换并在子元素上设置模糊时,问题就消失了。但这对我来说不是解决方案,因为我将为多个元素制作动画,然后模糊容器以实现我所追求的视觉效果。

我创建了一个带有最小测试用例的代码笔:https://codepen.io/larixk/pen/jONRoXO这里有一个带有 filter: blur 的元素,它在 :hover 上转换。

.blurred {
  width: 50vmin;
  height: 50vmin;
  margin: 0 auto;
  border-radius: 50%;
  background: black;

  filter: blur(5vh);

  transform: translateY(-80%);
  transition: transform 1s;
}

.blurred:hover {
  transform: translateY(-20%);
}

转换时的预期结果: Imgur

转换时的实际结果:Actual

见于 Chrome 版本 77.0.3865.90 和 Chrome Canary 版本 79.0.3930.0。

在 Firefox (70.0b11) 或 Safari (13.0.1) 中不会出现问题。

Chrome 中是否存在问题,或者我遗漏了什么?

最佳答案

.blurred {
    width: 50vmin;
    height: 50vmin;
    margin: 0 auto;
    border-radius: 50%;
    background: black;
    filter: blur(5vh);
    transition: 1s;
    position: relative;
    top: -140px;
}

.blurred:hover {
    top: 0px;
}

如果您希望它具有响应性,您也可以使用 vw 而不是 px。

关于css - 如何在转换转换时阻止 Chrome 切断 CSS 模糊过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58202695/

相关文章:

css - 使用 CSS 自定义滚动条

html - 并排的两张 table

html - CSS 背景属性不能覆盖 IE 过滤属性?

javascript - HTML 5 的 BlobBuilder() 是否仍然可以在 Google Chrome 中运行?

javascript - Google Chrome 中的 XPath 错误?

google-chrome - chrome_debug.log 中的日志前缀是什么格式?

html - 在 CSS 中对齐框中的文本

html - 如何设置选择选项的样式?

javascript - document.execCommand ('SaveAs' ,null ,'filename.csv' ) 不适用于 chrome

javascript - ES6 转译器中的导入/导出