CSS 属性 filter 与 backdrop-filter 的对比分析本文将详细对比 CSS 属性 filter 与
CSS 提供了多种方式来为网页添加视觉效果,其中 filter
和 backdrop-filter
是两个非常有用的属性。它们都可以用于实现图像和元素的视觉变换,但它们的作用范围和用途有所不同。本文将详细对比这两个属性,并结合代码说明它们之间的差别。
1. 属性概述
filter:
filter
是一个CSS属性,用于为元素的图像本身(或任何其他可以应用滤镜的元素)应用视觉效果,比如模糊、锐化、颜色变化等。它直接影响到应用了该属性的元素本身。
backdrop-filter:
backdrop-filter
同样是一个CSS属性,但它的作用是为元素背后的区域(即元素的背板)应用滤镜效果。这意味着它可以为任何位于该元素下面的元素添加视觉效果,而不会改变元素本身的样式。
2. 适用场景
filter:
- 当你想要改变元素本身的视觉外观时,比如制作一个模糊的按钮或者带有颜色偏移的图片。
- 适用于需要视觉上突出元素本身的场景。
backdrop-filter:
- 当你想要为页面的某个部分创建深度感或者特殊的背景效果时,比如为一个半透明的导航栏添加模糊背景。
- 适用于需要创建梦幻效果或者增强视觉层次的场景。
3. 代码示例
filter 示例: 假设我们有一个图片,我们想要给它添加一个模糊效果,让其在视觉上与其他元素区分开来。
.img {
width: 600px;
height: 400px;
position: relative;
background-image: url(https://www.ahnews.com.cn/yaowen1/pc/pic/2023-11/11/989501_30a339af-f153-4d71-9d1d-423cd2b44ac8.jpg);
background-repeat: no-repeat;
background-size: cover;
filter:blur(3px);
}
<div class="img"></div>

backdrop-filter 示例: 假设我们只想给图片的左上角而不是整张图片添加一个模糊效果,以增强层次感。
<style>
.img {
width: 600px;
height: 400px;
position: relative;
background-image: url(https://www.ahnews.com.cn/yaowen1/pc/pic/2023-11/11/989501_30a339af-f153-4d71-9d1d-423cd2b44ac8.jpg);
background-repeat: no-repeat;
background-size: cover;
}
.drop{
content: ' ';
display: block;
position: absolute;
width: 20%;
height: 20%;
top: 0;
left: 0;
z-index: 0;
backdrop-filter: blur(3px);
}
</style>
<div class="img">
<div class="drop"></div>
</div>

4. 兼容性和性能考虑
filter:
filter
在现代浏览器中得到了广泛的支持。- 对于一些复杂的滤镜效果,可能会对性能产生影响,尤其是当应用于大型元素或动画时。
backdrop-filter:
backdrop-filter
是一个相对较新的属性,虽然主流浏览器已经提供了支持,但老旧的浏览器可能不支持。- 它可能对性能产生影响,特别是当应用于大面积或复杂效果时。
5. 结合使用
在某些情况下,filter
和 backdrop-filter
可以结合使用,以创建更丰富的视觉效果。例如,你可以同时给一个元素应用自身的滤镜效果,同时为它背后的内容添加不同的滤镜效果。
.img {
width: 600px;
height: 400px;
position: relative;
background-image: url(https://www.ahnews.com.cn/yaowen1/pc/pic/2023-11/11/989501_30a339af-f153-4d71-9d1d-423cd2b44ac8.jpg);
background-repeat: no-repeat;
background-size: cover;
filter: hue-rotate(45deg);
}
.drop{
content: ' ';
display: block;
position: absolute;
width: 50%;
height: 100%;
top: 0;
left: 0;
z-index: 0;
backdrop-filter: hue-rotate(-45deg);
}
<div class="img">
<div class="drop"></div>
</div>

6. 注意事项
- 使用
filter
和backdrop-filter
时,要注意它们对性能的影响,尤其是在移动设备上。 - 过度使用滤镜效果可能会使网页显得杂乱无章,因此使用时应保持适度。
- 始终检查不同浏览器和设备上的显示效果,确保兼容性和一致性。
7. 结论
filter
和 backdrop-filter
是CSS中两个强大的属性,它们提供了丰富的视觉效果来增强网页的视觉吸引力。filter
主要用于元素自身的视觉变换,而 backdrop-filter
则用于创建背后的视觉效果。理解它们之间的差别,并根据实际需求合理使用,可以大幅提升网页的用户体验。
通过上述的对比分析和代码示例,你应该对这两个属性有了更深入的了解。在实际的网页设计和开发中,根据需要选择合适的属性,可以有效地提升你的工作效果。
为什么叫做backdrop-filter而不是background-filter?
"backdrop-filter" 这个名称的选择反映了 CSS 工作组在设计这个属性时的考量和意图。以下是为什么它被称为 "backdrop-filter" 而不是 "background-filter" 的几个原因:
-
语义清晰度: "Backdrop" 这个词在英语中意味着“背景幕布”或“背景”,它传达了一个更广泛的概念,即这个滤镜不仅适用于元素的背景图像,还适用于元素背后的所有内容,包括可能存在的其他元素或背景本身。
-
功能描述: "backdrop-filter" 明确指出这个属性是用来过滤元素背后的区域,而不仅仅是元素的背景图像。这意味着即使元素后面没有设置背景图像,滤镜效果也会应用于元素下方的所有内容。
-
与现有属性区分: 如果使用 "background-filter",可能会与 "background" 属性混淆,后者是用来设置元素的背景图像、颜色或渐变的。而 "backdrop-filter" 清楚地表明它是一个独立的属性,用于实现不同的视觉效果。
-
强调视觉效果: "Backdrop" 强调了这个属性是用来创造一种视觉效果,即元素像是放置在一个经过滤镜处理的幕布前面。这种描述更贴近该属性的实际作用,即在元素背后添加一层视觉效果。
-
避免歧义: 使用 "filter" 而不是 "background" 可以避免用户对属性作用的误解。"background-filter" 可能会让人误以为只能过滤背景图像,而实际上 "backdrop-filter" 可以对元素背后的任何内容进行过滤。
-
兼容性和未来扩展: "backdrop-filter" 的命名也为将来可能的属性扩展留出了空间。例如,未来可能会有更多专门针对背景图像或特定类型内容的滤镜属性,而 "backdrop-filter" 则清晰地定义了其作用范围。
-
CSS 命名惯例: CSS 工作组在命名新属性时通常会考虑现有的命名惯例和属性的用途。"backdrop-filter" 遵循了 CSS 中将视觉效果与实际内容区分的惯例。
综上所述,"backdrop-filter" 这个名称更准确地描述了属性的功能和作用范围,同时也为未来的扩展和兼容性提供了更好的基础。这个名称的选用体现了 CSS 工作组在设计语言时对细节的关注和对未来发展的考虑。
转载自:https://juejin.cn/post/7364274025278144563