CSS filter中有什么用
通用样式,设置毛玻璃元素的大小、圆角等基本样式:
.glass{
height:300px;
width:300px;
border:1pxgroove#EFEFEF;
border-radius:12px;
background:rgba(242,242,242,0.5);
box-shadow:00.3px0.7pxrgba(0,0,0,0.126),
00.9px1.7pxrgba(0,0,0,0.179),01.8px3.5pxrgba(0,0,0,0.224),
03.7px7.3pxrgba(0,0,0,0.277),010px20pxrgba(0,0,0,0.4);
}filter: blur 方法,给元素添加了一个 ::before 伪类设置 blur 方法并将其置于底层实现毛玻璃效果。
.glass-by-filter{
z-index:1;
box-sizing:border-box;
position:relative;
}
.glass-by-filter::before{
content:"";
position:absolute;
top:0;right:0;bottom:0;left:0;
z-index:-1;
background:inherit;
filter:blur(10px);
}backdrop-filter: blur 直接在元素上添加 blur 方法实现毛玻璃效果。
.glass-by-backdrop-filter{
backdrop-filter:blur(10px);
}实现效果如下图所示(左:filter、右:backdrop-filter):
阅读扩展:毛玻璃边框效果:https://css-tricks.com/blurred-borders-in-css
艺术照!甚至可以实现简易版 insatagram
复古、版画、油画、漫画、液化、老照片、性冷淡、莫兰迪、赛博朋克、旺达幻视风格通通都可以实现!
通过结合使用 filter 的所有方法,可以搭配出任意自己想要的效果。以下是一个简单的 filter 方法调节器,可以调整每个方法的值,同时实时展示图片的滤镜效果。如下图所示。
页面主要代码如下,控制区 #imageEditor 是一个 form 表单,表单每一行分别控制一种filter方法的值,展示区 #imageContainer 内部包含一个 img 元素,产生的 filter 滤镜作用在该元素上。
Grayscale
Blur
Exposure
Contrast
HueRotate
Opacity
Invert
Saturate
Sepia ![]()
functioneditImage(){
vargs=$("#gs").val();//grayscale
varblur=$("#blur").val();//blur
varbr=$("#br").val();//brightness
varct=$("#ct").val();//contrast
varhuer=$("#huer").val();//hue-rotate
varopacity=$("#opacity").val();//opacity
varinvert=$("#invert").val();//invert
varsaturate=$("#saturate").val();//saturate
varsepia=$("#sepia").val();//sepia
$("#imageContainerimg").css(
"filter",'grayscale('+gs+
'%)blur('+blur+
'px)brightness('+br+
'%)contrast('+ct+
'%)hue-rotate('+huer+
'deg)opacity('+opacity+
'%)invert('+invert+
'%)saturate('+saturate+
'%)sepia('+sepia+'%)'
);
$("#imageContainerimg").css(
"-webkit-filter",'grayscale('+gs+
'%)blur('+blur+
'px)brightness('+br+
'%)contrast('+ct+
'%)hue-rotate('+huer+
'deg)opacity('+opacity+
'%)invert('+invert+
'%)saturate('+saturate+
'%)sepia('+sepia+'%)'
);
}
//当input值发生变化时即时应用滤镜
$("input[type=range]").change(editImage).mousemove(editImage);现在只是实现了滤镜的实时预览,后续待实现功能包括支持复杂的 svg 滤镜模版、导出下载等,完成这些步骤,以后照片添加滤镜再也不用下载其他 APP了。实例完整版代码:https://codepen.io/dragonir/pen/abJmqxM
节省空间,提高网页加载速度
实践证明,同一图片减小亮度和对比度及色相饱和度之后的体积与原图相比,可以减小很大一部分体积空间 2M 左右的图片经过弱化后保存,就可以压缩到 1M 左右。在网页中我们可以使用经过 弱化 的图片,然后通过 CSS filter 将其还原。这样就可以达到压缩资源体积,提升网页加载速度、提高用户体验的目的。
具体操作可阅读以下教程:
对比度交换技术:使用
CSS filter提高图像性能https://css-tricks.com/contrast-swap-technique-improved-image-performance-css-filters
兼容性
从 caniuse 查询结果可以看出,css filter 属性在现代浏览器中的支持性已经很好了,除了 IE 浏览器之外,其他浏览器中大多可以正常使用,必要时可添加浏览器内核前缀。但是官网也有以下3个issue 提示,相信后续随着浏览器的升级,这些问题也会被逐步修复:
在 Safari 浏览器中,如果子元素具有动画效果,则不会被应用滤镜。
目前没有浏览器支持
drop-shadow滤镜的spread-radius方法。在
Edge浏览器中如果元素或子元素被设置了负值z-index,则无法应用滤镜。
总结
本篇文章只是简单列举了几种使用 CSS filter 常用的页面效果,其实 filter 的每一种内置方法都可以有无限可能的扩展应用,如 invert 反转色同样也可以应用到 hover 效果上、调整网页sepia 褐色值可以实现护眼效果等。只要发挥想象力和创造力,filter 都可以在实践中得到很好的应用。
以下一些例子就是很好的应用,大家有兴趣可以拓展阅读学习:
毛玻璃效果 https://codepen.io/KazuyoshiGoto/pen/nhstF
破碎玻璃效果 https://codepen.io/bajjy/pen/vwrKk
使用filter实现的hover效果 https://codepen.io/nxworld/details/ZYNOBZ
反色按钮 https://codepen.io/monkey-company/pen/zZZvRp
老照片 https://codepen.io/dudleystorey/pen/pKoqa
高级版filter编辑器:https://codepen.io/stoumann/pen/MWeNmyb
最后附上一张用上面滤镜编辑器调出来的 复古莫兰迪色性冷淡油画效果 滤镜图片。(哇塞,这也太哇塞了吧,CSS 绝绝子 yyds)
感谢各位的阅读!关于“CSS filter中有什么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


