backdrop-filter 在 Chrome 中不生效的核心原因是元素必须有透明区域且背后存在可模糊内容;需设 background 为 transparent 或带 alpha 的 rgba(),避免被不透明色覆盖,并确保非根容器。
backdrop-filter 为什么在 Chrome 里不生效
常见现象是写了
,但背景完全没模糊,连半透明都看不到。核心原因就一个:元素必须是「有透明区域」的容器,且背后得有可被模糊的内容——比如父容器设置了
,但自身没遮住底层;或者父层有图片/滚动内容,而当前层用了
。
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
检查该元素是否被
完全覆盖(比如写了
或不透明色),必须设为
或带 alpha 的
确认它不是最顶层的「根容器」——
模糊的是「它背后的东西」,不是自己内容,也不是父背景色
Chrome 100+ 默认开启支持,但旧版需手动开
,不过现在基本不用管
Safari 需要加
前缀,且只在 macOS/iOS 上稳定;iOS 15.4+ 才真正修复了滚动时的闪烁问题
blur() 参数值多大才不卡、不糊成一片
不是越大越好。值超过
后,视觉提升极小,但渲染开销陡增,尤其在低端 Android 设备或长列表中滚动时,会明显掉帧。
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
常规卡片浮层用
到
最平衡;iOS 系统级毛玻璃风格通常在
左右,但那是硬件加速优化过的,网页别硬抄
避免在
或
中动态改
值——浏览器无法 GPU 加速该动画,会强制重绘整块区域
如果需要响应式模糊强度,用媒体查询分档,而不是 JS 动态 setStyle:
backdrop-filter 和 position: fixed / sticky 冲突怎么办
当给
的导航栏加毛玻璃效果时,常发现模糊失效,或者只模糊了页面顶部一小截。这是因为
元素脱离了文档流,它的「背后」只剩 body 背景色,没有滚动内容可模糊。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
把
移到一个包裹容器上,该容器用
+
替代
,并确保其父容器有实际内容(比如
区域)
若必须用
,就得让 body 或 html 有背景图/渐变,并设
,否则背后就是纯色,模糊等于白做
某些安卓 WebView(如微信内置)对
支持极差,直接 fallback 到
如何安全降级 backdrop-filter 不支持的场景
IE、Firefox(至今仍不支持)、部分国产浏览器内核,会直接忽略
,导致玻璃效果消失,但界面可能因依赖透明背景而错乱。
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
用 @supports 检测,而不是 UA 判断:
降级样式必须写在 @supports 外面,比如先设
,再在 supports 里覆盖为
+
不要用 JS 检测
来加 class——CSSOM 检测在某些环境不准,且增加首屏阻塞
真正难处理的是 Safari 15.2–15.3 的 bug:blur 值为奇数时(如
)会严重偏色,偶数则正常。这种细节,不真机测几轮根本踩不到。
backdrop-filter: blur(10px)background-color: rgba(255,255,255,0.8)background: transparentbackground-colorwhitetransparentrgba()backdrop-filterchrome://flags/#backdrop-filter-webkit-backdrop-filterblur()12pxblur(6px)blur(8px)blur(20px):hovertransitionblur()@media (prefers-reduced-motion: reduce) { .glass { backdrop-filter: none; } }position: fixedfixedbackdrop-filterposition: stickytop: 0fixedfixedbackground-attachment: fixedfixed + backdrop-filterbackground: rgba(255,255,255,0.7)backdrop-filter@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) { .glass { backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); } }.glass { background: rgba(255,255,255,0.8); }transparentbackdrop-filterwindow.CSS.supports('backdrop-filter', 'blur(1px)')blur(7px)