前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库CSS backdrop-filter 与 filter 区别
CSS动画与视觉

backdrop-filter 和 filter 有什么区别?毛玻璃效果怎么实现?

filter 对元素自身(包括文字、边框、子元素)施加滤镜,backdrop-filter 只对元素背后、透过来的那层内容施加滤镜。做毛玻璃效果要用 backdrop-filter: blur(),同时元素自身的背景必须是半透明的,否则看不到模糊效果。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#动画与视觉#动画
先看核心答案读代码示例
理解线索

两种滤镜的作用对象

  1. filter对元素自身和所有子内容施加效果,文字也会被模糊
  2. backdrop-filter只对元素下方、透过来的画面施加效果,元素自身内容不受影响
  3. 半透明背景元素必须设置 rgba() 或 transparent 等半透明背景,不然滤镜效果被遮住

backdrop-filter 会让元素提升为独立合成层,大面积使用会增加 GPU 内存和绘制开销。

核心回答

先记住这个答案

filter 作用在元素自身上,写 filter: blur(10px) 整个元素连文字一起变模糊。backdrop-filter 作用在元素背后那层画面上,元素自身的文字和内容完全不受影响,透过半透明背景看到的背后内容才是模糊的。iOS 系统的通知中心、macOS 的侧边栏那种毛玻璃效果,用的就是 backdrop-filter: blur()。

  • filter 模糊自身,背景滤镜模糊背后
  • 元素背景必须半透明才能看到效果
  • 会创建新的层叠上下文和合成层
  • 移动端大面积使用会影响帧率

毛玻璃效果的标准写法

做毛玻璃效果的关键不只是加 backdrop-filter,还要让元素自身的背景半透明,否则模糊效果会被不透明的背景完全遮住,等于白加。

一个典型的毛玻璃导航栏CSS
.navbar {
  position: fixed;
  top: 0;
  width: 100%;
  /* 背景必须半透明,才能透出模糊效果 */
  background: rgba(255, 255, 255, 0.6);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px); /* Safari 需要前缀 */
}

这里 rgba(255, 255, 255, 0.6) 的透明度 0.6 是关键。设成 1 就完全不透明,看不到任何模糊;设成 0 又太透了,模糊效果不明显。通常 0.5 到 0.8 之间的值最自然。 Safari 目前仍然需要 -webkit-backdrop-filter 前缀。Chrome、Edge、Firefox 都已经支持无前缀写法。

filter 和 backdrop-filter 一起用会怎样

两个属性可以同时写在一个元素上,效果叠加但互不干扰。filter 处理的是元素自身的渲染结果,backdrop-filter 处理的是元素下方的画面,两者在不同的层上分别计算。

比如给一个浮层同时加 backdrop-filter: blur(10px) 和 filter: drop-shadow(0 4px 6px rgba(0,0,0,0.3)),背后的内容被模糊,浮层自身带投影,两个效果都生效。

但要注意,一旦给父元素加了 filter,它就会成为子元素 position: fixed 的包含块,子元素的固定定位会失效。这个副作用 backdrop-filter 没有。

不支持时怎么降级

可以用 @supports 检测。不支持 backdrop-filter 的旧浏览器可以退化成纯色半透明背景,体验差一点但不影响使用。

渐进增强写法CSS
.overlay {
  /* 默认降级:纯色半透明 */
  background: rgba(255, 255, 255, 0.85);
}

@supports (backdrop-filter: blur(1px)) {
  .overlay {
    background: rgba(255, 255, 255, 0.5);
    backdrop-filter: blur(16px);
    -webkit-backdrop-filter: blur(16px);
  }
}

降级方案里把透明度调高一点(0.85),虽然没有模糊效果,但文字依然可读。支持 backdrop-filter 时再把透明度调低(0.5),让模糊效果更明显。

回答前,多想一步

容易答错的地方

忘了设半透明背景
写了 backdrop-filter: blur(10px) 但背景是 background: white,模糊效果完全被遮住,看起来像没加一样。检查的时候临时把背景改成 transparent,如果模糊出现了,就是透明度的问题。
把模糊半径设得过大
blur(50px) 以上在移动端会明显掉帧,因为每一帧都要对背后区域做高斯模糊。实际项目里 8px 到 20px 就足够了。如果面积还很大,可以考虑用 will-change: backdrop-filter 提前提升合成层,但也要在动画结束后移除。
以为 backdrop-filter 能穿透多层
backdrop-filter 只处理当前元素正下方一层的内容。如果中间还隔了一个不透明的元素,那层内容被遮住了,backdrop-filter 也模糊不到更下面的内容。
试着用自己的话回答

面试官还会怎么问?

filter: blur() 和 backdrop-filter: blur() 的性能差距大吗?

filter: blur() 只需要对元素自身的位图做一次模糊,开销固定。backdrop-filter: blur() 每帧都要把元素下方的内容截取出来做模糊,如果背后的内容频繁变化(比如视频、动画),开销会大得多。面积越大、模糊半径越大,性能差距越明显。

backdrop-filter 除了 blur 还能用什么滤镜函数?

和 filter 一样,backdrop-filter 支持所有 CSS 滤镜函数:brightness()、contrast()、grayscale()、saturate()、hue-rotate()、invert()、sepia()、drop-shadow() 等,也可以用空格分隔同时叠加多个。

为什么 filter 会影响子元素的 position: fixed?

filter 会让元素创建一个新的包含块。根据规范,position: fixed 的包含块本来是视口,但如果祖先元素有 filter(值不是 none),fixed 就会相对于这个祖先定位。backdrop-filter 不会产生这个影响。

从一道题,走向一组知识

把知识连起来

动画与视觉

做 3D 卡片翻转效果时,backface-visibility 解决的是什么问题?

两者都会创建新的层叠上下文,搞混了容易出现 z-index 层级不符合预期的情况。

动画与视觉

什么情况下元素会被提升为独立合成层?will-change 怎么用才对?

backdrop-filter 会触发合成层提升,和 will-change 的提升机制可以放在一起理解。

参考资料

  • CSS:动画与视觉参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 毛玻璃效果的标准写法
  3. filter 和 backdrop-filter 一起用会怎样
  4. 不支持时怎么降级
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