网页跟随系统 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 按键 执行右键操作 ...
随机推荐
- python监控cpu 内存实现邮件微信报警
# qianxiao996精心制作 #博客地址:https://blog.csdn.net/qq_36374896 import psutil, time,smtplib,socket import ...
- 74CMS 3.0 SQL注入漏洞前台
一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...
- GitFlow 工作流
1.概述 GitFlow 工作流定义了一个围绕项目发布的严格分支模型.虽然比功能分支工作流复杂几分,但提供了用于一个健壮的用于管理大型项目的框架. GitFlow 工作流没有用超出功能分支工作流的概念 ...
- 突发!Gitee 图床,废了!
大家好,我是鱼皮,这两天又发生了一件挺意外的事情:Gitee 的图床废了! 图床:指储存图片的服务器,便于在网上展示图片 昨天晚上,星球里不止一位小伙伴发帖子表示自己网站.文章中的图片竟然全部变成了 ...
- Minikube使用文档
最近在参与社区flink-operator的开发,开发的过程中经常使用到minikube来本地验证这篇文章记录下相关使用 安装 https://minikube.sigs.k8s.io/docs/st ...
- 大咖说|网易数帆论道 PolarDB 数据库开源 & 存储生态
开源技术如何商业化?将遇到什么问题?有哪些可行的解决办法?本期大咖说,阿里云数据库开源战役负责人曲山将携手网易副总裁汪源与你分享关于开源商业化的思考. 嘉宾简介 网易副总裁.杭州研究院执行院长.网易数 ...
- Android studio Error occurred during initialization of VM
Unable to start the daemon process. This problem might be caused by incorrect configuration of the d ...
- Java并发机制(2)--synchronized与Lock
本内容整理自:博客园-海 子-java并发编程系列-http://www.cnblogs.com/dolphin0520/category/602384.html 1.基础: 1.什么时候出现线程安全 ...
- java-开发规约
public class TenTen { /** * 代码中的命名不能用下划线或美元符号开始和结束:例如 _name name_ $name name$ */ /** * 类名必须使用UpperCa ...
- 请说出作用域public,private,protected,以及不写时的区别?
这四个作用域的可见范围如下表所示.说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly.作用域 当前类 同一package 子孙类 其他packagepublic ...