从基础语法到实战应用,一篇掌握所有滤镜技巧
一、什么是CSS filter?
filter 是CSS中用于给元素添加图像处理效果的属性,就像给图片加了一层"Photoshop滤镜"。它可以直接在浏览器中实现模糊、变色、调整亮度等效果,无需任何图片资源。
核心优势:
- ✅ 纯CSS实现,性能优秀
- ✅ 实时可调,支持动画过渡
- ✅ 作用于任何HTML元素(图片、文字、视频、div等)
二、基础语法
css
/* 单个滤镜 */
filter: blur(5px);
/* 多个滤镜组合(空格分隔,按顺序执行) */
filter: blur(5px) brightness(1.2) contrast(1.1);
/* 取消所有滤镜 */
filter: none;
关键规则:
| 规则 | 说明 |
|---|---|
| 🎯 空格分隔 | 多个滤镜用空格隔开,如 blur(5px) grayscale(50%) |
| 📐 顺序重要 | 从左到右依次执行,顺序不同效果不同 |
| 🚫 不继承 | filter不会被子元素自动继承 |
| 🔄 可动画 | 滤镜值支持transition和animation |
三、10个滤镜函数详解
1️⃣ blur() --- 高斯模糊
用途: 制作毛玻璃、背景虚化、焦点效果
css
/* 基础用法 */
img { filter: blur(5px); }
/* 动态模糊效果 */
.card:hover {
filter: blur(2px);
transition: filter 0.3s ease;
}
| 参数 | 示例 | 效果 |
|---|---|---|
0px |
blur(0) |
无模糊(原始状态) |
1-5px |
blur(3px) |
轻微模糊 |
5-15px |
blur(10px) |
明显模糊(毛玻璃效果) |
>20px |
blur(30px) |
极度模糊(几乎不可辨识) |
💡 实际应用:背景虚化
css
.hero-bg {
background-image: url('photo.jpg');
filter: blur(8px) brightness(0.7);
transform: scale(1.1); /* 放大避免模糊后边缘留白 */
}
2️⃣ brightness() --- 亮度调节
用途: 调亮/调暗元素,制作夜间模式
css
/* 增亮150% */
.day-mode { filter: brightness(150%); }
/* 变暗50% */
.night-mode { filter: brightness(50%); }
/* 完全黑色 */
.off { filter: brightness(0%); }
| 参数 | 说明 |
|---|---|
0% |
完全黑色 |
100%(1) |
原始亮度 |
150%(1.5) |
亮度提升50% |
200%(2) |
亮度翻倍 |
>300% |
过度曝光,细节丢失 |
💡 实际应用:夜间模式切换
css
body.dark {
filter: brightness(80%) contrast(120%);
transition: filter 0.5s ease;
}
3️⃣ contrast() --- 对比度调节
用途: 增强/降低明暗对比,提升可读性
css
/* 增强对比度 */
.text-readable { filter: contrast(150%); }
/* 降低对比度(柔和效果) */
.soft-look { filter: contrast(80%); }
/* 极端对比度 */
.dramatic { filter: contrast(200%); }
| 参数 | 效果 |
|---|---|
0% |
完全灰色(无对比) |
100% |
原始对比度 |
150% |
对比度增强50% |
>200% |
极端对比,可能丢失细节 |
4️⃣ grayscale() --- 灰度转换
用途: 制作黑白照片、禁用状态
css
/* 完全黑白 */
.disabled { filter: grayscale(100%); }
/* 半灰度(怀旧感) */
.vintage { filter: grayscale(60%); }
/* 动态效果:悬停恢复彩色 */
.photo {
filter: grayscale(100%);
transition: filter 0.4s ease;
}
.photo:hover {
filter: grayscale(0%);
}
| 参数 | 效果 |
|---|---|
0% |
原始彩色 |
50% |
半灰度 |
100% |
完全黑白 |
5️⃣ hue-rotate() --- 色相旋转
用途: 改变整体色调,制作彩虹动画
css
/* 旋转90度(红→黄→绿→蓝→红) */
.color-shift { filter: hue-rotate(90deg); }
/* 旋转180度(红→青) */
.invert-colors { filter: hue-rotate(180deg); }
/* 完整色轮动画 */
@keyframes rainbow {
0% { filter: hue-rotate(0deg); }
100% { filter: hue-rotate(360deg); }
}
.rainbow-text {
animation: rainbow 3s linear infinite;
}
| 参数 | 效果 |
|---|---|
0deg |
无变化 |
90deg |
色相前进90° |
180deg |
色相反转 |
360deg |
完整一圈(回到原点) |
6️⃣ invert() --- 颜色反转(负片)
用途: 制作负片效果、夜间模式
css
/* 完全反色 */
.negative { filter: invert(100%); }
/* 部分反色 */
.partial-invert { filter: invert(50%); }
| 参数 | 效果 |
|---|---|
0% |
无变化 |
100% |
完全反色(白变黑,红变青) |
⚠️ 注意: 对文字使用会严重影响可读性!
7️⃣ opacity() --- 透明度(滤镜版)
用途 : 精确控制元素透明度(与CSS opacity 略有不同)
css
/* 70%透明 */
.fade { filter: opacity(70%); }
/* 完全透明 */
.hidden { filter: opacity(0%); }
| 参数 | 效果 |
|---|---|
0% |
完全透明 |
100% |
完全不透明 |
💡 与 opacity 属性的区别:
filter: opacity()创建新的层叠上下文- CSS
opacity影响整个元素(包括子元素) - 滤镜版更适合复合效果
8️⃣ saturate() --- 饱和度调节
用途: 控制色彩鲜艳程度
css
/* 完全去色(等同于 grayscale) */
.desaturate { filter: saturate(0%); }
/* 原始饱和度 */
.normal { filter: saturate(100%); }
/* 超饱和(色彩更鲜艳) */
.vivid { filter: saturate(200%); }
| 参数 | 效果 |
|---|---|
0% |
完全灰度 |
100% |
原始饱和度 |
200% |
饱和度翻倍 |
>300% |
过度饱和,颜色失真 |
9️⃣ sepia() --- 棕褐色(复古滤镜)
用途: 制作老照片、怀旧效果
css
/* 轻微复古 */
.retro { filter: sepia(40%); }
/* 完全复古 */
.old-photo { filter: sepia(100%); }
/* 组合复古效果 */
.vintage {
filter: sepia(60%) contrast(110%) brightness(90%);
}
| 参数 | 效果 |
|---|---|
0% |
无效果 |
40-60% |
轻微复古 |
100% |
完全棕褐色 |
🔟 drop-shadow() --- 投影(⭐ 特殊滤镜)
用途 : 给非矩形元素添加阴影(优于 box-shadow)
css
/* 基础投影 */
.shadow { filter: drop-shadow(4px 4px 8px rgba(0,0,0,0.3)); }
/* 彩色投影 */
.glow { filter: drop-shadow(0 0 10px rgba(255, 0, 0, 0.8)); }
/* 配合透明PNG使用 */
.logo {
filter: drop-shadow(2px 4px 6px rgba(0,0,0,0.5));
}
| 参数 | 说明 | 示例 |
|---|---|---|
offset-x |
水平偏移(必填) | 4px |
offset-y |
垂直偏移(必填) | 4px |
blur-radius |
模糊半径(可选) | 8px |
color |
阴影颜色(可选) | rgba(0,0,0,0.3) |
🔥 核心优势:能贴合元素真实形状!
css
/* PNG透明图片 → box-shadow是矩形,drop-shadow贴合轮廓 */
img.icon {
/* ❌ box-shadow:矩形阴影 */
box-shadow: 4px 4px 8px rgba(0,0,0,0.3);
/* ✅ drop-shadow:贴合图片轮廓 */
filter: drop-shadow(4px 4px 8px rgba(0,0,0,0.3));
}
四、滤镜组合:实战配方
🎬 配方1:复古老照片
css
.vintage-photo {
filter: sepia(70%) contrast(120%) brightness(90%) saturate(80%);
}
🌌 配方2:毛玻璃背景
css
.glass-bg {
filter: blur(10px) brightness(120%);
}
🌙 配方3:夜间模式
css
.dark-mode {
filter: brightness(70%) contrast(130%) saturate(80%);
}
🎨 配方4:霓虹发光效果
css
.neon {
filter: brightness(150%) contrast(150%) saturate(200%) drop-shadow(0 0 10px currentColor);
}
📺 配方5:褪色文字
css
.faded-text {
filter: grayscale(80%) contrast(80%) brightness(110%);
}
五、实战应用场景
🎯 场景1:图片悬停动效
html
<div class="gallery">
<img src="photo.jpg" alt="风景">
</div>
css
.gallery img {
transition: filter 0.4s ease, transform 0.4s ease;
}
.gallery:hover img {
filter: brightness(110%) contrast(110%) saturate(120%);
transform: scale(1.05);
}
🎯 场景2:动态色相旋转动画
css
@keyframes hueShift {
0% { filter: hue-rotate(0deg); }
100% { filter: hue-rotate(360deg); }
}
.rainbow-element {
animation: hueShift 5s linear infinite;
}
🎯 场景3:毛玻璃导航栏
css
.navbar {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px) brightness(120%);
-webkit-backdrop-filter: blur(10px) brightness(120%); /* Safari */
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
}
💡
backdrop-filter是filter的兄弟属性,作用于元素背后的内容。
🎯 场景4:按钮禁用状态
css
.btn {
transition: filter 0.3s ease;
}
.btn:disabled {
filter: grayscale(100%) brightness(70%) opacity(50%);
cursor: not-allowed;
}
🎯 场景5:SVG图标变色
css
/* 默认颜色 */
.icon { filter: hue-rotate(0deg) saturate(100%); }
/* 悬停变色 */
.icon:hover {
filter: hue-rotate(180deg) saturate(200%);
transition: filter 0.3s ease;
}
六、性能优化指南
| 优先级 | 优化策略 | 说明 |
|---|---|---|
| ⭐⭐⭐ | 避免动画 blur() |
高性能消耗,radius > 10px 慎用 |
| ⭐⭐⭐ | 使用 will-change: filter |
提示浏览器提前优化 |
| ⭐⭐ | 触发GPU加速 | transform: translateZ(0) 或 transform: translate3d(0,0,0) |
| ⭐⭐ | 缩小作用范围 | 只对必要元素使用滤镜 |
| ⭐ | 降低模糊半径 | blur(3px) 比 blur(10px) 快3倍+ |
css
/* 性能优化写法 */
.optimized {
will-change: filter;
transform: translateZ(0); /* 触发GPU加速 */
transition: filter 0.3s ease;
}
七、浏览器兼容性
| 浏览器 | 最低版本 | 是否需要前缀 |
|---|---|---|
| Chrome | 53+ | ✅ 无需 |
| Firefox | 35+ | ✅ 无需 |
| Safari | 9.1+ | ✅ 无需(9.1以下需 -webkit-) |
| Edge | 13+ | ✅ 无需 |
| Opera | 40+ | ✅ 无需 |
| IE | ❌ 不支持 | - |
特性检测写法:
css
@supports (filter: blur(1px)) {
.modern { filter: blur(5px); }
}
@supports not (filter: blur(1px)) {
.fallback { /* 降级方案 */ }
}
八、常见问题 FAQ
| 问题 | 解答 |
|---|---|
| ❓ filter会影响子元素吗? | ❌ 不会!filter不继承,每个元素需单独设置 |
| ❓ filter和opacity属性有什么区别? | opacity影响整个元素(包括子元素),filter: opacity()只影响当前元素 |
| ❓ 可以对视频使用filter吗? | ✅ 可以!<video> 元素完全支持 |
| ❓ filter能用于背景图吗? | ✅ 可以!background-image 也能加滤镜 |
| ❓ 如何取消某个滤镜? | 设置为 none,或单独移除该函数 |
| ❓ filter会影响SEO吗? | ❌ 不影响,搜索引擎忽略视觉效果 |
九、快速参考表
| 滤镜函数 | 语法示例 | 常用值 | 典型用途 |
|---|---|---|---|
blur() |
blur(5px) |
3-15px | 毛玻璃、背景虚化 |
brightness() |
brightness(120%) |
80%-150% | 调光、夜间模式 |
contrast() |
contrast(130%) |
80%-150% | 增强可读性 |
grayscale() |
grayscale(100%) |
0%-100% | 黑白、禁用状态 |
hue-rotate() |
hue-rotate(90deg) |
0-360deg | 变色、彩虹动画 |
invert() |
invert(100%) |
0%-100% | 负片效果 |
opacity() |
opacity(70%) |
0%-100% | 透明度控制 |
saturate() |
saturate(150%) |
0%-200% | 色彩鲜艳度 |
sepia() |
sepia(60%) |
40%-100% | 复古效果 |
drop-shadow() |
drop-shadow(4px 4px 8px black) |
- | 非矩形阴影 |
十、总结
| 维度 | 要点 |
|---|---|
| 🎯 核心价值 | 纯CSS实现图像处理,无需图片资源 |
| 🔧 语法简单 | filter: blur(5px) brightness(1.2) |
| ⚡ 性能优秀 | GPU加速,但避免动画模糊 |
| 🎨 组合强大 | 10个函数可自由组合 |
| 📱 兼容性好 | 所有现代浏览器全面支持 |
CSS filter 让前端开发者拥有了"免费用Photoshop"的能力。
掌握这10个滤镜函数 + 组合技巧,你就能用纯CSS实现90%的常见视觉效果!🚀
💡 小贴士:打开 Chrome DevTools → Elements → 选中元素 → Styles 面板 → 点击 filter 属性旁的小方块,即可可视化编辑所有滤镜参数!