CSS filter 属性是一个强大的视觉效果工具,允许开发者对元素应用各种图形效果,如模糊、亮度调整、对比度增强等。它通过在元素渲染时应用一系列滤镜函数来实现这些效果。

一、基本语法

filter: <filter-function> [ <filter-function> ]* | none;
  • 默认值:none(无滤镜效果)。

  • 滤镜组合:可同时应用多个滤镜函数(空格分隔),按顺序叠加效果。

二、常用滤镜函数

下表简要汇总了若干常用滤镜函数:

 函数名

作用

参数说明

blur()

模糊效果

长度值(如5px),值越大越模糊

brightness()

亮度调整

数字或百分比(0% 全黑,100% 原图,>100% 更亮)

contrast()

对比度调整

数字或百分比(0% 全灰,100% 原图,>100% 更高对比度)

drop-shadow()

阴影效果

水平偏移、垂直偏移、模糊半径、颜色

grayscale()

灰度转换

数字或百分比(0% 原图,100% 全灰)

hue-rotate()

色相旋转

角度值(如 90deg),360deg 为一圈

invert()

颜色反转

数字或百分比(0% 原图,100% 完全反转)

opacity()

透明度调整

数字或百分比(0% 完全透明,100% 完全不透明)

saturate()

饱和度调整

数字或百分比(0% 无色彩,100% 原图,>100% 更高饱和度)

sepia()

褐色调(复古效果)

数字或百分比(0% 原图,100% 完全褐色)

以下从参数解析、应用场景到使用示例,逐一细致阐述各滤镜函数的特性与用法:

2.1 blur() - 模糊效果
filter: blur(5px);
  • 参数:模糊半径(像素值),值越大越模糊。

  • 应用:创建毛玻璃效果、突出前景内容等。

2.2 brightness() - 亮度调整
filter: brightness(1.5);  /* 增加50%亮度 */
filter: brightness(0.5);  /* 减少50%亮度 */
  • 参数:亮度值(1为原始亮度,大于1增亮,小于1变暗)。

  • 应用:调整图片亮度、创建明暗对比效果。

2.3 contrast() - 对比度调整
filter: contrast(2);  /* 增加100%对比度 */
filter: contrast(0.5);  /* 减少50%对比度 */
  • 参数:对比度值(1为原始对比度,大于1增加对比度,小于1减少对比度)。

  • 应用:增强图片层次感、突出细节。

2.4 drop-shadow() - 阴影效果
filter: drop-shadow(5px 5px 10px rgba(0,0,0,0.5));
  • 参数:水平偏移、垂直偏移、模糊半径、颜色。

  • 注意:与 box-shadow 类似,但 drop-shadow() 会跟随元素的透明度和形状。

2.5  grayscale() - 灰度转换
filter: grayscale(1);  /* 完全灰度 */
filter: grayscale(0.5);  /* 50%灰度 */
  • 参数:灰度值(0-1,0为原始颜色,1为完全灰度)。

  • 应用:创建黑白效果、强调特定元素。

2.6 hue-rotate() - 色相旋转
filter: hue-rotate(90deg);  /* 色相旋转90度 */
  • 参数:旋转角度(deg),范围0-360度。

  • 应用:调整图片色调、创建彩色滤镜效果。

2.7 invert() - 颜色反转
filter: invert(1);  /* 完全反转 */
filter: invert(0.5);  /* 50%反转 */
  • 参数:反转值(0-1,0为原始颜色,1为完全反转)。

  • 应用:创建负片效果、调整对比度。

 2.8 opacity() - 透明度调整
