网页跟随系统 dark mode (暗黑模式) 的实现
经过几十年的沉默, 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 mode 与 light mode 差异的代码放到 dark.css 与 light.css 里, 把其他样式放入 style.css 中去,接着在使用外部链接的方式把它们链接进来,对 dark.css 和 light.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 (暗黑模式) 的实现的更多相关文章
- 科技感满满,华为云DevCloud推出网页暗黑模式
近期,华为云DevCloud推出了暗黑模式,让用户在网页端也可以体验到桌面级应用才有的特性. 深色模式(Dark Mode),俗称暗黑模式.是近2年以来用户呼声最高的功能之一,一些国外顶级厂商都将 ...
- iOS 13DarkMode暗黑模式
iOS 13系统的iPhone 在设置-->显示与亮度 -->选择深色 即开启暗黑模式 1.暗黑模式关闭 1.1 APP开发未进行暗黑适配,出现顶部通知栏字体颜色无法改变始终为白色.可以全 ...
- 利用CSS3自定义属性来为网站添加“暗黑模式”(暗色模式/DarkMode)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_114 究竟什么是暗黑模式?这个概念起初来源于macOS系统,该系统的mojave版本为用户提供两个主题皮肤,即浅色和深色的皮肤.自 ...
- 微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨
sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed ...
- 如何设置Win7系统中的上帝模式GodMode(转载)
如何设置Win7系统中的上帝模式GodMode(转载) NT6系统中隐藏了一个秘密的“GodMode”,字面上译为“上帝模式”.God Mode其实就是一个简单的文件夹窗口,但包含了几乎所有系统的设置 ...
- [置顶] iOS 应用程序内部国际化,不跟随系统语言
前言:网络上关于iOS国际化的文章很多,但基本上都是基于跟随系统语言的国际化,笔者就不赘述了-0 – 今天要讲的是不跟随系统的切换语言版本方案,即程序内部的切换语言版本方案. 一.总则: 应用内部语言 ...
- [置顶] android系统如何在静音模式下关闭camera拍照声音(2)
之前写过一篇“android系统如何在静音模式下关闭camera拍照声音”的博客,今天来写他的续篇,继续探讨这个问题. 公司新需求,要求在camera应用中添加一个开关,可以进行拍照声音的关闭和开启. ...
- 【Windows 10 应用开发】跟随系统主题颜色
有些时候,希望应用程序中的某些颜色可以与系统的主题颜色相同,并且当系统主题色改变时进行同步. 实现过程并不复杂,主要用到 UISettings 类,它公开一个 GetColorValue 方法,访问这 ...
- Chrome 浏览器的简单设置 无痕模式 暗黑模式 自定义用户目录
1. Chrome73 新增加了暗黑模式 可以通过修改快捷方式的方式来默认开启方法如下 1.1 关闭浏览器 2.2 鼠标焦点定位到任务栏 Chrome 图标处, 并且按住shift 按键 执行右键操作 ...
随机推荐
- 5月4日 python学习总结 socketserver
一.socketserver SocketServer简化了网络服务器的编写. 它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServe ...
- [转载]SQL注入绕过WAF的方法总结
基本/简单绕过方法: 1.注释符 http://www.0dayhack.com/index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4-. 2.使用 ...
- python的内存回收机制
变量相当于门牌号,当门牌没有了,即函数的引用都没有调用了,内存的数据就会被清除掉. python内有个定时器,定期的会刷新,如果发现内存中数据被引用了,就会被回收,这个就是内存的回收机制 ...
- FOC软件中要处理的问题
1. 电流采样时间及通道 FOC需要通过采集相电流来进行控制,采样时间及通道极为关键,在二或三电阻采样方案中,采用如下方式: 在1.6扇区,B.C为采样通道: 在2.3扇区,A.C为采样通道: 在4. ...
- class文件和java文件区别
- kafka的message格式是什么样的?
一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成 header部分由一个字节的magic(文件格式)和四个字节的CRC32(用于判断body消息体是否正常)构成 ...
- Java程序要操作数据库,一定要使用JDBC技术吗?
<!-- MySQL驱动,连接数据库用,由数据库厂商提供 --> <dependency> <groupId>mysql</groupId> <a ...
- JavaScript 变动事件
变动事件,当用户修改了DOM结构(添加或删除元素节点)后发生. 任何时候当元素被添加到DOM中或从DOM中移除时,DOM的结构就发生了变化,而这种变化就会触动变动事件. 1 <html> ...
- C语言之关键字(知识点2)
关键字又叫保留字,这些关键字不可以再次定义 解析
- 4.4 ROS节点名称重名
4.4 ROS节点名称重名 场景:ROS 中创建的节点是有名称的,C++初始化节点时通过API:ros::init(argc,argv,"xxxx");来定义节点名称,在Pytho ...