CSS 滤镜(filter)

CSS 滤镜(filter)是 CSS3 推出的一组"即时图形后期"工具。

它不需要 Photoshop,也不需要 Canvas,只要一行声明就能把亮度、对比度、模糊、色相偏移等视觉效果实时渲染到任何元素 上------图片、文字、视频、背景图,甚至整个模块都可以一次性处理。

下面带你从零开始认识这套"前端版美图秀秀"。


一、最简记忆:滤镜 = 函数链

css 复制代码
filter: <函数-1>(参数) <函数-2>(参数) ... ;
  • 顺序从左到右依次执行,类似管道符。
  • 每个函数都有明确区间,超出即 clamp(被裁剪)。
  • 可以写任意多个,空格分隔;也可以只写一个。

二、10 个原生函数速查表

函数 作用 默认值 常见玩法
blur(px) 高斯模糊 0 毛玻璃背景、loading 遮罩
brightness(number) 线性亮度 1 0.6 夜间模式,1.4 高光
contrast(number) 对比度 1 1.5 让黑白更分明
grayscale(number) 去色 0 1 彻底灰度,0.5 淡彩
sepia(number) 复古棕褐 0 1 老照片,0.3 暖色打底
saturate(number) 饱和度 1 0 灰度,2 鲜艳
hue-rotate(deg) 色相旋转 0deg 180deg 反色,90deg 换季节
invert(number) 负片 0 1 完全反色,0.9 暗黑模式
opacity(number) 透明度 1 与 CSS opacity 差异见注①
drop-shadow() 真实投影 无 支持半透明 PNG 的"镂空"阴影

注①:filter:opacity() 会创建独立层叠上下文 ,而 opacity 属性不会;前者还能被硬件加速。


三、组合实战 4 例

  1. 一键暗黑
css 复制代码
.dark {
  filter: invert(1) hue-rotate(180deg) brightness(1.1);
}

原理:先反色,再把色相转半圈,最后略提亮,文字与图片一起"变黑"。

  1. 毛玻璃遮罩
css 复制代码
.mask {
  backdrop-filter: blur(10px) saturate(1.2);
  background: rgba(255,255,255,0.4);
}

backdrop-filter 只模糊背后内容,自身背景保持半透明,iOS 风导航栏标配。

  1. 图片 hover 高亮
css 复制代码
img {
  transition: filter .3s;
}
img:hover {
  filter: brightness(1.15) saturate(1.25);
}

鼠标移入瞬间"亮 + 艳",移出平滑回落。

  1. 文字故障风
css 复制代码
.glitch {
  filter: contrast(2) hue-rotate(90deg);
  text-shadow: 2px 0 #0ff, -2px 0 #f0f;
}

高对比 + 色相偏移 + 双色阴影,赛博朋克感拉满。


四、性能与兼容

  1. 硬件加速:现代浏览器会把 filter 丢给 GPU,通常比 Canvas 快,但:

    • 同时挂 5+ 个滤镜、大面积模糊(>30 px)或 4K 视频仍可能掉帧。
    • 移动端尽量 will-change:filter 提前声明,动画结束及时清除。
  2. 兼容性(2025 年 5 月):

    • 桌面:Chrome 53+、Edge 79+、Firefox 55+、Safari 14+ 全支持。
    • 移动端:iOS Safari 14+、Android Chrome 90+ 全覆盖。
    • 唯一老梗:IE 全系不支持,可优雅降级(无滤镜即原图)。
  3. 前缀:如今无需 -webkit-,但老设备(Android 7)仍建议:

css 复制代码
-webkit-filter: blur(5px);
filter: blur(5px);

五、常见坑点

  • filter 会让元素生成包含块 (contain: paint),内部 position:fixed 会"降级"为相对于该元素。
  • drop-shadow 与 box-shadow 差异:前者沿不透明像素边缘生成,适合 PNG 图标;后者永远矩形。
  • 滤镜不能 作用于:
    -- 父元素对子元素的背景穿透(background-filter 才行)
    -- 部分表单控件(如 <video> 的 controls 条,需关闭原生控件再自定义)

六、一句话总结

CSS filter 把"后期调色"从设计软件搬到了浏览器,一行代码即可让网页拥有场景化氛围 :

白天/黑夜、节日换肤、图片灰度、视频负片、毛玻璃导航......

掌握这 10 个函数,你就拥有了不刷新页面、不增加图片体积的即时视觉魔法。

相关推荐
环境栈笔记1 小时前
指纹浏览器 WebRTC 怎么设置?从 ICE 候选、代理出口到功能验证
前端·人工智能·后端·自动化
赵大仁1 小时前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu1 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
小羊没烦恼!1 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
史瓦辛格2 小时前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人2 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
鸥梨菌Honevid2 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet
IT_陈寒2 小时前
Python多进程共享变量这个坑,差点让我加班到凌晨
前端·人工智能·后端
鸿蒙开发2 小时前
PDF 盖黑框不等于脱敏:用 PDF.js + Canvas + pdf-lib 实现永久遮盖
前端·react.js
xixingzhe22 小时前
Nginx 看懂请求耗时瓶颈
服务器·前端·nginx