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完整演示》以获取更多详细内容。