prefers-color-scheme设置检测系统主题色

 更新时间:2023年04月28日 15:01:56   作者:码上花甲  
这篇文章主要为大家介绍了prefers-color-scheme设置检测系统主题色实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

我们在访问某个站点时,有时可能会发现这样一种场景:该站点在白天访问时,它是亮色主题;当晚上访问时,它就变成暗色主题了。而且这种主题的切换是自动的,他会随系统主题变化而改变。如果我们要将这种功能应用在自己站点上,该如何实现呢?

本文涉及三个相关知识点:

  • 设置主题色
  • 检查主题色
  • 监听主题色变化

设置主题色

在 CSS 中,提供了一种设置系统主题色的媒体特性 prefers-color-scheme,该特性通常提供两个值 lightdark。顾名思义,这两个值一个代表 日间模式,一个表示 夜间模式。并且他们的兼容性也是最好的。

这里有一个简单的例子,可以很方便的通过 CSS 实现系统主题色:

.day   { background: #eee; color: black; }
.night { background: #333; color: white; }
@media (prefers-color-scheme: dark) {
  .day.dark-scheme   { background:  #333; color: white; }
  .night.dark-scheme { background: black; color:  #ddd; }
}
@media (prefers-color-scheme: light) {
  .day.light-scheme   { background: white; color:  #555; }
  .night.light-scheme { background:  #eee; color: black; }
}

当系统主题为日间模式时,会应用上面的 light 主题样式;当系统主题为夜间模式时,会应用上面的 dark 主题样式。

实际开发中,我们会将项目用到的色值抽离出来作为全局的公共变量,方便我们对项目整体的色值管理。如:

:root {
  // Light Theme
  --PrimaryBackgroundColorLight: #f9f9f9;  
  --PageBackgroundColorLight: #efefef;
  --PrimaryColorLight: #34495e;
  --PrimaryActivedColorLight: #1890FF;
  // Dark Theme
  --PrimaryBackgroundColorDark: #293042;
  --PageBackgroundColorDark: #202634;
  --PrimaryColorDark: #c6cfd8;
  --PrimaryActivedColorDark: #1890FF;
}

我们定义好全局 CSS 变量后,在需要的地方直接引用即可:

.day.light {
  background-color: var(--PrimaryBackgroundColorLight);
}

检测主题色

既然能通过 CSS 设置系统主题色,那 JS 肯定也有能力来检测系统主题色。JS 提供了一个用于检查媒体查询的函数 matchMedia,利用该函数能方便地检查当前系统主题色:

const themeMedia = window.matchMedia("(prefers-color-scheme: light)");
if (themeMedia.matches) {
  // 日间模式
} else {
  // 夜间模式
}

监听主题色变化

除了获取当前系统主题色,我们还能监听主题色的变化。

const themeMedia = window.matchMedia("(prefers-color-scheme: light)");
themeMedia.addListener(e => {
  if (e.matches) {
    console.log("light");
  } else {
    console.log("dark");
  }
});

通过上面提到的三个知识点,在自己站点实现主题色功能是绰绰有余的。像一些更丰富的多主题切换,虽然实现的方法不同,但思路基本都是类似的。总结起来就是开篇的三句话:如何设置主题、获取当前被应用的主题以及监听主题的变更。

以上就是prefers-color-scheme设置检测系统主题色的详细内容,更多关于prefers-color-scheme主题色的资料请关注脚本之家其它相关文章!

相关文章

  • Spring mvc 接收json对象

    Spring mvc 接收json对象

    这篇文章主要介绍了Spring mvc 接收json数据的相关资料,需要的朋友可以参考下
    2015-12-12
  • javascript实现查找数组中最大值方法汇总

    javascript实现查找数组中最大值方法汇总

    本文给大家汇总了一下使用javascript实现查找数组中最大最小值的一些方法,非常的简单实用,有需要的小伙伴可以来参考下。
    2016-02-02
  • layer弹出子iframe层父子页面传值的实现方法

    layer弹出子iframe层父子页面传值的实现方法

    这篇文章主要介绍了layer弹出子iframe层父子页面传值的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • JavaScript实现的鼠标跟随特效示例【2则实例】

    JavaScript实现的鼠标跟随特效示例【2则实例】

    这篇文章主要介绍了JavaScript实现的鼠标跟随特效,结合2则实例形式分析了javascript针对鼠标事件的响应、计算、处理及页面元素动态操作相关实现技巧,需要的朋友可以参考下
    2018-12-12
  • 轻松掌握JavaScript代理模式

    轻松掌握JavaScript代理模式

    这篇文章主要帮助大家轻松掌握JavaScript代理模式,什么是代理模式?代理的用途,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 基于JS实现导航条之调用网页助手小精灵的方法

    基于JS实现导航条之调用网页助手小精灵的方法

    在网站中加入网页助手小精灵,当用户访问网站时,向用户问好,或是传递一些网站的重要信息,给用户带来极好的体验感,那么基于js代码是如何调用网页助手小精灵的呢?下面跟着脚本之家小编一起学习吧
    2016-06-06
  • js实现文字截断功能

    js实现文字截断功能

    这篇文章主要为大家详细介绍了js代码如何实现文字截断功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 由JavaScript技术实现的web小游戏(不含网游)

    由JavaScript技术实现的web小游戏(不含网游)

    伴随Ajax与网页游戏的崛起,曾几何时JavaScript也成了游戏开发时可供选择的技术之一,文本 仅列举数项由JavaScript技术实现的web小游戏(不含网游),聊作参考之用。
    2010-06-06
  • PixiJS学习之Sprite类的使用详解

    PixiJS学习之Sprite类的使用详解

    Sprite 直译为 “精灵”,是游戏开发中常见的术语,就是将一个角色的多个动作放到一个图片里,通过裁剪局部区域得到当前的角色状态图。本文主要介绍了PixiJS中Sprite类的使用,需要的可以参考一下
    2023-02-02
  • JS实现的base64加密、md5加密及sha1加密详解

    JS实现的base64加密、md5加密及sha1加密详解

    这篇文章主要介绍了JS实现的base64加密、md5加密及sha1加密的方法,结合实例形式详细分析了JavaScript各种常见加密方法与实现技巧,需要的朋友可以参考下
    2016-04-04

最新评论