网页自适应跟随系统深色模式

简介: 近几年,各个主流操作系统都逐渐开端注重深色方式,从而改善用户在环境光亮低时的阅读体验。随着水果在 iOS 13 与 macOS Mojave 中添加了深色方式,除了 Linux 以外一切的主流操作系统都曾经完成了系统层级的深色方式。Linux 由于 DE、WM 的种类繁杂暂时没有统一的标准,但目前可以经过深色 GTK+ 主题、阅读器插件等方式完成“伪全局”深色方式。既然有了系统层级的适配,阅读器就可以读取深色方式开关,从而完成网页的自顺应。这就是新标准 prefers-color-scheme。

近几年,各个主流操作系统都逐渐开端注重深色方式,从而改善用户在环境光亮低时的阅读体验。随着水果在 iOS 13 与 macOS Mojave 中添加了深色方式,除了 Linux 以外一切的主流操作系统都曾经完成了系统层级的深色方式。Linux 由于 DE、WM 的种类繁杂暂时没有统一的标准,但目前可以经过深色 GTK+ 主题、阅读器插件等方式完成“伪全局”深色方式。既然有了系统层级的适配,阅读器就可以读取深色方式开关,从而完成网页的自顺应。这就是新标准 prefers-color-scheme

首先,大家知道什么是prefers-color-scheme吗?

什么是prefers-color-scheme

去年7月末,W3C发布的 Media Queries Level 5 标准草案 中提到了新的属性 prefers-color-scheme,大致的内容就是网页可以通过这个CSS的条件,来获取用户设备当前的颜色模式。

通俗的讲,我们在前台切换设备的颜色模式,网页也可以跟着自动切换。

这个东西怎么用?

prefers-color-scheme提供了两个值;分别是 light 以及 night

顾名思义,light就是白天模式的样式代码,则night是深色模式的样式代码;

详细介绍:

  • light——浏览器宿系统使用亮色主题的界面,同时也是默认值,浏览器 privacy.resistFingerprinting 被设置为 true 时返回的也将是这个值
  • dark——浏览器宿系统使用深色模式主题的界面

还有一个已废弃的值:

  • no-preference——浏览器宿系统使用未知主题的界面,当较旧版本的浏览器在宿系统不支持系统层级的深色模式时会返回这个值,较旧版本的浏览器 privacy.resistFingerprinting 被设置为 true 时返回的也将是这个值

CSS样式代码:

@media (prefers-color-scheme: light) {
// 亮色模式样式
}
@media (prefers-color-scheme: dark) {
// 深色模式样式
}

通过条件规则组就可以作出判断。

我们可以将这串代码放在网站的自定义style里面,如图:image.png

或者,也可以这么写:

@media not (prefers-color-scheme: dark) {
// 亮色模式样式
}
@media (prefers-color-scheme: dark) {
// 深色模式样式
}

当然了,目前测试在MacOS系统完美适配,Win系统暂时没有进行测试

源代码下载

Dark-light

下载

像我自己的博客,其中已经包含了Javascript,来实现用户跟随深色模式的代码,大家可以参考一下:

if (window.matchMedia('prefers-color-scheme: dark').matches) {
// 深色模式的条件代码
} else {
// 非深色模式的条件代码
}

另外还可以监听系统深色模式的状态,在系统开关深色模式时作出反应:

window.matchMedia('(prefers-color-scheme: dark)').addListener(e => {
if (e.matches) {
// 深色模式的条件代码
  } else {
// 非深色模式的条件代码
  }
});

浏览器的兼容性

2021091915385862.png

看得懂吗?看不懂别急,夏柔给你重新写了一个表,你来看看:

以下是夏柔测试的浏览器,和官方的浏览器兼容性对比:

兼容 不兼容
Chrome(MacOS、夏柔) IE(孤零零)
WebView(MacOS、夏柔)
微信X5内核(华为鸿蒙、夏柔)
Firefox(MacOS、夏柔)
IOS 上的 Safari 浏览器(官方通过、夏柔未测试)
Samsung Internet(官方通过、夏柔未测试)
Opera Android(官方通过、夏柔未测试)
Opera(官方通过、夏柔未测试)
Chrome(华为鸿蒙、夏柔)
Edge(官方通过、夏柔未测试)
Onion(洋葱)(MacOS、华为鸿蒙、夏柔)
更多暂未测试(没时间了,抱歉)

如何应用到WordPress的主题上?

最简单的方法,就是下面的样式代码添加至当前主题footer.php 文件里

<style>
@media (prefers-color-scheme: light) { 
// 亮色模式样式 
} 
@media (prefers-color-scheme: dark) { 
// 深色模式样式 
}
</style>

再或者更简单的方法,把亮色的代码去掉就可以了;

<style>
@media (prefers-color-scheme: dark) { 
// 深色模式样式 
}
</style>

大家有能力的话可以自己写;

最后,转载请注明来源,谢谢!



目录
相关文章
|
5月前
|
程序员
程序员必知:UnityUGUI锚点快速定位(自适应)
程序员必知:UnityUGUI锚点快速定位(自适应)
42 1
|
6月前
|
XML Android开发 数据格式
使用默认闪电浏览器 全屏播放视频时有黑边
使用默认闪电浏览器 全屏播放视频时有黑边
84 5
|
6月前
自适应日落动态卡通动画404页面模板
自适应日落动态卡通动画404页面模板
31 4
自适应日落动态卡通动画404页面模板
|
6月前
二次元自适应动态引导页
二次元自适应动态引导页
84 2
二次元自适应动态引导页
|
6月前
|
Web App开发 Windows
一个好用的设置所有网页成暗黑背景的 Chrome 扩展
一个好用的设置所有网页成暗黑背景的 Chrome 扩展
|
编解码 前端开发
前端设置页面字体尺寸跟随屏幕大小而进行变化
前端设置页面字体尺寸跟随屏幕大小而进行变化
630 0
前端设置页面字体尺寸跟随屏幕大小而进行变化
|
前端开发 JavaScript Serverless
移动端弹出阴影遮罩的几点问题和解决方法
在做移动端的立即购买页面时,点击底部固定栏立即购买按钮需要弹出一个阴影遮罩,在遮罩顶部有一个固定在底部的页面,所以总共是3层页面:最底层浏览页->阴影遮罩页->最上层的立即购买选择规格数量页;效果如下图:
226 0
移动端弹出阴影遮罩的几点问题和解决方法
|
前端开发
巧用滤镜实现高级感拉满的文字快闪切换效果
巧用滤镜实现高级感拉满的文字快闪切换效果
243 0
巧用滤镜实现高级感拉满的文字快闪切换效果
|
前端开发 JavaScript 开发者
让交互更加生动!有意思的鼠标跟随 3D 旋转动效
让交互更加生动!有意思的鼠标跟随 3D 旋转动效
400 0
让交互更加生动!有意思的鼠标跟随 3D 旋转动效
|
前端开发 JavaScript
【前端三分钟】锚点自动跟随滚动定位
【前端三分钟】锚点自动跟随滚动定位
784 0