如何让网站支持深色模式

前不久,在升级到 iOS 13 并启用了深色模式后,便在想有没有办法让网站可以像适配的 App 一样无缝在亮色模式与深色模式间互相切换。本文将介绍目前我在使用或者说我发现的两种解决方法。

这里就说一下我现在使用的两种方法,Darkmode.js 方式 与 CSS 方式

Darkmode.js 方式

这个是我最初的解决方案,可是这个最初偶然发现的项目,才促使了我后面的方法。
使用 Darkmode.js 的方式很简单,在网页的代码中加入,即可调用完成。

<script src="https://cdn.jsdelivr.net/npm/darkmode-js@1.4.0/lib/darkmode-js.min.js"></script>
<script>
  new Darkmode({ label: '🌓' }).showWidget();
</script>

但是可能会出现的情况是,部分网页没有变成深色,然后你又神奇的发现你的图片被反色了~ (#°Д°)

Github 项目地址: https://github.com/sandoche/Darkmode.js

CSS 方式

就在去年macOS Mojave发行之前,W3C添加了一份草案规范,prefers-color-scheme ,Safari(v12.1及以上版本),Chrome(v76及以上版本)和Firefox(v67及以上版本)都支持该草案。

有三个可能的值:

no-preference: 如果设备不支持某种模式或用户未做出选择,则为默认值
light: 用户选择了浅色模式
dark: 用户选择了深色模式
实际上,用法非常简单。此处以我的网站为例,我现在使用的主题作为浅色模式,然后使用

@media (prefers-color-scheme: dark)

深色模式覆盖相关部分的CSS ,比如:


@media (prefers-color-scheme: dark) {
    body {
        color: #fff;
        background: #000;
    }

    a {
        color: #369fe4;
    }

    footer p {
        color: #aaa;
    }

    header h1,
    header h2 {
        color: #fff;
    }

    header h1 a {
        color: #fff;
    }

    nav ul li {
        background: #000;
    }

    .divider {
        border-bottom: 1px solid #ddd;
    }
}

然后网站便会无缝的选择与用户设备相匹配的主题。

支援设备

这样做的好处是在iOS 13, macOS 10.14(Mojave), Android 10, Windows 1809 及以上的系统版本中即时更新的。只需更改系统主题,CSS就会更新,而无需刷新或者点击网页。

目前支援的浏览器版本:


如何让网站支持深色模式
http://localhost:8090//archives/%E5%A6%82%E4%BD%95%E8%AE%A9%E7%BD%91%E7%AB%99%E6%94%AF%E6%8C%81%E6%B7%B1%E8%89%B2%E6%A8%A1%E5%BC%8F
作者
阅站长
发布于
2021年12月11日
许可协议