如何用一行代码实现网页变灰效果

今天是年4月4日,星期六,清明节。我们的国家经历了非常惨痛的时刻,很多英雄在救助他人的路上倒下,更有很多烈士英雄保卫人民的安危遇难,今天全国下降半旗,北京时间10点全国默哀三分钟,来致敬英雄们。同时今天一切公共娱乐活动也都会停止,包括直播、综艺、影视、游戏等等。我也在这里也向全国抗击新冠肺炎疫情斗争牺牲的烈士和逝世的同胞表达深切的哀悼,向所有在抗战在疫情前线的工作和医护人员致敬。我们每一个人的平安面前,都是英雄的人墙。网站变灰今天大家可以看到很多很多网站包括主页和内容也都已经变成了灰色,比如百度、B站、爱奇艺、CSDN等等。大家可以看到全站的内容都变成灰色了,包括按钮、图片等等。这时候我们可能会好奇这是怎么做到的呢?有人会以为所有的内容都统一换了一个CSS样式,图片也全换成灰色的了,按钮等样式也统一换成了灰色样式。但你想想这个成本也太高了,而且万一某个控件忘记加灰色样式了岂不是太突兀了。其实,解决方案很简单,只需要几行代码就能搞定了。实现我们选择一个网站,打开浏览器开发者工具。审查一下网页的源代码,我们可以发现在html的这个地方多了一个疑似的class,叫做gray,gray中文即灰色。可以看到,我们只要将下面这行CSS样式,加入到页面指定节点,即可实现网页变灰的效果:-webkit-filter:grayscale(.95);其完整内容为:html.gray{-webkit-filter:grayscale(.95);}我们将其取消,就能发现网站的颜色就能重新还原回来了。果然是这个样式在起作用,而且是全局的效果,因为它是作用在了html这个节点之上的。另外看看CSDN,大致也是用的这个CSS样式,内容大致为:html{-webkit-filter:grayscale(%);-moz-filter:grayscale(%);-ms-filter:grayscale(%);-o-filter:grayscale(%);filter:grayscale(%);filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);}这个实现看起来兼容性会更好一些。因此我们可以确定,通过一个全局的CSS样式就能将整个网站变成灰色效果。分析那么这里我们就来详细了解一下这究竟是一个什么样的CSS样式。这个样式名叫做filter,具体可以看下官方文档介绍。官方介绍内容如下:filterCSS属性将模糊或颜色偏移等图形效果应用于元素。滤镜通常用于调整图像,背景和边框的渲染。CSS标准里包含了一些已实现预定义效果的函数。你也可以参考一个SVG滤镜,通过一个URL链接到SVG滤镜元素(SVGfilterelement[1])。其实就是一个滤镜的意思。官方有一个Demo,可以看下效果,如图所示。比如这里通过filter样式改变了图片、颜色、模糊、对比度等等信息。其所有用法示例如下:/*URLtoSVGfilter*/filter:url(filters.svg#filter-id);/*filter-functionvalues*/filter:blur(5px);filter:brightness(0.4);filter:contrast(%);filter:drop-shadow(16px16px20pxblue);filter:grayscale(50%);filter:hue-rotate(90deg);filter:invert(75%);filter:opacity(25%);filter:saturate(30%);filter:sepia(60%);/*Multiplefilters*/filter:contrast(%)brightness(3%);/*Globalvalues*/filter:inherit;filter:initial;filter:unset;各个用法介绍大家可以参考官方的文档说明。比如这里如果我们可以使用blur设置高斯模糊,用法如下:filter:blur(radius)给图像设置高斯模糊。radius一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起,所以值越大越模糊;如果没有设定值,则默认是0;这个参数可设置绝对像素值,但不接受百分比值。可以达成这样的效果:再说回刚才的灰色图像,这里其实就是设置了grayscale,其用法如下:filter:grayscale(percent)将图像转换为灰度图像。值定义转换的比例。percent值为%则完全转为灰度图像,值为0%图像无变化。值在0%到%之间,则是效果的线性乘子。若未设置,值默认是0。另外除了传递百分比,还可以传递浮点数,效果是一样的。如:filter:grayscale(1)filter:grayscale(%)都可以将节点转化为%的灰度模式。所以一切到这里就清楚了,如果我们想要把全站变成灰色,再考虑到各浏览器兼容写法,可以参考下CSDN的写法:.gray{-webkit-filter:grayscale(%);-moz-filter:grayscale(%);-ms-filter:grayscale(%);-o-filter:grayscale(%);filter:grayscale(%);filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);}这样想要变灰的节点只需要加上gray这个class就好了,比如加到html节点上就可以全站变灰了。最后呢,看一下浏览器对filter这个样式的兼容性怎样,如图所示:这里我们看到,这里除了IE,其他的PC、手机端的浏览器都支持了,Firefox的PC、安卓端还单独对SVG图像加了支持,可以放心使用。总结本篇文章简单介绍了一下今天观察到的网站变灰的实现,也学习了filter的更详细的用法,希望有帮助。最后,跟大家分享今天看到的,对我触动颇深的一段话:“如果有后人来撰写今天的历史,那他们将发现没有任何文字词藻能够写尽这场灾难的残酷,也没有任何语言修辞能描述人类为生存所付出的艰苦卓绝的努力。我们将怀揣火种走过黑暗长夜,跨过战友的遗骸,踏过荆棘和深渊,最终在累累尸骨上重新点燃种族延续的火炬。我知道你们并不需要历史来记载功勋,也无谓那些空虚华美的称颂。只要山川河流、千万英灵,见证过我们前仆后继的跋涉和永不放弃的努力。”——敬平凡的人类


转载请注明:http://www.aierlanlan.com/rzgz/5846.html