filter: opacity(0.5);  /* 50%透明度 */
  • 参数:透明度值(0-1,0为完全透明,1为完全不透明)。

  • 注意:与 opacity 属性类似,但 filter: opacity() 性能可能更好(尤其在GPU加速时)。

  • 与 opacity 属性的核心区别与特性:

    维度

    opacity 属性

    filter: opacity()

    功能

    直接控制元素及其内容的透明度(0-1范围)

    通过滤镜系统控制透明度,功能与 opacity 类似

    兼容性

    IE9+ 支持,所有现代浏览器原生支持

    IE10+ 支持(早期IE需使用旧版滤镜语法),现代浏览器完全支持

    层叠上下文

    仅当 opacity < 1 时创建新层叠上下文

    无论参数值如何,始终创建新层叠上下文

2.9 saturate() - 饱和度调整
filter: saturate(2);  /* 增加100%饱和度 */
filter: saturate(0.5);  /* 减少50%饱和度 */
  • 参数:饱和度值(1为原始饱和度,大于1增加饱和度,小于1减少饱和度)。

  • 应用:增强或减弱颜色鲜艳度。

2.10 sepia() - 褐色调效果
filter: sepia(1);  /* 完全褐色调 */
filter: sepia(0.5);  /* 50%褐色调 */
  • 参数:褐色调值(0-1,0为原始颜色,1为完全褐色调)。

  • 应用:创建复古照片效果。

三、实际应用示例

以下精选几个日常工作中高频应用的实例,助您高效理解与快速落地实践。

3.1 毛玻璃效果

结合 backdrop-filter (背景滤镜)使用:

.glass-card {
    background-color: rgba(255, 255, 255, 0.1);
    backdrop-filter: blur(20px);
    -webkit-backdrop-filter: blur(20px); /* Safari浏览器兼容 */
    border-radius: 16px;
    padding: 40px;
    box-shadow: 0 8px 32px rgba(0,0,0,0.3);
    border: 1px solid rgba(255,255,255,0.18);
}

3.2 图片悬停效果
.image-container img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: filter 0.3s ease;
}

.image-container:hover img {
    filter: brightness(1.2) contrast(1.1) saturate(1.2);
}

3.3 灰度模式网站
body {
  filter: grayscale(1);
}

3.4 动态滤镜动画效果
.dynamic-filter-overlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(255, 107, 107, 0.3);
    backdrop-filter: blur(0px) brightness(1);
    animation: dynamicFilter 4s infinite alternate;
}

@keyframes dynamicFilter {
    0% { backdrop-filter: blur(0px) brightness(1) contrast(1); }
    25% { backdrop-filter: blur(5px) brightness(1.2) contrast(1.1); }
    50% { backdrop-filter: blur(10px) brightness(0.8) contrast(1.3); }
    75% { backdrop-filter: blur(5px) brightness(1.1) contrast(0.9); }
    100% { backdrop-filter: blur(0px) brightness(1) contrast(1); }
}

四、性能考虑

  • 滤镜效果会增加浏览器渲染负担,尤其是复杂的滤镜组合。

  • 建议在关键元素上使用,避免全局应用。

  • 可以使用硬件加速(如 transform: translateZ(0))来提升性能。

五、与其他CSS属性的关系

  • filter 与 background-clip:filter 会应用于整个元素,包括背景和内容。

  • filter 与 z-index:滤镜不会直接影响元素的层级,但会创建新的层叠上下文。

  • filter 与 transition/animation:滤镜效果可以通过过渡和动画实现平滑变化。

六、浏览器兼容性

  • 主流浏览器(Chrome, Firefox, Safari, Edge)均支持 filter 属性。

  • IE浏览器不支持 filter 属性。

  • backdrop-filter 在某些旧版浏览器中支持有限。

建议访问《Can I Use》网站,以及时了解 flilter 属性在各类浏览器中的最新兼容性支持情况。

总结

filter 属性是 CSS 中实现视觉效果处理的一项强大功能,凭借简洁的语法便能呈现多样化的图形滤镜效果,广泛应用于 UI 美化、图像处理以及独特视觉体验的营造,为网页设计增添丰富表现力。

彩蛋

本文在Cnb平台上全面展示了CSS filter 的示例代码,欢迎访问《CSS filter完整演示》以获取更多详细内容。