CSS滤镜

CSS滤镜允许你对元素的视觉效果进行处理,如模糊、亮度、对比度、饱和度等。滤镜可以应用于图片、背景和其他HTML元素,创造出各种视觉效果。

滤镜基础

滤镜通过filter属性实现,它可以接受一个或多个滤镜函数作为值。

css
.element {
  filter: blur(5px) brightness(1.5);
}

滤镜函数

blur()

对元素应用模糊效果。值越大,模糊程度越高。

css
.element {
  filter: blur(5px);
}

brightness()

调整元素的亮度。值大于100%会增加亮度,小于100%会降低亮度。

css
/* 增加亮度 */
.element {
  filter: brightness(1.5);
}

/* 降低亮度 */
.element {
  filter: brightness(0.5);
}

contrast()

调整元素的对比度。值大于100%会增加对比度,小于100%会降低对比度。

css
/* 增加对比度 */
.element {
  filter: contrast(1.5);
}

/* 降低对比度 */
.element {
  filter: contrast(0.5);
}

drop-shadow()

给元素添加阴影效果。与box-shadow不同,drop-shadow会考虑元素的透明度。

css
.element {
  filter: drop-shadow(5px 5px 10px rgba(0,0,0,0.5));
}

参数:

  • x-offset:水平偏移量
  • y-offset:垂直偏移量
  • blur-radius:模糊半径
  • color:阴影颜色

grayscale()

将元素转换为灰度图像。值为100%时完全灰度,0%时保持原色。

css
.element {
  filter: grayscale(100%);
}

hue-rotate()

调整元素的色相旋转角度。

css
.element {
  filter: hue-rotate(90deg);
}

invert()

反转元素的颜色。值为100%时完全反转,0%时保持原色。

css
.element {
  filter: invert(100%);
}

opacity()

调整元素的透明度。与标准的opacity属性类似。

css
.element {
  filter: opacity(0.5);
}

saturate()

调整元素的饱和度。值大于100%会增加饱和度,小于100%会降低饱和度。

css
/* 增加饱和度 */
.element {
  filter: saturate(2);
}

/* 降低饱和度 */
.element {
  filter: saturate(0.5);
}

sepia()

将元素转换为棕褐色调。值为100%时完全棕褐色,0%时保持原色。

css
.element {
  filter: sepia(100%);
}

url()

应用SVG滤镜。

css
.element {
  filter: url(#svg-filter);
}

组合滤镜

可以同时应用多个滤镜,它们会按顺序执行。

css
.element {
  filter: blur(2px) brightness(1.2) contrast(1.5) grayscale(50%);
}

滤镜示例

图片特效

css
/* 复古照片效果 */
.vintage-photo {
  filter: sepia(80%) hue-rotate(-10deg) brightness(1.1) contrast(0.9);
}

/* 黑白照片效果 */
.black-white {
  filter: grayscale(100%);
}

/* 高对比度效果 */
.high-contrast {
  filter: contrast(2) brightness(0.9);
}

按钮悬停效果

css
.button {
  background-color: blue;
  color: white;
  padding: 10px 20px;
  transition: filter 0.3s ease;
}

.button:hover {
  filter: brightness(1.2) saturate(1.3);
}

毛玻璃效果

css
.frosted-glass {
  background-color: rgba(255, 255, 255, 0.3);
  backdrop-filter: blur(10px);
}

注意:backdrop-filterfilter类似,但它只应用于元素后面的区域,而不是元素本身。

浏览器兼容性

CSS滤镜在现代浏览器中有很好的支持,但需要考虑旧版本浏览器的兼容性:

  • Chrome 53+
  • Firefox 35+
  • Safari 9.1+
  • IE 不支持
  • Edge 79+

对于旧版本浏览器的支持,可以添加浏览器前缀:

css
.element {
  filter: blur(5px);
  -webkit-filter: blur(5px); /* Safari和Chrome */
}

性能考虑

  • 滤镜可能会影响性能,特别是在移动设备上
  • 避免在大型元素或多个元素上使用复杂的滤镜组合
  • 使用硬件加速可以提高滤镜性能
css
.element {
  transform: translateZ(0); /* 启用硬件加速 */
  filter: blur(5px);
}