一起看看CSS filter中的那些神奇用途

本篇文章带大家了解一下css filter 有哪些神奇用途。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

一起看看CSS filter中的那些神奇用途

背景

基本概念

CSS filter 属性将模糊或颜色偏移等图形效果应用于元素形成滤镜,滤镜通常用于调整图像,背景和边框的渲染。它的值可以为 filter 函数 或使用 url 添加的svg滤镜。

filter:  []* | nonefilter: url(file.svg#filter-element-id)

  可以用于 filter 和 backdrop-filter 属性。它的数据类型由下列过滤器函数之一指定。每个函数需要一个参数,如果参数无效,则滤镜不会生效。以下是对滤镜函数含义的解释:

blur():模糊图像brightness() :让图像更明亮或更暗淡contrast():增加或减少图像的对比度drop-shadow():在图像后方应用投影grayscale():将图像转为灰度图hue-rotate():改变图像的整体色调invert():反转图像颜色opacity():改变图像透明度saturate():超饱和或去饱和输入的图像sepia():将图像转为棕褐色

用法示例

/* 使用SVG filter */filter: url("filters.svg#filter-id");/* 使用filter函数 */filter: blur(5px);filter: brightness(0.4);filter: contrast(200%);filter: drop-shadow(16px 16px 20px blue);filter: grayscale(50%);filter: hue-rotate(90deg);filter: invert(75%);filter: opacity(25%);filter: saturate(30%);filter: sepia(60%);/* 多个filter */filter: contrast(175%) brightness(3%);/* 不使用filter */filter: none;/* 全局变量 */filter: inherit;filter: initial;filter: unset;

1.png

立即学习“前端免费学习笔记(深入)”;

应用案例

更加智能的阴影效果

在给元素添加阴影的时候,我们一般采用 box-shadow 属性,通过 box-shadow(x偏移, y偏移, 模糊大小, 阴影大小, 色值, inset) 的语法形式很容易为元素添加阴影效果,但 box-shadow 也有一个缺点,就是在给透明图片添加阴影效果时,无法穿透元素,只能添加到透明图片元素的盒模型上。这个时候,filter 属性的 drop-shadow 方法就能很好的解决这个问题,用它添加的阴影可以穿透元素,而不是添加到元素的盒模型边框上。

drop-shadow 添加的阴影除了可以穿透透明元素外,阴影效果和 box-shadow 是相同的,如果浏览器支持硬件加速的话,使用 filter 添加的阴影效果会更加逼真。

drop-shadow 语法如下(它除了不支持设置 inset,其他和 box-shadow 是完全相同的):

filter: drop-shadow(x偏移, y偏移, 模糊大小, 色值);

如:

filter: drop-shadow(1px 1px 15px rgba(0, 0, 0, .5));

下图是分别使用 box-shadowfilter: drop-shadow 为透明元素添加阴影的对比:

2.png

@@##@@@@##@@
.box-shadow {  box-shadow: 1px 1px 15px rgba(0, 0, 0, .5);}.drop-shadow {  filter: drop-shadow(1px 1px 15px rgba(0, 0, 0, .5));}

元素、网页置灰

发生重大灾害事故或其他哀悼日时,国企政府网站往往有网页全部置灰的需求。或者很多网页中有鼠标 hover 悬浮到灰色元素上时变成彩色的样式效果。此时就可以使用 filter 属性的 grayscale 方法实现,它可以调整元素灰度,通过给页面元素设置 filter: grayscale(100%) 就可将页面元素置灰。以下示例中,body 标签下有 h1img 标签,未添加 filter 样式前如下所示。

  

FUTURAMA

@@##@@

一起看看CSS filter中的那些神奇用途

现在我们给 body 元素添加一个 .gray 类, 就可实现整个网页置灰效果。

.gray {  filter: grayscale(100%);}

一起看看CSS filter中的那些神奇用途

为了兼容 IE8 等其他低版本浏览器,我们可以加上浏览器前缀和 svg 滤镜。

.gray {  -webkit-filter: grayscale(1);  -webkit-filter: grayscale(100%);  -moz-filter: grayscale(100%);  -ms-filter: grayscale(100%);  -o-filter: grayscale(100%);  filter: url("data:image/svg+xml;utf8,#grayscale");  filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);  filter: grayscale(100%);}

