css - CSS 变换动画会导致后续模糊元素出现视觉故障(仅限 Chrome)
问题描述
所以这有点奇怪。我有一个模糊的元素(filter: blur(..)
这里只是一个黑框),它被稍微放大(transform: scale(2)
)以隐藏模糊的边缘。现在,当前面的元素为属性设置动画时,模糊transform
的元素会在动画期间显示视觉故障(可能会丢失它scale(2)
,但我不确定)。
我在 Chrome(在 Linux 上)中看到了这种行为,但在 Firefox 中没有。
我曾尝试将backface-visibility: hidden
和添加translateZ(0)
到模糊元素,但这些实际上会导致刚刚描述的相同视觉故障。我不确定这是为什么。
任何解决方法或对此问题的洞察力都值得赞赏!这是一个最小的复制:
https://jsfiddle.net/malwilley/tz4fwmu2/
button {
width: 400px;
height: 60px;
transition: transform 500ms;
}
button:hover {
transform: translateY(-4px);
}
.container {
margin-top: 20px;
overflow: hidden;
height: 200px;
width: 400px;
}
.blurred {
height: 100%;
width: 100%;
overflow: hidden;
background: black;
filter: blur(10px);
transform: scale(1.2);
}
<button>Hover me</button>
<div class="container">
<div class="blurred" />
</div>
解决方案
有时,当您在没有 3D 图形处理器支持的情况下进行软件渲染时,Chrome 中会出现这些故障。
据我了解,您可以使用任何 Z 坐标触发 3d 支持transform
。因此,附加translateZ(0)
到您的缩放变换中.blurred
会使故障消失。
旧解决方案
button {
width: 400px;
height: 60px;
transition: transform 500ms;
}
button:hover {
transform: translateY(-4px);
}
.container {
margin-top: 20px;
overflow: hidden;
height: 200px;
width: 400px;
}
++
.blurred {
height: 100%;
width: 100%;
overflow: hidden;
background: black;
filter: blur(10px);
transform: scale(1.2) translateZ(0);
}
<button>Hover me</button>
<div class="container">
<div class="blurred" />
</div>
新解决方案
我稍微改变了我的风格
现在
.container {
/* ... */
transform: scale(1);
}
.blurred {
transform: scale(1.2);
}
我为 3D 渲染使用了另一个触发器,并将其用于.container
代替.blurred
元素
button {
width: 400px;
height: 60px;
transition: transform 500ms;
}
button:hover {
transform: translateY(-4px);
}
.container {
margin-top: 20px;
overflow: hidden;
height: 200px;
width: 400px;
transform: scale(1);
}
.blurred {
height: 100%;
width: 100%;
overflow: hidden;
background: black;
filter: blur(10px);
transform: scale(1.2);
}
<button>Hover me</button>
<div class="container">
<div class="blurred" />
</div>
推荐阅读
- gdscript - 我想让我的对象转到窗口的另一侧
- mysql - mySQL - 如何将一个索引映射/查找到另一个并加入另一个表?
- api - 如何在邮递员请求正文中动态发送包含反斜杠的值?
- ansible - Ansible 任务 - 我如何循环所有预定义的变量以创建这种格式的 linux 组?
- python - 在 NumPy 中使用掩码编写有效的代码以应用反向操作
- javascript - Jest 确实在等待 promise 解决
- node.js - 使用“firebase serve”命令在 Firebase 上部署 Nodejs 应用程序(使用 typecrpt 而非 javascript 开发)部署问题
- r - 将 DataFrame 列转换为因子
- java - 远程调试 - Java
- c# - 为什么我不能在 switch 表达式中使用我的枚举类型?