chrome 76开启深色模式适配

🎉🎉一个普大喜奔的好消息:最新的Chrome 76 Beta特性更新说明1,已经宣告正式支持“prefers-color-scheme(以下简称PCS)”CSS选项。这个选项有啥用呢?

如果浏览器支持这一选项,而您的网站恰好支持dark mode主题,您无需切换任何内容,因为浏览器会为您处理日间/夜间主题切换,你就不需要装Dark Reader、Night Eye、High Contrast、Turn Off the Lights等诸如此类的chrome扩展2

PCS是何方妖孽?

根据最早支持PCS的Firefox文档 介绍:

The prefers-color-scheme CSS media feature is used to detect if the user has requested the system use a light or dark color theme.

自macOS Mojave引入了暗黑模式主题后,越来越多第三方App进行了相关适配,可用户使用最多的浏览器却没能很好的支持,究其原因,主要有两个,一是浏览器没有给出让开发者适配的接口,二是网站设计并不统一,强行进入暗黑模式会破坏页面的设计和内容的可读性。

2019年伊始,macOS终于加入了新的媒体查询prefers-color-scheme,紧接着,各路浏览器终于在PC端新版本中,陆续增加了对PCS特性的支持,依次是firefox 67 -> safari 12.1 -> egdge 76 -> chrome 76,在这一方面,Chrome远远落伍于Firefox、Safari甚至Edge。但是老谚云:better late than never,不是么?

caniuse的prefers-color-scheme谱系图
caniuse的prefers-color-scheme谱系图
Name:   prefers-color-scheme
For:    @media
Value:  no-preference | light | dark

根据 css 草案介绍,PCS属性有三个值:dark, light, no-preference

  • no-preference: 此用户系统并没有设置相关的值
  • dark: 暗黑模式(暗黑背景+浅色文字)
  • light: 浅色模式(浅色背景+暗黑文字)

如果想了解更多信息,请关注这篇题为《Hello Darkness, My Old Friend 》的文章。

如何适配PCS特性

以本主题为例,编辑Hugo主题的layout-header代码(每个主题位置各异),将下列代码写入head标签内34,一般网站默认都是light模式的,所以只写入dark模式的样式即可:

<style>
@media (prefers-color-scheme: dark) {
  /* styles for users who prefer UIs with dark themes */
}
</style>

最简单的处理是利用css3的filter滤镜来变个小魔法,下列代码仅供演示:

@media (prefers-color-scheme: dark) {
  body { filter: invert(100%); }
  img { filter: invert(100%); }
  body { background-color: #000!important; }
}
<script>
if (matchMedia('(prefers-color-scheme: dark)').matches) {
  // conditional JavaScript code for such users
}
</script>

指定专用打印样式

暗黑模式下,打印网站可能会将黑色背景也打印出来,因此,有必要为打印机指定专用的打印样式,例如:

<link rel="stylesheet" media="print" href="my-print-style.css">

或者亦可使用现成框架库Gutenberg方案

<link rel="stylesheet" href="https://unpkg.com/gutenberg-css@0.4" media="print">
<link rel="stylesheet" href="https://unpkg.com/gutenberg-css@0.4/dist/themes/oldstyle.min.css" media="print">

后记:本站已成功启用暗黑主题适配,但一键临时深色功能模块与暗黑主题尚不能完美融合,亦即夜间进入暗黑模式后,toggletheme功能会失效,该问题等空了再想办法修复。


  1. Chrome Platform Status Feature44 milestone=76 ↩︎

  2. Using dark mode in CSS with MacOS Mojave ↩︎

  3. How can I use dark mode on my site ↩︎

  4. CSS prefers-color-scheme media feature in Safari Technology Preview ↩︎