你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

教你用一行代码实现网页变灰的效果?

[复制链接]
gaosmile 发布时间:2020-4-5 10:23
昨天是 2020 年 4 月 4 日,星期六,清明节。
我们的国家经历了非常惨痛的时刻,很多英雄在救助他人的路上倒下,更有很多烈士英雄保卫人民的安危遇难,昨天全国下降半旗,北京时间 10 点全国默哀三分钟,来致敬英雄们。同时昨天一切公共娱乐活动也都会停止,包括直播、综艺、影视、游戏等等。
我也在这里也向全国抗击新冠肺炎疫情斗争牺牲的烈士和逝世的同胞表达深切的哀悼,向所有在抗战在疫情前线的工作和医护人员致敬。我们每一个人的平安面前,都是英雄的人墙。
网站变灰
昨天大家可以看到很多很多网站包括主页和内容也都已经变成了灰色,比如百度、B 站、爱奇艺、CSDN 等等。
微信图片_20200405101839.png CSDN 微信图片_20200405101843.png 爱奇艺 微信图片_20200405101847.jpg 百度
大家可以看到全站的内容都变成灰色了,包括按钮、图片等等。这时候我们可能会好奇这是怎么做到的呢?
有人会以为所有的内容都统一换了一个 CSS 样式,图片也全换成灰色的了,按钮等样式也统一换成了灰色样式。但你想想这个成本也太高了,而且万一某个控件忘记加灰色样式了岂不是太突兀了。
其实,解决方案很简单,只需要几行代码就能搞定了。
实现
我们选择一个网站,比如 B 站吧,打开浏览器开发者工具。
审查一下网页的源代码,我们可以发现在 html 的这个地方多了一个疑似的 class,叫做 gray,gray 中文即灰色。
微信图片_20200405101850.png 变灰效果
可以看到,我们只要将下面这行 CSS 样式,加入到页面指定节点,即可实现网页变灰的效果:
  1. / G/ z5 g- h5 X. V, f6 _
  2. -webkit-filter: grayscale(.95);
复制代码
  ~' r- l8 b& A3 l
其完整内容为:
  1. ) D$ t* h! x8 Q% x% u$ E& w
  2. html.gray {
    5 |) K7 p$ B- ~- q+ f
  3.     -webkit-filter: grayscale(.95);
    , ?9 Q' S% }8 P. B
  4. }
复制代码

& Y4 ?/ G1 Z' t, z; x' Q8 d+ E
我们将其取消,就能发现网站的颜色就能重新还原回来了。
微信图片_20200405101855.png 还原效果
果然是这个样式在起作用,而且是全局的效果,因为它是作用在了 html 这个节点之上的。
另外看看 CSDN,它也是用的这个 CSS 样式,其内容为:
  1. $ ~' Y$ t# z5 R/ T3 \
  2. html {5 i  v' d8 Q  ^0 d
  3.     -webkit-filter: grayscale(100%);; d  P# f; v/ }& D  [
  4.     -moz-filter: grayscale(100%);* l0 n; K5 C# ^3 L
  5.     -ms-filter: grayscale(100%);" S2 N  X) y+ O9 i. Z- j
  6.     -o-filter: grayscale(100%);2 G# q  ~! x, ?6 p: D" I) q
  7.     filter: grayscale(100%);' I" S2 y8 b9 H$ a1 ^+ H
  8.     filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
    ; Q6 S7 V' S4 M: n$ ]
  9. }
复制代码
  h4 @" m) t' K7 l1 V% j! ]
