11滤镜与混合
CSS 滤镜(filter)让元素能模糊、变色、变灰阶; backdrop-filter 给「背后」染色做毛玻璃; mix-blend-mode 让元素像 Photoshop 图层那样互相混合; background-blend-mode 让背景图和背景色互相混合。 四种「图层效果」一次讲清——从此告别图片处理软件,CSS 自己就是滤镜工厂。
一、filter 滤镜函数链
filter 接受一串函数链,从左到右依次作用在元素自身上。
函数之间用空格分隔,多个函数叠加就得到「先模糊、再调亮、最后转灰度」这种组合效果——
完全无需打开 Photoshop。
| 函数 | 作用 | 参数范围 | 默认值 |
|---|---|---|---|
blur() | 高斯模糊 | 长度,0 起无上限 | 0 |
brightness() | 亮度 | 数字,0 全黑、1 原色 | 1 |
contrast() | 对比度 | 数字,0 全灰、1 原色 | 1 |
grayscale() | 灰度 | 0~1,1 黑白照 | 0 |
sepia() | 褐色 / 复古 | 0~1,1 老照片 | 0 |
saturate() | 饱和度 | 数字,0 去色、>1 更艳 | 1 |
hue-rotate() | 色相旋转 | 角度,0deg~360deg | 0deg |
invert() | 反色 | 0~1,1 照片底片 | 0 |
opacity() | 透明度 | 0~1,与 opacity 属性类似但只过滤镜链 | 1 |
.b14 的 blur() 数值看模糊半径变化filter: opacity(.5) 与 opacity: .5 看起来一样,
但 opacity 属性是「整元素半透」,而 filter 里的 opacity()
只在滤镜链里生效——二者性能、合成层归属都不相同。二、backdrop-filter:背景模糊(毛玻璃)
backdrop-filter 给元素背后的内容加滤镜——
注意是「背后」,不是「自身」。iOS 的通知中心、Windows 11 的 Acrylic
半透明效果,都是这一招。套路只有两步:
背景半透明 + backdrop-filter 模糊。
.fb-glass-stage .card.bot 的 backdrop-filter 改成 none 看效果消失background: #FDF9F4
background: rgba 半透
+ backdrop-filter
background: #FFF 不透明,背后的内容就完全看不见,模糊也没意义。
通常 rgba(255,255,255,.4 ~ .6) 是甜区。三、filter vs backdrop-filter 区别
一句话概括:filter 改自身,backdrop-filter 改背后。 二者可以同时写在一个元素上,互不冲突——但要注意 backdrop-filter 要求元素有半透明背景,否则看不到效果。
| 对比项 | filter | backdrop-filter |
|---|---|---|
| 作用对象 | 元素自身(含子元素) | 元素背后的内容 |
| 背景需要半透明吗 | 不需要 | 必须,否则看不到背后 |
| 典型场景 | 图片调色、hover 滤镜、故障特效 | 毛玻璃顶栏、modal 背景、艺术字 |
| 性能 | 合成层 GPU | 略贵,需额外合成层计算 |
| 兼容性 | 全主流浏览器 | Safari 需 -webkit- 前缀 |
.card-a 改成 filter: none 看它瞬间清晰(把自己糊掉)
(糊背后)
四、mix-blend-mode:图层混合模式
mix-blend-mode 让元素像 Photoshop 图层那样与背后的内容互相混合——
经典用途:故障艺术字(difference)、海报大字压图(multiply)、
亮色叠加(screen)。共有 15 种混合模式,常用的就那四五个。
| 分类 | 模式 | 一句话作用 |
|---|---|---|
| 变暗系 | multiply | 两色相乘,越叠越深;海报字压图神器 |
| 变暗系 | darken | 取两者较暗像素 |
| 变暗系 | color-burn | 加深对比,烧焦感 |
| 变亮系 | screen | 反相后相乘,越叠越亮;霓虹字 |
| 变亮系 | lighten | 取两者较亮像素 |
| 变亮系 | color-dodge | 提亮对比,曝光感 |
| 对比系 | overlay | 深更深、浅更浅(multiply + screen) |
| 对比系 | hard-light | overlay 的「图层位置互换版」 |
| 对比系 | soft-light | overlay 的柔化版 |
| 反相比对 | difference | 两色相减取绝对值;故障风经典 |
| 反相比对 | exclusion | 比 difference 对比度低 |
| 分量 | hue | 只取一方的色相 |
| 分量 | saturation | 只取一方的饱和度 |
| 分量 | color | 取色相+饱和度,留亮度 |
| 分量 | luminosity | 取亮度,留色相+饱和度 |
.item.d .green 的 mix-blend-mode 改成 normal 看分离mix-blend-mode: multiply(深色字压浅图)
或 mix-blend-mode: screen(亮色字压深图)。原理就是「深更深」与「浅更浅」。五、background-blend-mode:背景图与色混合
background-blend-mode 只作用于元素自身的多个背景层之间——
把 background-image 与 background-color 互相混合。
最常见的用法是给图片加暗色蒙版:底层 url(图),顶层 linear-gradient(深色),二者用 multiply 混合。
background-blend-mode 改成 screen 看变亮background-blend-mode 只在「一个元素内」的多个背景层之间生效——
想要「跨元素」混合(例如两张图互相叠加),请用上一节的 mix-blend-mode。六、isolation: isolate 隔离混合上下文
默认情况下,mix-blend-mode 会穿透到所有祖先与背景混合——
这是 99% 串色事故的来源。isolation: isolate 会创建独立的堆叠上下文,
把混合效果关在父级盒子里,不再污染外面的兄弟元素。
.col.iso 的 isolation 删掉看污染mix-blend-mode,结果全站颜色都变了」——
99% 是忘了写 isolation: isolate。使用 mix-blend-mode 的同时,
一定给它最近的「应该被影响的祖先」加 isolation: isolate。七、组合实战:故障风艺术字 + 毛玻璃卡片 + 颜色循环图标
真实项目里这三种效果常常同时登场:
顶部 mix-blend-mode: difference 故障艺术字(白字压任意背景自动反相)、
中部 backdrop-filter 毛玻璃信息卡、
底部 filter: hue-rotate 颜色循环的图标群。
.fb-combo .glitch 的 mix-blend-mode 改成 multiply 看文字颜色变化八、本章小结
- filter 给元素自身加滤镜,9 种函数可链式叠加;常用
blur/grayscale/hue-rotate。 - backdrop-filter 给元素背后的内容加滤镜,必须配半透明背景才能看到效果,毛玻璃标配。
- mix-blend-mode 让元素与背后内容像 Photoshop 图层那样混合;
multiply压图、screen亮字、difference故障风。 - background-blend-mode 只在元素自身的多个背景层之间混合;图片暗色蒙版神器。
- 使用
mix-blend-mode必加 isolation: isolate 防止混合窜色到全站。 - 四件套性能开销:
backdrop-filter最贵,整页别超过两三处;filter 走 GPU 合成层很省。
backdrop-filter: blur(16px) + 半透明背景做毛玻璃;
②给 hero 大标题加 mix-blend-mode: difference 做故障艺术字(白字配任意背景都行);
③给 banner 图加 background-blend-mode: multiply 叠暗色渐变做暗色蒙版。
最后 F12 → Computed → 搜 filter 看看哪些属性被激活。