CSS 滤镜生成器

下一个

CSS filter 属性可对任何元素应用图像处理效果,如模糊、亮度、对比度和饱和度,而不仅仅是图片。将多个滤镜串联并正确设置单位是容易出错的地方。此生成器可为五种最常见的函数构建 filter 声明:模糊、亮度、对比度、灰度和饱和度。输入数值,然后复制生成的 CSS。

如何构建滤镜链

  1. 1

    输入数值

    模糊以像素为单位;亮度、对比度、灰度和饱和度以百分比为单位。

  2. 2

    理解数值范围

    亮度和对比度为 100% 表示没有变化,为 0% 时元素变为黑色或灰色。灰度从 0%(全彩)到 100%(完全去色);饱和度为 100% 时颜色保持不变。

  3. 3

    生成 CSS

    点击按钮,工具会输出包含全部五个函数的组合 `filter` 规则。

  4. 4

    复制规则

    复制结果并粘贴到样式表中。

  5. 5

    检查顺序

    函数从左到右依次应用。如果效果与预期不同,请调整数值。

滤镜函数

函数 单位 效果
blur() px 高斯模糊。0 = 不模糊
brightness() 百分比或小数 100% = 不变,0% = 全黑,200% = 亮度翻倍
contrast() 百分比或小数 100% = 不变,0% = 全灰,200% = 对比度翻倍
saturate() 百分比或小数 100% = 不变,0% = 灰度
grayscale() 百分比或小数 0% = 不变,100% = 完全去色
sepia() 百分比或小数 0% = 不变,100% = 完全棕褐色
hue-rotate() deg 0deg = 不变。旋转色相环
invert() 百分比或小数 0% = 不变,100% = 完全反转
opacity() 百分比或小数 opacity 属性相同
drop-shadow() x y 模糊 颜色 类似 box-shadow,但会跟随不透明度/clip-path

串联顺序很重要

filter: brightness(0.5) saturate(2) 先应用亮度,再应用饱和度,两个滤镜会叠加作用。

filter: saturate(2) brightness(0.5) 先应用饱和度。由于图像在被压暗之前更亮,色彩的饱和度会更明显。

视觉差异虽然细微,却真实存在。当滤镜链的效果不如预期时,不妨两种顺序都试一试。

常用配方

/* 褪色照片风格 */
filter: contrast(0.9) saturate(0.85) brightness(1.05);

/* 复古 / 褪色 */
filter: sepia(0.3) contrast(1.1) brightness(0.95);

/* 双色调近似 */
filter: grayscale(1) sepia(1) hue-rotate(180deg) saturate(1.5);

/* 压暗主视觉图 */
filter: brightness(0.6);

/* 禁用状态 */
filter: grayscale(1) opacity(0.6);

/* 毛玻璃叠加层 */
filter: blur(12px) saturate(1.3);

用于毛玻璃效果的 backdrop-filter

filter 作用于元素自身;backdrop-filter 作用于半透明元素背后的内容,也就是 iOS 普及的毛玻璃效果。

.modal-backdrop {
  background: rgba(255, 255, 255, 0.5);
  backdrop-filter: blur(20px) saturate(1.2);
}

支持情况:所有现代浏览器;Firefox 从 103 版起终于无需开启标志即可支持。

性能提示

  • blur() 是开销最大的滤镜,因为它需要用卷积核对每个像素做运算。在 4K 主视觉图上做 30px 模糊会实实在在地掉帧。
  • grayscalesepiabrightness 等是逐像素的颜色变换,开销很低。
  • 现代浏览器中滤镜会经 GPU 加速,但在低端设备上对 blur() 做动画仍会卡顿。
  • 做动画前最好先设置 will-change: filter

filter: drop-shadow()box-shadow 的区别

  • box-shadow 跟随元素的边框盒(尊重 border-radius)。
  • filter: drop-shadow() 跟随元素的非透明像素,因此会沿着 clip-path 形状、PNG 透明区域和 SVG 路径描绘阴影。

为裁剪过或带透明区域的图像添加阴影时用 drop-shadow;标准卡片和方框则用更快的 box-shadow

常见问题

是的,滤镜会把该元素及其所有后代作为一个整体来处理。若对父元素应用滤镜,子元素也会一并包含在内。如需只对父元素的背景应用滤镜,请将内容放入独立的堆叠上下文,或改用 backdrop-filter

因为模糊会作用于整个元素,包括已渲染的文字。仅靠普通的 filter 无法在保持文字清晰的同时模糊背景。请在半透明叠加层上使用 backdrop-filter,并把文字放在被滤镜处理的元素之外。

是的,所有滤镜功能均支持动画效果。请特别注意移动端的模糊效果表现,动态调整模糊半径会显著增加资源消耗。grayscalesepiabrightness的动画效果运行成本较低。

是的,CSS filter 对 SVG 元素的处理方式与其他DOM元素完全相同。 SVG 还拥有更丰富的<filter>元素系统,该系统功能更强大但代码更为冗长。

相关工具

此工具还提供其他语言版本