先上一段让你用 PS 做模糊效果的“复杂代码”:
/* 传统做法:用伪元素 + 模糊背景图片,效果差还卡 */
.glass-card {
position: relative;
overflow: hidden;
}
.glass-card::before {
content: '';
position: absolute;
top: -20px;
left: -20px;
right: -20px;
bottom: -20px;
background: url('bg.jpg') center/cover;
filter: blur(20px);
z-index: -1;
}
能实现毛玻璃效果,但你得额外维护一层背景,并同步尺寸、层级和模糊参数。每个毛玻璃卡片都要写一套伪元素,代码量也不小。
backdrop-filter 一行搞定:
.glass-card {
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
background: rgba(255, 255, 255, 0.15);
border: 1px solid rgba(255, 255, 255, 0.2);
}
它直接对元素后面的内容做模糊处理,不需要额外图片,也不需要伪元素。今天把 backdrop-filter 的核心用法和踩坑点一次讲清楚。
0. 先搞清楚 backdrop-filter 是什么
backdrop-filter 的作用是对元素背后的区域应用滤镜效果——模糊、亮度、对比度、色相旋转等。它只影响“后面的内容”,不影响元素本身。
元素背景 → backdrop-filter 模糊 → 内容显示在模糊层之上
核心价值:不需要额外图片,实时对底层内容做模糊。
1. 基础用法:毛玻璃卡片
<div class="glass-card">
<h2>毛玻璃卡片</h2>
<p>背景是动态的,模糊效果跟随底层内容实时变化</p>
</div>
.glass-card {
/* 核心:对背后的内容做模糊 */
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
/* 半透明背景让模糊效果更明显 */
background: rgba(255, 255, 255, 0.12);
/* 边框增加层次感 */
border: 1px solid rgba(255, 255, 255, 0.15);
/* 圆角提升质感 */
border-radius: 16px;
padding: 32px;
color: white;
}

2. 组合滤镜:让毛玻璃更有层次
.glass-card {
backdrop-filter: blur(20px) brightness(1.1) saturate(1.2);
-webkit-backdrop-filter: blur(20px) brightness(1.1) saturate(1.2);
background: rgba(255, 255, 255, 0.08);
}
| 函数 | 效果 | 适用场景 |
|---|---|---|
blur(20px) | 模糊(核心) | 毛玻璃效果 |
brightness(1.1) | 亮度提升 | 让模糊区域更亮 |
saturate(1.2) | 饱和度提升 | 让颜色更鲜艳 |
contrast(1.1) | 对比度提升 | 让文字更清晰 |
hue-rotate(10deg) | 色相旋转 | 创意滤镜 |

3. 实战场景
场景一:导航栏毛玻璃
.navbar {
position: fixed;
top: 0;
left: 0;
right: 0;
padding: 16px 24px;
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
background: rgba(255, 255, 255, 0.08);
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
z-index: 100;
}

场景二:模态框毛玻璃
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
display: flex;
align-items: center;
justify-content: center;
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
background: rgba(0, 0, 0, 0.3);
}
.modal {
background: rgba(255, 255, 255, 0.9);
border-radius: 20px;
padding: 40px;
max-width: 400px;
width: 90%;
}

场景三:头部叠加文字
.hero-title {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 40px 20px;
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
background: rgba(0, 0, 0, 0.2);
color: white;
}

4. 三个容易踩的坑
坑一:浏览器兼容性
.glass {
/* 旧版 Safari / iOS Safari 需要加 -webkit- 前缀 */
-webkit-backdrop-filter: blur(20px);
backdrop-filter: blur(20px);
}
坑二:背景必须有内容才能看到效果
backdrop-filter 只对背后的内容生效。如果元素背景是纯色且不透明,看起来就是纯色,看不到模糊效果。
/* ❌ 不透明背景,看不到模糊 */
.glass {
backdrop-filter: blur(20px);
background: white; /* 遮住了背后的内容 */
}
/* ✅ 半透明背景 */
.glass {
backdrop-filter: blur(20px);
background: rgba(255, 255, 255, 0.12);
}
坑三:性能开销
backdrop-filter 往往会增加额外的合成开销,多个大面积毛玻璃元素会影响性能。移动端、低端设备谨慎使用。
小结
- backdrop-filter:对元素背后的内容做模糊处理,不需要额外图片
- 兼容性处理:旧版 Safari / iOS Safari 需要 -webkit- 前缀,现代浏览器基本都支持无前缀写法
- 搭配半透明背景:rgba(255, 255, 255, 0.12) 让模糊效果更明显
- 组合滤镜:blur(20px) brightness(1.1) saturate(1.2) 让效果更高级
- 适用场景:导航栏、模态框、叠加文字、卡片
- 性能注意:大面积毛玻璃会增加合成开销,低端设备和移动端要控制范围
一句话:backdrop-filter 让毛玻璃效果从“复杂 PS 操作”变成“一行 CSS”。搭配半透明背景和边框,三行代码复刻 iOS 风格的毛玻璃质感。





