纯CSS实现磨砂玻璃效果的核心是backdrop-filter: blur(10px),需配合半透明背景(如rgba(255,255,255,0.15))且确保父容器有可穿透的透明区域,否则滤镜无内容可处理;不可用filter: blur()替代,因其会模糊自身内容。

用 backdrop-filter 一步启用磨砂玻璃效果
纯 CSS 实现磨砂玻璃(frosted glass)不需要多层遮罩、伪元素叠加或 SVG 滤镜。核心就一个属性:backdrop-filter: blur(10px)。它直接对元素「背后」的内容做高斯模糊,配合半透明背景色(如 background-color: rgba(255, 255, 255, 0.15)),就能立刻呈现真实玻璃质感。
注意:该属性默认不继承,且只对「透过该元素可见的区域」生效——所以必须确保父容器有透明/镂空部分(比如设了 background: transparent 或带 alpha 的 rgba),否则背后内容被遮死,滤镜就“没东西可滤”。
为什么 background-blend-mode 不适合做磨砂玻璃
有人尝试用 background-blend-mode: overlay 混合两层渐变或颜色来模拟,但这是常见误区。它只混合元素自身的多个背景图层,完全不涉及背后 DOM 内容,因此无法产生真实的景深模糊感。
容易踩的坑包括:
- 误以为加了
background: linear-gradient(...), url(...)就能模拟玻璃——实际只是静态纹理,无动态模糊 - 在无透明度的容器里强行使用,导致视觉上毫无“透出背景”的效果
- 混淆
filter(作用于自身)和backdrop-filter(作用于背后)的适用边界
backdrop-filter 的兼容性与降级方案
Chrome 76+、Firefox 103+、Safari 9+ 支持良好,但旧版 Edge 和 Android Webview 仍可能不支持。不能靠 JS 检测后动态插入样式,因为 @supports 是唯一可靠手段:
@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) {
.glass {
-webkit-backdrop-filter: blur(12px);
backdrop-filter: blur(12px);
background-color: rgba(255, 255, 255, 0.12);
}
}
降级时只需提供一层纯 rgba 背景色作为 fallback,无需额外 DOM 结构或 JS 干预。别试图用 filter: blur() 伪造——那会把整个元素(含文字)都糊掉,完全不可读。
性能关键:模糊半径不是越大越好
blur() 值每增加 1px,渲染开销呈非线性上升,尤其在滚动或动画中容易掉帧。实测发现:
-
blur(4px)~blur(8px)在多数设备上平衡了质感与性能 -
blur(12px)在低端安卓机上可能触发合成层频繁重绘 - 避免在
:hover或@keyframes中动态改变 blur 值——浏览器无法硬件加速该变化 - 如果容器内容简单(比如仅图标+文字),可考虑用
backdrop-filter: blur(6px) saturate(1.2)微调通透感,比单纯加大 blur 更轻量
真正难的是让玻璃区域边缘自然融入界面——这取决于你如何控制父容器的 overflow 和 clip-path,而不是拼命堆叠 filter 参数。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











