如何让整个网站变成灰色?网页灰度效果的CSS实现方法与原理

在一些重大纪念日或哀悼活动期间,部分网站会将整个页面调整成灰色,以表达纪念和哀思。

实现网站整体变灰并不复杂,只需要使用CSS的filter滤镜属性,不需要把网站中的图片逐张处理,也不需要修改原有文字、背景和按钮的颜色。

现代浏览器使用下面这一行CSS即可:

html {
    filter: grayscale(100%);
}

一、网页整体变灰的实现原理

CSS中的filter属性可以对网页元素的最终显示效果进行图形处理,例如:

  • 灰度;
  • 模糊;
  • 亮度调整;
  • 对比度调整;
  • 色相旋转;
  • 颜色反转。

grayscale()表示灰度滤镜:

filter: grayscale(100%);

其中:

  • grayscale(0%)表示保持原来的颜色;
  • grayscale(50%)表示保留一部分颜色;
  • grayscale(100%)表示完全变成灰色;
  • grayscale(1)grayscale(100%)效果相同。

浏览器会先正常渲染网页,再对最终显示出来的内容进行灰度处理。

这种方法只是改变浏览器中的显示效果,不会修改服务器上的图片、视频、CSS颜色值和数据库内容。删除灰度CSS以后,网站就会恢复原来的颜色。

grayscale()已经是现代浏览器广泛支持的标准CSS功能。

二、方法一:在网站CSS文件中添加灰度代码

打开网站正在使用的CSS样式文件,在文件末尾添加:

html {
    filter: grayscale(100%);
}

保存文件并清理网站缓存后,整个网页就会变成灰色,包括:

  • 网站背景;
  • 文字和按钮;
  • Logo及图标;
  • 普通图片;
  • 视频画面;
  • Canvas内容;
  • 页面中的其他可视元素。

这是最简单、最推荐的实现方法。

如果网站仍然显示彩色,可能是CSS缓存、CDN缓存或者浏览器缓存没有更新,可以清理缓存后重新访问。

三、方法二:在head标签中添加CSS

如果不方便修改网站的CSS文件,也可以将以下代码添加到网页的<head></head>标签之间:

<style>
html {
    filter: grayscale(100%);
}
</style>

完整结构示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>网站标题</title>

    <style>
    html {
        filter: grayscale(100%);
    }
    </style>
</head>
<body>
    网站内容
</body>
</html>

这种方法适合临时调整网站样式,但如果网站有很多独立页面,最好把代码添加到公共模板或全局CSS文件中,避免逐个页面修改。

四、方法三:通过CSS类控制灰度效果

如果网站只需要在特定日期临时变灰,建议使用CSS类控制。

先在CSS文件中添加:

html.site-grayscale {
    filter: grayscale(100%);
}

需要网站变灰时,将html标签修改为:

<html class="site-grayscale">

需要恢复彩色时,删除site-grayscale类:

<html>

这种方法的好处是CSS代码可以长期保留,以后只需要添加或删除类名,不必反复修改样式文件。

如果html标签原来已经存在其他类名,可以直接追加:

<html class="原来的类名 site-grayscale">

不要删除原有类名,否则可能影响网站的其他样式和功能。

五、WordPress网站怎么变成灰色?

wordpress网站同样可以使用:

html {
    filter: grayscale(100%);
}

可以将代码添加到以下位置之一:

  • 当前子主题的style.css文件;
  • 主题提供的“自定义CSS”功能;
  • WordPress外观设置中的附加CSS区域;
  • 网站全局页头中的自定义样式位置。

如果直接修改主题文件,建议使用子主题,避免主题更新以后自定义代码被覆盖。

添加代码后,如果前台没有变化,需要清理:

  • WordPress页面缓存;
  • 服务器缓存;
  • CDN缓存;
  • 浏览器缓存。

六、只让网页部分区域变成灰色

如果不想让整个网站变灰,只需要给指定区域添加灰度滤镜。

HTML代码:

<div class="grayscale-section">
    这里的内容会变成灰色
</div>

CSS代码:

.grayscale-section {
    filter: grayscale(100%);
}

只有.grayscale-section及其内部内容会变成灰色,页面中的其他区域仍然保留原来的颜色。

图片单独变灰也可以使用相同方法:

