backdrop-filter: blur(2px); 是一个 CSS 属性,用于对元素背后的所有内容(即该元素覆盖区域的下层背景)应用图形滤镜效果 。这里 blur(2px) 表示对背后内容进行高斯模糊,模糊半径为 2 像素。
核心理解:
- 作用对象 :该元素背后的内容(例如其他元素、背景图片、颜色等),而不是元素自身。
- 元素自身不变:元素本身的内容(文字、背景色、边框等)保持清晰,不受此属性影响。
- 视觉效果:透过该元素看背后的区域,会呈现"磨砂玻璃"般的模糊感,常用于营造毛玻璃、半透明遮罩等效果。
与 filter: blur() 的区别:
| 属性 | 作用范围 | 示例效果 |
|---|---|---|
backdrop-filter: blur() |
元素背后的内容 | 透过元素看背后是模糊的,元素本身清晰 |
filter: blur() |
元素自身及其子元素 | 元素本体(包括文字、背景)变得模糊 |
典型应用场景:
- 导航栏、弹窗底部的背景模糊(毛玻璃效果)。
- 卡片悬浮层,突出前景内容,同时弱化背景。
- 半透明面板,兼顾可读性与美观。
代码示例:
css
.modal {
background-color: rgba(255, 255, 255, 0.3);
backdrop-filter: blur(10px); /* 背后内容模糊10px */
}
兼容性提醒:
- 支持现代浏览器(Chrome 76+, Edge 79+, Safari 9+ 需
-webkit-backdrop-filter前缀)。 - Firefox 曾需开启实验标志,目前最新版已支持(从 Firefox 103 开始默认启用)。建议加前缀增强兼容:
css
.modal {
-webkit-backdrop-filter: blur(2px);
backdrop-filter: blur(2px);
}
简而言之:backdrop-filter: blur(2px); 让元素背后的景物蒙上一层模糊的"磨砂玻璃",而元素本身保持清晰。
以下是一个简单的HTML案例,演示了 backdrop-filter: blur(2px) 的效果。页面中包含背景风景图和一个半透明的卡片,卡片背后的背景会被模糊,而卡片内的文字保持清晰。
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>backdrop-filter 毛玻璃效果演示</title>
<style>
/* 整体页面样式 - 让背景图铺满,突出背后内容 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
min-height: 100vh;
/* 背景使用一张渐变的网络图片(来自unsplash的免费大图)或者线性渐变也可以,此处使用漂亮的实景图让模糊效果明显 */
background: url('https://picsum.photos/id/104/1200/800') no-repeat center center fixed;
background-size: cover;
font-family: system-ui, 'Segoe UI', 'Roboto', 'Helvetica Neue', sans-serif;
display: flex;
justify-content: center;
align-items: center;
padding: 20px;
}
/* 毛玻璃卡片 - 核心演示backdrop-filter */
.glass-card {
max-width: 500px;
width: 90%;
padding: 2rem 2rem 2rem 2rem;
background-color: rgba(255, 255, 255, 0.25); /* 半透明白色底色,让后面背景透出 */
border-radius: 32px;
/* 关键属性:对背后内容进行模糊,半径2px */
backdrop-filter: blur(2px);
/* 为了更好的兼容性,加webkit前缀 */
-webkit-backdrop-filter: blur(2px);
/* 增强视觉边缘: 极浅边框与阴影,使卡片更精致 */
border: 1px solid rgba(255, 255, 255, 0.4);
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.2);
/* 文字颜色深色,确保可读性 */
color: #1f2a2e;
text-shadow: 0 1px 1px rgba(255,255,255,0.3);
transition: all 0.2s ease;
}
/* 内部文字样式,清晰可见 */
.glass-card h1 {
font-size: 2.2rem;
margin-bottom: 1rem;
font-weight: 700;
letter-spacing: -0.01em;
}
.glass-card p {
font-size: 1.1rem;
line-height: 1.5;
margin-bottom: 1.2rem;
}
.glass-card .note {
font-size: 0.85rem;
background: rgba(0,0,0,0.1);
display: inline-block;
padding: 0.3rem 0.8rem;
border-radius: 20px;
backdrop-filter: blur(1px); /* 内部小元素也可叠加,但不影响演示 */
}
hr {
margin: 1.2rem 0;
border: 0;
height: 1px;
background: rgba(255,255,240,0.5);
}
/* 简单按钮,也半透明但无模糊 */
.demo-btn {
display: inline-block;
margin-top: 0.5rem;
background: #2c5f2d;
color: white;
border: none;
padding: 8px 20px;
border-radius: 40px;
font-weight: bold;
cursor: pointer;
transition: 0.15s;
box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
.demo-btn:active {
transform: scale(0.97);
}
/* 辅助说明浮层? 不加复杂内容 */
footer {
text-align: center;
margin-top: 2rem;
font-size: 0.7rem;
opacity: 0.8;
}
/* 对比区(可不用,但为了突出效果,在body里只放卡片) */
</style>
</head>
<body>
<div class="glass-card">
<h1>🍃 毛玻璃效果</h1>
<p>这个白色的半透明卡片背后,使用了 <code style="background:rgba(0,0,0,0.2); padding:2px 6px; border-radius:12px;">backdrop-filter: blur(2px)</code>。</p>
<p>仔细观察卡片区域的背景风景图,会感觉像是透过一块磨砂玻璃看到的,<strong>背后图像变模糊了2像素</strong>,而卡片上的文字仍然锐利清晰。</p>
<hr>
<p>✨ 同时卡片拥有半透明背景 <code>rgba(255,255,255,0.25)</code>,让背后图片透出来,加上模糊,产生高级毛玻璃感。</p>
<div style="display: flex; justify-content: space-between; align-items: center; margin-top: 16px;">
<span class="note">📸 背景图来源 | LoremFlick</span>
<button class="demo-btn" id="showEffectBtn">查看效果说明</button>
</div>
<footer>⭐ 核心CSS: backdrop-filter: blur(2px); <br> 对元素背后的内容施加高斯模糊。</footer>
</div>
<script>
// 简单的交互: 点击按钮再次强调效果(控制台也可,但无伤大雅)
const btn = document.getElementById('showEffectBtn');
if (btn) {
btn.addEventListener('click', () => {
alert('当前卡片使用的backdrop-filter: blur(2px);\n即该元素后面2像素半径的模糊滤镜。\n注意观察卡片区域覆盖的背景部分,与其他区域清晰的背景形成对比。');
});
}
</script>
</body>
</html>