CSS滤镜blur()为什么对子元素失效了?
我在给一个容器加了 filter: blur(2px),但发现里面的文字和图片都没模糊,只有背景色模糊了?是不是哪里写错了?
我试过把 filter 直接加到子元素上,结果整个布局都乱了……下面是我的代码:
<div class="container">
<img src="test.jpg" alt="示例图" />
<p>这段文字应该被模糊才对</p>
</div>
对应的 CSS 是 .container { filter: blur(2px); background: #eee; },但实际效果只有背景灰蒙蒙的,内容完全清晰。这到底咋回事?
要解决这个问题,最简单的办法是给子元素单独加backdrop-filter。但更WordPress风格的解决方案是给容器加个伪元素:
这样处理之后,背景会模糊而内容保持清晰。如果连内容都要模糊,那就得用transform hack了:
强制开启GPU加速能解决大部分滤镜失效问题,不过要注意性能影响。我在去年做的那个企业站就用了这招。