使用 CSS 实现毛玻璃模糊背景效果(Frosted Glass / Glassmorphism)
毛玻璃效果(模糊 + 半透 + 边缘高光)是近几年非常流行的 UI 风格,尤其在暗色主题、卡片悬浮、侧边栏、弹窗、导航栏等场景中大量使用。
下面从最基础写法到高级优化,完整梳理目前主流的几种实现方式。
1. 最常用写法(backdrop-filter + 半透明背景)
.glass {
/* 核心:背景模糊 */
backdrop-filter: blur(12px) saturate(180%);
-webkit-backdrop-filter: blur(12px) saturate(180%); /* Safari 必须加前缀 */
/* 半透明背景(非常重要) */
background: rgba(255, 255, 255, 0.08);
/* 或者更柔和的写法 */
/* background: rgba(30, 30, 50, 0.25); */
/* 边框(增强立体感) */
border: 1px solid rgba(255, 255, 255, 0.12);
/* 或暗色主题常用 */
/* border: 1px solid rgba(255, 255, 255, 0.08); */
/* 圆角 */
border-radius: 16px;
/* 阴影(可选,增加悬浮感) */
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
/* 其他常用属性 */
padding: 24px;
color: white;
overflow: hidden;
}
完整示例(卡片式)
<div class="container">
<div class="glass-card">
<h2>毛玻璃卡片</h2>
<p>这是一个使用 backdrop-filter 实现的毛玻璃效果。</p>
</div>
</div>
body {
background: url('https://images.unsplash.com/photo-1557672172-298e090bd0f1?w=1600') center/cover no-repeat fixed;
min-height: 100vh;
display: grid;
place-items: center;
font-family: system-ui, sans-serif;
color: white;
}
.container {
width: 90%;
max-width: 500px;
}
.glass-card {
backdrop-filter: blur(16px) saturate(180%);
-webkit-backdrop-filter: blur(16px) saturate(180%);
background: rgba(255, 255, 255, 0.07);
border-radius: 24px;
border: 1px solid rgba(255, 255, 255, 0.1);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.25);
padding: 2.5rem;
backdrop-filter: blur(16px);
}
2. 常见问题及解决办法
问题 1:Safari / 部分浏览器不生效?
/* 必须同时写 */
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
问题 2:背景完全透明,看不到模糊
→ 必须给元素设置非完全透明的背景色(rgba(255,255,255,0.05) ~ 0.3 之间最常见)
问题 3:边缘太生硬
解决办法:
/* 方案1:加细边框 */
border: 1px solid rgba(255, 255, 255, 0.08);
/* 方案2:内发光(高级) */
box-shadow:
inset 0 0 0 1px rgba(255, 255, 255, 0.08),
0 8px 32px rgba(0, 0, 0, 0.15);
/* 方案3:伪元素做高光 */
.glass::before {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(
135deg,
rgba(255,255,255,0.12) 0%,
rgba(255,255,255,0) 50%
);
border-radius: inherit;
pointer-events: none;
}
3. 更高级 / 更精致的几种变体
变体1:强对比毛玻璃(暗底白字)
.strong-glass {
background: rgba(20, 20, 40, 0.45);
backdrop-filter: blur(20px) saturate(1.8);
-webkit-backdrop-filter: blur(20px) saturate(1.8);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 20px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3);
}
变体2:彩色毛玻璃(带色调)
.colorful-glass {
background: rgba(99, 102, 241, 0.15); /* 偏紫蓝 */
backdrop-filter: blur(16px) hue-rotate(10deg) saturate(1.6);
border: 1px solid rgba(99, 102, 241, 0.3);
border-radius: 20px;
}
变体3:极致毛玻璃 + 动态光影(适合暗黑主题)
.premium-glass {
position: relative;
background: rgba(30, 30, 50, 0.4);
backdrop-filter: blur(24px);
border-radius: 24px;
border: 1px solid rgba(255,255,255,0.06);
overflow: hidden;
}
.premium-glass::before {
content: "";
position: absolute;
inset: -50%;
background: radial-gradient(
circle at 30% 20%,
rgba(255,255,255,0.12) 0%,
transparent 40%
);
pointer-events: none;
animation: light 12s infinite ease-in-out;
}
@keyframes light {
0%, 100% { transform: translate(0, 0) scale(1); }
50% { transform: translate(20%, 30%) scale(1.3); }
}
4. 浏览器兼容性速查(2025年现状)
| 属性 | Chrome | Safari | Firefox | Edge | 备注 |
|---|---|---|---|---|---|
| backdrop-filter | 76+ | 9+ | 103+ | 79+ | Safari 需要 -webkit- 前缀 |
| blur() | 良好 | 良好 | 良好 | 良好 | 基本全覆盖 |
| saturate() | 良好 | 良好 | 良好 | 良好 | 增强色彩鲜艳度 |
建议兼容写法:始终同时写 backdrop-filter 和 -webkit-backdrop-filter
5. 快速使用模板(可直接复制)
/* 通用毛玻璃类 */
.glass-effect {
background: rgba(255, 255, 255, 0.07);
backdrop-filter: blur(16px) saturate(180%);
-webkit-backdrop-filter: blur(16px) saturate(180%);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 16px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
transition: all 0.3s ease;
}
.glass-effect:hover {
background: rgba(255, 255, 255, 0.12);
transform: translateY(-2px);
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2);
}
最常使用的几种透明度参考:
- 极轻:0.03 ~ 0.08
- 标准:0.08 ~ 0.15
- 较明显:0.15 ~ 0.30
- 强对比(暗底):rgba(20,20,40,0.4~0.6)
你现在最想实现哪一种毛玻璃风格?
比如:导航栏 / 登录弹窗 / 侧边栏 / 音乐播放器背景 / 卡片列表 ……
告诉我场景,我可以给你更针对性的代码和参数调整建议。