在做紧急置灰网页需求时,上线一段时间往往需要撤掉这个功能,我们还可以在首次上线时添加以下类似的方法,来控制置灰效果的自动上下线时间,这样到达预定时间就可自动撤去,不用走两次施工流程。

(function setGray() {  var endTime = Date.parse("Apr 06 2077 00:00:01");  var timestamp = Date.parse(new Date());  if (timestamp <= endTime) {    document.querySelector('html').classList.add('gray');  }})();

元素强调、高亮

brightness 方法实现元素高亮的效果,可以应用到菜单栏、图片列表 hover 效果,来强调鼠标当前悬浮或选中的内容。下面是对一组按钮菜单栏添加 brightnesssaturate 两个方法,通过改变亮度和饱和度来高亮元素。

一起看看CSS filter中的那些神奇用途

3.png

.container {  margin: 40px;}.button {  padding: 0.5em 0.5em;  background: #E0E0E0;  border-radius: 3px;}.button.dark {  background: #333;}.button:hover:not(.disabled) {  cursor: pointer;  border-radius: 3px;  filter: brightness(110%) saturate(140%);}.button.disabled {  filter: grayscale(100%);}

毛玻璃效果

毛玻璃(Frosted glass)效果,顾名思义就是类似半透明毛玻璃的效果,在 iOS 系统、Windows 10 等系统 UI 中有广泛应用,使用毛玻璃效果可以增强视觉体验。在 《CSS揭秘》 等著作中也有系统讲解,下面是我对分别使用 filter: blurbackdrop-filter: blur两种方法实现这种效果的总结。

有两个含有相同类名 glassp 元素,它们分别被添加两个类 glass-by-filterglass-by-backdrop-filter 来区分两种方法。

通用样式,设置毛玻璃元素的大小、圆角等基本样式:

.glass {  height: 300px;  width: 300px;  border: 1px groove #EFEFEF;  border-radius: 12px;  background: rgba(242, 242, 242, 0.5);  box-shadow: 0 0.3px 0.7px rgba(0, 0, 0, 0.126),    0 0.9px 1.7px rgba(0, 0, 0, 0.179), 0 1.8px 3.5px rgba(0, 0, 0, 0.224),    0 3.7px 7.3px rgba(0, 0, 0, 0.277), 0 10px 20px rgba(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):

4.png

阅读扩展:毛玻璃边框效果:https://css-tricks.com/blurred-borders-in-css

艺术照!甚至可以实现简易版 insatagram

复古、版画、油画、漫画、液化、老照片、性冷淡、莫兰迪、赛博朋克、旺达幻视风格通通都可以实现!

通过结合使用 filter 的所有方法,可以搭配出任意自己想要的效果。以下是一个简单的 filter 方法调节器,可以调整每个方法的值,同时实时展示图片的滤镜效果。如下图所示。

5.gif

页面主要代码如下,控制区 #imageEditor 是一个 form 表单,表单每一行分别控制一种filter方法的值,展示区 #imageContainer 内部包含一个 img 元素,产生的 filter 滤镜作用在该元素上。

  

@@##@@
function editImage() {  var gs = $("#gs").val();                // grayscale  var blur = $("#blur").val();            // blur  var br = $("#br").val();                // brightness  var ct = $("#ct").val();                // contrast  var huer = $("#huer").val();            // hue-rotate  var opacity = $("#opacity").val();      // opacity  var invert = $("#invert").val();        // invert  var saturate = $("#saturate").val();    // saturate  var sepia = $("#sepia").val();          // sepia  $("#imageContainer img").css(    "filter", 'grayscale(' + gs+    '%) blur(' + blur +    'px) brightness(' + br +    '%) contrast(' + ct +    '%) hue-rotate(' + huer +    'deg) opacity(' + opacity +    '%) invert(' + invert +    '%) saturate(' + saturate +    '%) sepia(' + sepia + '%)'  );  $("#imageContainer img").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 提高图像性能 

The Contrast Swap Technique: Improved Image Performance with CSS Filters

兼容性

caniuse 查询结果可以看出,css filter 属性在现代浏览器中的支持性已经很好了,除了 IE 浏览器之外,其他浏览器中大多可以正常使用,必要时可添加浏览器内核前缀。但是官网也有以下3个issue 提示,相信后续随着浏览器的升级,这些问题也会被逐步修复:

在 Safari 浏览器中,如果子元素具有动画效果,则不会被应用滤镜。目前没有浏览器支持 drop-shadow 滤镜的 spread-radius 方法。在 Edge 浏览器中如果元素或子元素被设置了 负值z-index,则无法应用滤镜。

1.png

总结

本篇文章只是简单列举了几种使用 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

6.png

原文地址:https://segmentfault.com/a/1190000040058430

作者:dragonir

更多编程相关知识,请访问:编程入门!!

8.png一起看看CSS filter中的那些神奇用途9.png10.png

以上就是一起看看CSS filter中的那些神奇用途的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1620399.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 07:08:12
下一篇 2025年12月24日 07:08:23

相关推荐

  • 纯CSS3实现3d立体文字效果(源码分析)

    本篇文章带大家了解一下3d文字效果的实现原理,没有考虑代码的复用性和可移植性,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 1.单单纯纯的效果一 为了简化操作,我们使用和上一篇文章《纯CSS3文字效果推荐》一样的文档结构,后面的效果大差小不差,也就不再列出。 前端开发whqet …

    2025年12月24日 好文分享
    000
  • css3如何设置背景图片

    css3设置背景图片的方法是添加属性【background-image: url(css.jpg)】。background-image属性用来设置一个元素的背景图像,url中填写图像的url地址。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 如果我们要添加一张…

    2025年12月24日
    000
  • 详解纯CSS实现多彩、智能阴影的方法

    本篇文章给大家详细介绍一下纯css实现多彩、智能阴影的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 有没有想过如何创建从前景元素中继承某些颜色的阴影效果?阅读本文并找出如何实现方法吧! 前几天我经过家得宝(Home Depot,美国家得宝公司,全球领先的家居建材用品零售商)…

    2025年12月24日 好文分享
    000
  • 使用css过渡有哪些触发方式

    触发方式有:1、通过伪类元素“:hover”触发,语法“元素{transition:属性 过渡时间}元素:hover{属性:属性值}”;2、通过“element.classList.add(“元素名称”)”语句触发css过渡效果。 本教程操作环境:windows7系统、CSS…

    2025年12月24日
    000
  • css3新增的伪类有哪些

    css3伪类:“:first-of-type”、“:last-of-type”、“:only-of-type”、“:only-child”、“:nth-child(2)”、“:enabled”、“:disabled”、“:checked”。 本教程操作环境:windows7系统、CSS3版、Dell…

    2025年12月24日
    000
  • 如何判断浏览器是否支持css3

    判断方法:1、使用“@supports”规则判断,语法格式“@supports(属性:值){标签名称{属性:值}}”2、使用“CSS.supports()”函数判断,语法格式“CSS.supports(“属性”,”值”)”。。 本教程操作环境:wind…

    2025年12月24日
    000
  • css3动画如何停止

    在css中,可以使用animation-play-state属性控制动画的暂停,语法“animation-play-state:paused”;该属性在不同浏览器的兼容性不同,需加上对应前缀(如“-ms-”,“ -webkit-”等)。 本教程操作环境:windows7系统、CSS3&&am…

    2025年12月24日 好文分享
    000
  • CSS3三角形如何实现不断放大

    本文给大家介绍css3三角形如何实现不断放大。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 CSS3三角形不断放大特效 图片预览 index.html代码 立即学习“前端免费学习笔记(深入)”; CSS3三角形不断放大特效 style.css代码 html {height: 10…

    2025年12月24日
    000
  • cs如何实现翻转效果

    css实现翻转效果的方法:1、将外层元素设置perspective;2、将第二包裹层翻转180度,同时设置过渡速度;3、设置“backface-visibility”;4、设置“z-index”属性;5、让“back”最开始就翻转180度。 本文操作环境:windows7系统、HTML5&&…

    2025年12月24日
    000
  • css3支持为网页添加多个背景图片吗

    css3支持为网页添加多个背景图片。在css中,可以通过直接在background-image属性中指定多个背景路径来为网页添加多个背景图片,语法格式“background-image: url(图片地址), url(图片地址)…;”。 本教程操作环境:windows7系统、CSS3&a…

    2025年12月24日
    000
  • css3中媒体查询的语法组成是什么

    媒体查询的语法组成是“@media not|only mediatype and (expressions) {CSS代码…;}”;媒体查询可由多种媒体组成,可以包含一个或多个表达式,表达式根据条件是否成立返回true或false。 本教程操作环境:windows7系统、CSS3&amp…

    2025年12月24日
    000
  • 用css3实现一个奥运五环

    css3实现奥运五环的方法:首先给5个div设置border-radius样式,制作五个圆环;然后使用position属性设置五个圆环的位置;最后使用z-index属性调整各环的层级关系即可。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 五环…

    2025年12月24日
    000
  • css3中新增加的颜色模式有哪些

    css新增了3种颜色模式:1、RGBA模式,是在RGB模式上新增了Alpha透明度,例“rgba(255,0,0,0.5)”;2、HSL模式,例“hsl(360,50%,50%)”;3、HSLA模式,是在HSL模式上新增了Alpha透明度。 本教程操作环境:windows7系统、CSS3版、Dell…

    2025年12月24日
    000
  • 详解CSS3+SVG滤镜实现不规则边框的方法

    本篇文章将介绍一种配合 svg 滤镜实现各种不规则图形添加边框的小技巧。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 需求背景,给不规则图形添加边框 在我们日常开发中,时长会遇到一些非矩形、非圆形的图案。类似下面这些: 使用纯 CSS,搭配一些技巧,是可以制作出上面的图形的,当然…

    2025年12月24日 好文分享
    000
  • css怎么实现翻转效果

    css实现翻转效果的方法:首先创建一个演示方块,并为其添加transition和transform属性;然后将transition属性添加到需要翻转的p上;最后添加perspective和transform-style属性即可。 本文操作环境:Windows7系统、HTML5&&CS…

    2025年12月24日 好文分享
    000
  • 29个CSS面试题总结(知识点解析)

    本篇文章给大家分享29个css 面试知识点。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 CSS是层叠样式表( Cascading Style Sheets )的缩写,是一种样式表语言,用于描述以 HTML 之类的标记语言编写的文档的布局。 它是用于设计Web页面的三剑客之一,另…

    2025年12月24日
    000
  • CSS3如何实现流星雨效果?(代码示例)

    本篇文章给大家通过代码示例介绍一下使用css3如何实现流星雨效果。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 【推荐教程:CSS视频教程】 说明:正文只讲述单个流星雨的实现方式,多个的效果只需要对单个的动画起始点、宽度稍加修改即可,具体示例见文末 github 地址。 难度系数…

    2025年12月24日
    000
  • css3中实现动画有哪两种方式

    css3中实现动画的两种方式分别是:1、分别利用transition属性和transform属性来设置过渡和形状;2、利用动画属性animation设置动画效果。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 1、利用transition设置过渡,添加trans…

    2025年12月24日
    000
  • 什么是CSS优先级

    所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序;浏览器是通过优先级来判断哪些属性值与元素最相关以决定并应用到该元素上的。优先级就是分配给指定的CSS声明的一个权重,它由匹配的选择器中的每一种选择器类型的数值决定。 本教程操作环境:windows7系统、CSS3版、Dell G3电脑。 …

    2025年12月24日 好文分享
    000
  • 使用CSS3实现简单时间轴效果(附代码)

    本篇文章分享一个使用css3实现的时间轴效果。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 【推荐教程:CSS视频教程 】 最近打开电脑就能看到一个实战路径图页面,效果是这样的: 立即学习“前端免费学习笔记(深入)”; 有点像时间轴的赶脚,而且每一块鼠标悬浮上去也有下拉效果展开介…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信