经过几十年的沉默, dark mode(暗黑模式) 又回到了我们面前,越来越多的 APP 有了暗黑主题,越来月多的操作系统原生添加了 “全局暗黑模式”, 那么一个网站如何跟随系统的脚步, 该用暗黑模式的时候就用暗黑模式显示,该用明亮模式就用明亮主题渲染呢?

  我在搜索引擎中检索发现了一篇关于 dark mode 的文章, 其标题是 《Hello darkness, my old friend》, 作者是 Thomas Steiner。

  文中介绍了有关于为什么要有 dark mode, 怎样在网页中实现 dark mode 等内容。下面我把我学到的分享出来。

来玩一下

  可以修改你的系统明亮/暗黑模式偏好,然后观察这里的文本。

  黑夜给了我黑色眼睛,我却用它去寻找光明。

@media (prefers-color-scheme: dark) { #preferenceColor { color: rgba(153, 153, 153, 1); background-color: rgba(34, 34, 34, 1) } }@media (prefers-color-scheme: no-preference), (prefers-color-scheme: light) { #preferenceColor { color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 1) } }

查询

  对于查询 Web 浏览器是否支持 dark mode,作者提供了下面的媒体查询代码:

if (window.matchMedia('(prefers-color-scheme)').media !== 'not all') {
console.log('Dark mode is supported');
}

  位一个网站适配 dark mode 模式同样依靠 CSS 媒体查询。

  作者的思路是把关于网页 dark modelight mode 差异的代码放到 dark.csslight.css 里, 把其他样式放入 style.css 中去,接着在使用外部链接的方式把它们链接进来,对 dark.csslight.css 的链接标签添加 media 媒体查询属性。

  我也写了一个小demo, 代码如下。

  index.html:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>明亮/暗黑模式 Demo</title>
<link rel="stylesheet" href="/dark.css" media="(prefers-color-scheme: dark)">
<link rel="stylesheet" href="/light.css" media="(prefers-color-scheme: no-preference), (prefers-color-scheme: light)">
<link rel="stylesheet" href="/style.css">
<body>
<div class="main" role="main">
<p>黑夜给了我黑色眼睛,我却用它去寻找光明。</p>
</div>
</body>
</html>

  这里的重点是怎么引入 CSS 样式文件的。

  dark.css:

/* dark mode style */
body {
color: #999;
background-color: #222;
}

  light.css:

/* dark mode style */
body {
color: #333;
background-color: #DDD;
}

  style.css:

/* style */
.main {
margin:50px 80px 20px;
}

支持情况

以下操作系统拥有 dark mode 的开关:

  • Windows 10 1809, 1903+

  • Mac OS X 10.14+

  • iOS 13/ iPad OS 13+

  • Android 10+

  支持 CSS 媒体查询的浏览器:

  • Chrome/Microsoft Edge(Chromium) 76+

  • FireFox 67+

  • Safari 12.1+(在 Mac OS 上) 货 13+ (在 iOS 与 iPad OS 上)

  基本上主流浏览器和操作系统都对 dark mode 做了支持。

后记

  最后我们聊一下 dark mode 有什么意义吧。

  计算机远古时期因为屏幕技术的限制,迫不得已使用黑底白字的界面。等技术发展了,白底黑字就开始统治了所有的 UI 界面,儿如今 dark mode 又是一种流行。怎么有一些循环的意思呢?

  •   对于 OLED 屏幕来说, 深色的界面可以帮助节省电能;

  •   帮助人们晚上方便地阅读信息;

  •   对某些示例障碍人士很友好。

  因为本人是一名视障学生的原因,我身边的低视力同学对深色界面的确是偏爱有加的。 dark mode 这样的设计,既可以让大多数人受益,也可以让小部分人受益,难道这不是最大的意义吗?

  正如有人所说:“科技不为多数人,也不为少数人,它属于我们所有人。” 这就是最好的设计吧!

网页跟随系统 dark mode (暗黑模式) 的实现的更多相关文章

  1. 科技感满满,华为云DevCloud推出网页暗黑模式

    近期,华为云DevCloud推出了暗黑模式,让用户在网页端也可以体验到桌面级应用才有的特性.   深色模式(Dark Mode),俗称暗黑模式.是近2年以来用户呼声最高的功能之一,一些国外顶级厂商都将 ...

  2. iOS 13DarkMode暗黑模式

    iOS 13系统的iPhone 在设置-->显示与亮度 -->选择深色 即开启暗黑模式 1.暗黑模式关闭 1.1 APP开发未进行暗黑适配,出现顶部通知栏字体颜色无法改变始终为白色.可以全 ...

  3. 利用CSS3自定义属性来为网站添加“暗黑模式”(暗色模式/DarkMode)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_114 究竟什么是暗黑模式?这个概念起初来源于macOS系统,该系统的mojave版本为用户提供两个主题皮肤,即浅色和深色的皮肤.自 ...

  4. 微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨

    sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed ...

  5. 如何设置Win7系统中的上帝模式GodMode(转载)

    如何设置Win7系统中的上帝模式GodMode(转载) NT6系统中隐藏了一个秘密的“GodMode”,字面上译为“上帝模式”.God Mode其实就是一个简单的文件夹窗口,但包含了几乎所有系统的设置 ...

  6. [置顶] iOS 应用程序内部国际化,不跟随系统语言

    前言:网络上关于iOS国际化的文章很多,但基本上都是基于跟随系统语言的国际化,笔者就不赘述了-0 – 今天要讲的是不跟随系统的切换语言版本方案,即程序内部的切换语言版本方案. 一.总则: 应用内部语言 ...

  7. [置顶] android系统如何在静音模式下关闭camera拍照声音(2)

    之前写过一篇“android系统如何在静音模式下关闭camera拍照声音”的博客,今天来写他的续篇,继续探讨这个问题. 公司新需求,要求在camera应用中添加一个开关,可以进行拍照声音的关闭和开启. ...

  8. 【Windows 10 应用开发】跟随系统主题颜色

    有些时候,希望应用程序中的某些颜色可以与系统的主题颜色相同,并且当系统主题色改变时进行同步. 实现过程并不复杂,主要用到 UISettings 类,它公开一个 GetColorValue 方法,访问这 ...

  9. Chrome 浏览器的简单设置 无痕模式 暗黑模式 自定义用户目录

    1. Chrome73 新增加了暗黑模式 可以通过修改快捷方式的方式来默认开启方法如下 1.1 关闭浏览器 2.2 鼠标焦点定位到任务栏 Chrome 图标处, 并且按住shift 按键 执行右键操作 ...

随机推荐

  1. Django 之 modelForm (edit.html页面的编写)

    models.py文件 from django.db import models # Create your models here. from django.db import models # C ...

  2. 配置Openfiler做ISCS实验

    在VMware workstation中安装openfiler(linux底层)   系统安装 选择redhat6,64bit   分配30G 2.   3.. 4.5.               ...

  3. [Java编程思想] 第七章 复用类

    第七章 复用类 第一种方法非常直观:只需在新的类中产生现有类的对象(组合). 第二种方法更细致一些:它按照现有类的类型来创建新类(继承). 7.1 组合语法   只需将对象引用置于新类中即可. cla ...

  4. C++中的RAII介绍

    摘要 RAII技术被认为是C++中管理资源的最佳方法,进一步引申,使用RAII技术也可以实现安全.简洁的状态管理,编写出优雅的异常安全的代码. 资源管理 RAII是C++的发明者Bjarne Stro ...

  5. Java代码块与构造器方法执行顺序

    直接上源码: public class Demo4 { { //这里是代码块 System.out.println("这里是代码块"); } static { //这里是静态代码块 ...

  6. SQL 语言包括哪几部分?每部分都有哪些操作关键字?

    SQL 语言包括数据定义(DDL).数据操纵(DML),数据控制(DCL)和数据查询(DQL) 四个部分. 数据定义:Create Table,Alter Table,Drop Table, Crae ...

  7. Spring容器 从XML 文件中读取bean的定义,并实例化bean?

    解释Spring框架中bean的生命周期. Spring根据bean的定义填充所有的属性. 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanN ...

  8. Spring支持的ORM?

    Spring支持以下ORM: Hibernate iBatis JPA (Java Persistence API) TopLink JDO (Java Data Objects) O

  9. Java 中,Maven 和 ANT 有什么区别?

    虽然两者都是构建工具,都用于创建 Java 应用,但是 Maven 做的事情更多, 在基于"约定优于配置"的概念下,提供标准的 Java 项目结构,同时能为应用自 动管理依赖(应用 ...

  10. 13_奈奎斯特稳定性判据_Nyquist Stability Criterion_Part 1

    A曲线内有4个极点两个零点,则B曲线绕(0,0)逆时针两圈 A曲线是nyqyict contour中的曲线,P是A曲线内的()极点个数,Z是()极点个数,N是曲线B逆时针围绕(-1,0)的圈数 没过( ...