css中backdrop-filter 详细使用 ios毛玻璃效果、filter和backdrop-filter使用说明
🎨 CSS backdrop-filter 全面指南
backdrop-filter 是一种可以对 元素后面的内容 应用图像处理效果的 CSS 属性,常用于实现类似 iOS 界面的「毛玻璃」效果。
🧩 一、作用简介
backdrop-filter 会对元素 背后的内容区域 应用模糊、亮度、对比度等滤镜,而不是作用于自身。
| 属性 | 作用对象 | 常用场景 |
|---|---|---|
filter | 对元素本身生效 | 图片模糊、灰度处理 |
backdrop-filter | 对元素背景内容生效 | 毛玻璃、模糊弹窗、半透明导航栏 |
🧠 二、基本语法
backdrop-filter: <filter-function> [<filter-function>]*;
示例:
backdrop-filter: blur(10px) brightness(1.2) contrast(0.8);
常用滤镜函数
| 滤镜函数 | 说明 | 示例 |
|---|---|---|
blur(px) | 模糊背景 | blur(20px) |
brightness(%) | 调整亮度 | brightness(1.5) |
contrast(%) | 调整对比度 | contrast(0.8) |
saturate(%) | 饱和度 | saturate(2) |
grayscale(%) | 灰度 | grayscale(0.5) |
sepia(%) | 棕褐色滤镜 | sepia(0.8) |
hue-rotate(deg) | 色相旋转 | hue-rotate(180deg) |
opacity(%) | 背景透明度 | opacity(0.6) |
可以组合使用:
backdrop-filter: blur(20px) saturate(150%) brightness(120%);
iOS 毛玻璃效果示例
<div class="glass"><h3>毛玻璃面板</h3>
</div>
body {background: url('https://picsum.photos/800/600') no-repeat center/cover;height: 100vh;margin: 0;
}.glass {width: 300px;height: 200px;border-radius: 20px;background: rgba(255, 255, 255, 0.2); /* 半透明背景 */backdrop-filter: blur(15px) saturate(120%);-webkit-backdrop-filter: blur(15px) saturate(120%);border: 1px solid rgba(255, 255, 255, 0.3);display: flex;align-items: center;justify-content: center;color: white;margin: 100px auto;
}
背景模糊、柔和半透明,类似 iOS 控制中心 / Dock。
搭配建议
| 功能 | 推荐写法 |
|---|---|
| 半透明背景 | background: rgba(255, 255, 255, 0.1~0.3) |
| 圆角 | border-radius: 20px |
| 边框 | border: 1px solid rgba(255, 255, 255, 0.3) |
| 投影 | box-shadow: 0 4px 30px rgba(0, 0, 0, 0.1) |
浏览器兼容性(2025)
| 平台 | 支持情况 | 备注 |
|---|---|---|
| iOS Safari 9+ | ✅ 完美支持 | |
| macOS Safari 9+ | ✅ | |
| Chrome 76+ | ✅ | |
| Edge 79+ | ✅ | |
| Firefox | ⚠️ 需开启 layout.css.backdrop-filter.enabled | |
| Android Chrome WebView | ✅(部分旧机卡顿) | |
| 微信小程序 | ⚠️ 部分平台支持 |
为了兼容 Safari,建议加前缀
-webkit-backdrop-filter: blur(10px);
backdrop-filter: blur(10px);
底部导航栏(实战示例)
.bottom-nav {position: fixed;bottom: 20rpx;left: 50%;transform: translateX(-50%);width: 90%;height: 120rpx;display: flex;justify-content: space-around;align-items: center;border-radius: 40rpx;background: rgba(255, 255, 255, 0.15);backdrop-filter: blur(25rpx) saturate(180%);-webkit-backdrop-filter: blur(25rpx) saturate(180%);border: 1px solid rgba(255, 255, 255, 0.2);
}
🎨 CSS 滤镜对比与详解:filter vs backdrop-filter
🧩 一、核心区别概览
| 特性 | filter | backdrop-filter |
|---|---|---|
| 作用对象 | 对元素自身(及其内容)生效 | 对元素背后的背景内容生效 |
| 是否影响子元素 | ✅ 会影响 | ❌ 不会影响(作用于背景) |
| 常见用途 | 模糊图片、灰度图标、亮度调节等 | 毛玻璃效果、半透明模糊背景 |
| 是否需要透明背景 | 否 | ✅ 需要透明度(否则看不到模糊) |
| 性能消耗 | 较低(仅处理自身) | 较高(处理背景内容) |
| 浏览器支持 | 广泛支持 | Safari/Chrome 支持良好,Firefox 需手动开启 |
| 示例效果 | 模糊图片、变灰 | iOS 毛玻璃、半透明底栏 |
🧠 二、基础语法对比
/* 作用于自身内容 */
filter: blur(10px) brightness(1.2);/* 作用于背景内容 */
backdrop-filter: blur(20px) saturate(180%);
filter 属性详解
**filter ** 用于对 元素本身的渲染结果 进行图像处理。
✅ 常用滤镜函数
| 函数 | 说明 | 示例 |
|---|---|---|
blur(px) | 模糊处理(像素越大越模糊) | filter: blur(10px); |
brightness(%) | 调整亮度,>1 更亮,<1 更暗 | filter: brightness(1.5); |
contrast(%) | 调整对比度 | filter: contrast(0.8); |
grayscale(%) | 灰度转换 | filter: grayscale(1);(全灰) |
invert(%) | 颜色反转 | filter: invert(1);(反色) |
saturate(%) | 饱和度调节 | filter: saturate(2);(更艳) |
sepia(%) | 棕褐色滤镜 | filter: sepia(1); |
opacity(%) | 调整透明度 | filter: opacity(0.5); |
hue-rotate(deg) | 色相旋转(0°~360°) | filter: hue-rotate(180deg); |
drop-shadow() | 添加阴影(比 box-shadow 更准确) | filter: drop-shadow(0 0 10px rgba(0,0,0,0.5)); |
- 图片模糊与亮度调节
<img src="photo.jpg" class="photo" />
.photo {width: 300px;filter: blur(5px) brightness(1.3) contrast(0.8);
}
效果:图片模糊、稍亮、对比度降低
- 灰度图标
.icon {filter: grayscale(1);
}
.icon:hover {filter: grayscale(0);transition: filter 0.3s;
}
效果:默认灰色图标,悬停恢复彩色
backdrop-filter 属性详解
backdrop-filter 用于对 元素背后的内容区域 进行图像处理。
- iOS 风格的「毛玻璃背景」
- 半透明弹窗
- 模糊底部导航栏
- 背景模糊遮罩层
backdrop-filter只对透明区域生效
.glass {background: rgba(255, 255, 255, 0.3); /* 必须半透明 */backdrop-filter: blur(20px);-webkit-backdrop-filter: blur(20px); /* Safari */
}
毛玻璃底部导航栏
.bottom-nav {position: fixed;bottom: 20rpx;left: 50%;transform: translateX(-50%);width: 90%;height: 120rpx;border-radius: 40rpx;background: rgba(255, 255, 255, 0.15);backdrop-filter: blur(25rpx) saturate(180%);-webkit-backdrop-filter: blur(25rpx) saturate(180%);border: 1px solid rgba(255, 255, 255, 0.2);
}
类似 iPhone Dock 底栏。
两者组合使用示例
.blur-box {filter: brightness(1.2); /* 调整自身亮度 */backdrop-filter: blur(10px); /* 模糊背景 */background: rgba(255, 255, 255, 0.2);
}
性能优化建议
| 项目 | 建议 |
|---|---|
| 模糊区域 | 控制尺寸,不宜过大 |
| 动画性能 | 使用 GPU 加速,避免频繁重绘 |
| 动态背景 | 尽量减少滤镜层叠 |
| 移动端 | 谨慎使用高强度 blur()(耗性能) |
