css中backdrop-filter 详细使用 ios毛玻璃效果、filter和backdrop-filter使用说明

🎨 CSS backdrop-filter 全面指南

backdrop-filter 是一种可以对 元素后面的内容 应用图像处理效果的 CSS 属性,常用于实现类似 iOS 界面的「毛玻璃」效果。


🧩 一、作用简介

backdrop-filter 会对元素 背后的内容区域 应用模糊、亮度、对比度等滤镜,而不是作用于自身。

属性 作用对象 常用场景
filter 对元素本身生效 图片模糊、灰度处理
backdrop-filter 对元素背景内容生效 毛玻璃、模糊弹窗、半透明导航栏

🧠 二、基本语法

css 复制代码
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 毛玻璃、半透明底栏

🧠 二、基础语法对比

css 复制代码
/* 作用于自身内容 */
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));
  1. 图片模糊与亮度调节

    .photo { width: 300px; filter: blur(5px) brightness(1.3) contrast(0.8); }

效果:图片模糊、稍亮、对比度降低

  1. 灰度图标

    .icon {
    filter: grayscale(1);
    }
    .icon:hover {
    filter: grayscale(0);
    transition: filter 0.3s;
    }

效果:默认灰色图标,悬停恢复彩色

backdrop-filter 属性详解

backdrop-filter 用于对 元素背后的内容区域 进行图像处理。

  1. iOS 风格的「毛玻璃背景」

  2. 半透明弹窗

  3. 模糊底部导航栏

  4. 背景模糊遮罩层
    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()(耗性能)
相关推荐
景彡先生8 小时前
Python Selenium详解:从入门到实战,Web自动化的“瑞士军刀”
前端·python·selenium
Liudef0610 小时前
DeepseekV3.2 实现构建简易版Wiki系统:从零开始的HTML实现
前端·javascript·人工智能·html
景早12 小时前
vue 记事本案例详解
前端·javascript·vue.js
wangjialelele13 小时前
Qt中的常用组件:QWidget篇
开发语言·前端·c++·qt
乔冠宇13 小时前
vue需要学习的点
前端·vue.js·学习
用户479492835691513 小时前
同样是 #,锚点和路由有什么区别
前端·javascript
Hero_112713 小时前
在pycharm中install不上需要的包
服务器·前端·pycharm
爱上妖精的尾巴13 小时前
5-26 WPS JS宏数组元素添加删除应用
开发语言·前端·javascript·wps·js宏
是谁眉眼13 小时前
wpsapi
前端·javascript·html