.grayscale-image {
    filter: grayscale(100%);
}
<img class="grayscale-image" src="image.jpg" alt="图片说明">

七、能不能让网站变灰,但保留某个元素的颜色?

如果将滤镜添加在html元素上,整个网页会作为一个整体进行灰度处理。

这时,即使给内部元素添加:

.keep-color {
    filter: none;
}

也无法恢复原来的彩色。因为父级html已经对包括该元素在内的最终画面进行了灰度处理。

如果确实需要保留某些区域的颜色,就不能直接给html添加滤镜,而应该只给需要变灰的页面区域添加灰度样式,并让需要保留颜色的元素位于灰度区域之外。

例如:

<div class="grayscale-section">
    网站主要内容
</div>

<div class="keep-color">
    这里保留彩色
</div>
.grayscale-section {
    filter: grayscale(100%);
}

八、旧版网页灰度代码为什么不建议使用?

以前为了兼容旧版IE、Firefox、Opera等浏览器,经常会看到以下代码:

-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ms-filter: grayscale(100%);
-o-filter: grayscale(100%);
filter: gray;
filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);

这些写法大多是旧浏览器时代的兼容方案。

现在主流浏览器已经支持标准的CSS滤镜,只需要:

filter: grayscale(100%);

继续保留大量旧前缀不仅会让代码显得混乱,还会增加后续维护成本。

如果网站确实需要兼容非常老的Safari浏览器,可以额外保留:

html {
    -webkit-filter: grayscale(100%);
    filter: grayscale(100%);
}

对于正常使用现代Chrome、Edge、Firefox和Safari的用户,一般不需要添加这些旧兼容代码。

九、为什么不建议使用body *?

下面这种写法会给body中的几乎所有元素分别添加滤镜:

body * {
    filter: grayscale(100%);
}

它虽然也可能让页面看起来变灰,但没有必要。

网页中可能包含大量嵌套元素,这种写法会让浏览器对不同元素分别处理滤镜,可能增加渲染开销,也可能影响某些动画、定位、阴影和层叠效果。

让整个网站变灰时,直接给根元素添加一次滤镜即可:

html {
    filter: grayscale(100%);
}

十、使用灰度效果需要注意什么?

1. 检查文字和背景的对比度

彩色页面变成灰色后,部分文字、按钮和背景的明暗差异可能会变小,导致内容难以辨认。

启用灰度效果后,应重点检查:

  • 正文是否清晰;
  • 链接能否与普通文字区分;
  • 按钮边界是否明显;
  • 表单错误提示是否容易识别;
  • 禁用和启用状态是否能够区分;
  • 图表中的不同数据是否还能看懂。

W3C无障碍规范建议,不要只依赖颜色传递信息,还应配合文字、图标、下划线、形状或其他提示。

2. 检查图表和状态提示

如果网站使用红色表示错误、绿色表示成功,网页变灰后,两种状态可能不容易区分。

可以同时增加文字说明:

操作成功
操作失败

不要只依靠红色和绿色让用户判断状态。

3. 检查视频和动画性能

CSS滤镜需要浏览器对网页画面进行额外处理。普通网站通常不会有明显影响,但如果页面中包含大量动画、高清视频或复杂视觉效果,建议在电脑和手机上分别测试。

4. 灰度效果不会影响真实文件

网页中的图片只是显示为灰色,服务器上的原始图片仍然是彩色的。

用户直接下载图片文件或者关闭CSS以后,仍然可以看到原来的颜色。

十一、如何恢复网站原来的颜色?

恢复网站颜色有三种方法:

  1. 删除filter: grayscale(100%);
  2. 删除html标签中的site-grayscale类;
  3. 将灰度值改成0:
html {
    filter: grayscale(0%);
}

最推荐的临时启用方式是:

html.site-grayscale {
    filter: grayscale(100%);
}

需要网站变灰时添加类名,活动结束后删除类名,既方便管理,也不会影响网站原来的CSS代码。

总的来说,现代网站实现全站灰色效果并不需要复杂的兼容代码。使用一行标准CSS即可:

html {
    filter: grayscale(100%);
}

它不会修改网站文件中的颜色数据,只会在浏览器渲染时将整个页面转换成灰度效果。

正文完
 0
简子
版权声明:本站原创文章,由 简子 于2022-12-01发表,共计3710字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。