这个实现看起来兼容性会更好一些。
因此我们可以确定,通过一个全局的 CSS 样式就能将整个网站变成灰色效果。
分析
那么这里我们就来详细了解一下这究竟是一个什么样的 CSS 样式。
这个样式名叫做 filter,搜下 MDN 的官方介绍,其链接为:http://developer.mozilla.org/zh-CN/docs/Web/CSS/filter。
官方介绍内容如下:
filter CSS 属性将模糊或颜色偏移等图形效果应用于元素。滤镜通常用于调整图像,背景和边框的渲染。
CSS 标准里包含了一些已实现预定义效果的函数。你也可以参考一个 SVG 滤镜,通过一个 URL 链接到 SVG 滤镜元素 (SVG filter element[1])。
其实就是一个滤镜的意思。
官方有一个 Demo,可以看下效果,如图所示。
微信图片_20200405102139.gif Demo
比如这里通过 filter 样式改变了图片、颜色、模糊、对比度等等信息。
其所有用法示例如下:

  1. 2 |* F3 D' O8 Y
  2. /* URL to SVG filter */
    5 C& B0 |: P, ^/ ]: E- v
  3. filter: url("filters.svg#filter-id");: E" F) t; W* \- f+ Q3 ?0 Z
  4. 8 j* ^) W5 ^! c: R& |0 B0 c3 F
  5. /* <filter-function> values */
    ( Z. j* j7 p  B1 K5 m6 R
  6. filter: blur(5px);% m! J" I1 Y) g6 S6 |8 u
  7. filter: brightness(0.4);
    7 K8 h, ~( A# M& {$ I: O+ [5 d7 e
  8. filter: contrast(200%);
    0 G, O" M; h  F, d& g
  9. filter: drop-shadow(16px 16px 20px blue);* x( g, ~6 f: P, ~
  10. filter: grayscale(50%);
      Y1 d* a4 n# g% ?$ i% ?$ g
  11. filter: hue-rotate(90deg);
    : K+ A/ s" X) i6 o  K5 p
  12. filter: invert(75%);- x# U5 K9 W5 _# ]' x6 k
  13. filter: opacity(25%);
    / [+ }7 ]3 z( o9 a! T1 w
  14. filter: saturate(30%);' o0 M7 W1 Q# ]5 Y. D
  15. filter: sepia(60%);
    $ c' _: ^7 O+ V, u( U2 P

  16. 0 O/ o  S5 W* F# I, s- I
  17. /* Multiple filters */" F: o; ^/ M7 a
  18. filter: contrast(175%) brightness(3%);
    3 ^* e4 p0 Q; m( ^$ l

  19. 7 g( H5 f, q! Z/ \+ R6 a; o+ ~5 z) Q
  20. /* Global values */; e) q, f% H* E* O2 l
  21. filter: inherit;* o5 r+ f& D) k  J' [# O( S
  22. filter: initial;7 p& S" w* C( K& Y# A9 Q8 q# J
  23. filter: unset;
    3 I" ?5 B$ A9 Y1 j
复制代码
各个用法介绍大家可以参考官方的文档说明:http://developer.mozilla.org/zh-CN/docs/Web/CSS/filter
比如这里如果我们可以使用 blur 设置高斯模糊,用法如下:

  1. ) s6 Y+ R2 i0 z
  2. filter: blur(radius)
复制代码

% u7 d- k% `# y; \
给图像设置高斯模糊。radius 一值设定高斯函数的标准差,或者是屏幕上以多少像素融在一起,所以值越大越模糊;如果没有设定值,则默认是 0;这个参数可设置绝对像素值,但不接受百分比值。
可以达成这样的效果:
微信图片_20200405101858.png 效果
再说回刚才的灰色图像,这里其实就是设置了 grayscale,其用法如下:

  1. 8 m5 n3 L( w- M0 o
  2. filter: grayscale(percent)
    1 j1 Y) T+ K" H4 z; S
复制代码
将图像转换为灰度图像。值定义转换的比例。percent 值为 100% 则完全转为灰度图像,值为 0% 图像无变化。值在 0% 到 100% 之间,则是效果的线性乘子。若未设置,值默认是 0。另外除了传递百分比,还可以传递浮点数,效果是一样的。
如:

  1. . Z' ^/ `# I" _2 S
  2. filter: grayscale(1)
    ! S" d2 ]8 ^8 s2 K
  3. filter: grayscale(100%)
复制代码

" c0 O( M2 T8 i3 _) E9 U7 \& L
都可以将节点转化为 100% 的灰度模式。
所以一切到这里就清楚了,如果我们想要把全站变成灰色,再考虑到各浏览器兼容写法,可以参考下 CSDN 的写法:
  1. <font color="#003000"><font style="background-color:rgb(255, 255, 255)"><font face="Tahoma">
    8 Q6 j% b- [  ]3 N4 N4 ^
  2. .gray {
    ' {* e. f, d2 E! s7 a
  3.     -webkit-filter: grayscale(100%);# @5 S5 R( o6 J4 G% l
  4.     -moz-filter: grayscale(100%);
    / |# w4 _1 Q$ ^& B
  5.     -ms-filter: grayscale(100%);7 q& k; l% N" C0 E: }9 e
  6.     -o-filter: grayscale(100%);- {7 I, s+ W. j
  7.     filter: grayscale(100%);- M' G  g0 y' i' K( a$ F0 m6 M  c
  8.     filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
    * ?5 k% |$ N; K, R) ?
  9. }</font></font></font>0 g, F$ H, H4 J- F3 ]' r
复制代码
这样想要变灰的节点只需要加上 gray 这个 class 就好了,比如加到 html 节点上就可以全站变灰了。
最后呢,看一下浏览器对 filter 这个样式的兼容性怎样,如图所示:
微信图片_20200405101901.png 兼容性
这里我们看到,这里除了 IE,其他的 PC、手机端的浏览器都支持了,Firefox 的 PC、安卓端还单独对 SVG 图像加了支持,可以放心使用。
总结
本篇文章简单介绍了一下昨天观察到的网站变灰的实现,也学习了 filter 的更详细的用法,希望有帮助。
References
[1] SVG filter element: http://developer.mozilla.org/en-US/docs/Web/SVG/Element/filter

) H6 ^! ^8 X) O$ f
最后,跟大家分享昨天看到的,对我触动颇深的一段话:: r* n/ {3 p* Q+ \
7 s/ B- x4 v; J. q3 s0 T5 d
“如果有后人来撰写今天的历史,那他们将发现没有任何文字词藻能够写尽这场灾难的残酷,也没有任何语言修辞能描述人类为生存所付出的艰苦卓绝的努力。7 q: r4 w1 A! X5 X! h
我们将怀揣火种走过黑暗长夜,跨过战友的遗骸,踏过荆棘和深渊,最终在累累尸骨上重新点燃种族延续的火炬。
; J# v  S" G3 g我知道你们并不需要历史来记载功勋,也无谓那些空虚华美的称颂。$ }$ x- ?+ B$ O) n3 N% G
只要山川河流、千万英灵,见证过我们前仆后继的跋涉和永不放弃的努力。” —— 敬平凡的人类
微信图片_20200405101905.png
+ w# G; L9 F4 T% h) E6 J- C
赞 收藏 评论1 发布时间:2020-4-5 10:23

举报

1个回答
liuchangyin 回答时间:2020-4-5 17:08:23
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版