美文网首页
web跟随系统暗黑模式

web跟随系统暗黑模式

作者: wwmin_ | 来源:发表于2021-11-10 00:18 被阅读0次

前言

现代的系统windows/mocOS/IOS/Android/Linus等等几乎都支持了整个系统的暗黑色主题与亮色主题模式的选择切换, 现代web浏览器自然也都跟随着加入了这一功能. 那么如何将这些功能应用到我们的实际项目中呢?这里就涉及到新的css样式

1. CSS dark样式

 <style type="text/css">
    /* 默认样式 */
    body {
      background-color: white;
      color: black;
    }

    /* 系统支持暗黑模式主题时的样式 */
    @media (prefers-color-scheme: dark) {
      body {
        background-color: black;
        color: white;
      }
    }
  </style>

当系统支持暗黑模式的时候就会应用到@media (prefers-color-scheme: dark)内部的样式

2. JS获取系统模式

如果有独立分开的css样式文件,可使用js判断是否处于暗黑模式,然后再确定加载那个css样式即可, js获取media信息如下

let dom = document.getElementById("mode");
//获取media信息对象
let media = window.matchMedia('(prefers-color-scheme:dark)');
if (media.matches) {
  //可用此方式加载不同的css样式文件,达到自动匹配系统样式功能
  dom.innerText = "监听到模式: 黑暗";
} else {
  dom.innerText = "监听到模式: 亮色";
}

3. 监听系统模式切换

通过监听matchMedia的change事件可判断用户是否切换了暗黑/亮色模式

let media = window.matchMedia('(prefers-color-scheme:dark)');
//监听样式切换
let callback = e => {
  let prefersDarkMode = e.matches;
  if (prefersDarkMode) {
    console.log("黑暗模式");
    dom.innerText = "监听到模式切换: 黑暗";
  } else {
    console.log("亮色模式");
    dom.innerText = "监听到模式切换: 亮色";
  }
}
if (typeof media.addEventListener === 'function') {
  media.addEventListener('change', callback);
} else if (typeof media.addListener === 'function') {
  media.addListener(callback);
}

4. 完整demo

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>web跟随系统颜色模式</title>
</head>

<body>
  <style type="text/css">
    /* 默认样式 */
    body {
      background-color: white;
      color: black;
    }

    /* 系统支持暗黑模式主题时的样式 */
    @media (prefers-color-scheme: dark) {
      body {
        background-color: black;
        color: white;
      }
    }
  </style>
  <div>
    <h3>测试web页面css样式跟随系统颜色模式</h3>
    <h2><span id="mode"></span></h2>
  </div>
  <script>
    let dom = document.getElementById("mode");
    //获取media信息对象
    let media = window.matchMedia('(prefers-color-scheme:dark)');
    if (media.matches) {
      //可用此方式加载不同的css样式文件,达到自动匹配系统样式功能
      dom.innerText = "监听到模式: 暗黑";
    } else {
      dom.innerText = "监听到模式: 亮色";
    }
    //监听样式切换
    let callback = e => {
      let prefersDarkMode = e.matches;
      if (prefersDarkMode) {
        console.log("暗黑模式");
        dom.innerText = "监听到模式切换: 暗黑";
      } else {
        console.log("亮色模式");
        dom.innerText = "监听到模式切换: 亮色";
      }
    }
    if (typeof media.addEventListener === 'function') {
      media.addEventListener('change', callback);
    } else if (typeof media.addListener === 'function') {
      media.addListener(callback);
    }
  </script>
</body>

</html>

效果如下


web跟随系统颜色模式效果演示

总结

本文首先介绍了暗黑模式的css样式, 通过使用css的meida查询器设置系统的样式. 然后介绍了通过js查询系统的暗黑模式状态 , 最后介绍了使用js监听系统模式动态变化事件. 能用js控制自然会发挥js的能力,有了更多的可操控性.

本文作者:wwmin
微信公众号: DotNet技术说
本文链接:https://www.jianshu.com/p/575557eb1465
版权声明:转载请注明出处!
声援博主:如果您觉得文章对您有帮助,关注点赞, 您的鼓励是博主的最大动力!

相关文章

  • web跟随系统暗黑模式

    前言 现代的系统windows/mocOS/IOS/Android/Linus等等几乎都支持了整个系统的暗黑色主题...

  • 2021-08-23小程序暗黑模式

    小程序暗黑模式这个魔鬼如何关闭呢,不自动跟随系统变暗黑,求支招

  • 暗黑模式(iOS多主题)完美设计实现

    Introduce: ios暗黑模式,多主题多皮肤设计,用于解决在ios上实现可跟随系统主题变更,也可不跟...

  • Android 10 暗黑模式适配,你需要知道的一切

    暗黑模式 在 Android 10 里,Dark theme 暗黑模式得到了系统级的支持。暗黑模式不仅酷炫,而且有...

  • iOS swift暗黑模式适配

    暗黑模式适配 跟随系统 自定义切换 具体ui可以自己话,下面是简单的点击swtich事件 颜色设置代码 Scene...

  • iOS 13 禁用暗黑模式 dark mode

    项目没有适配暗黑模式的需求,苹果审核也没有强制要求,所以很开心的以为项目这方面不用管了,但是手机系统调到暗黑模式后...

  • 禁用iOS13暗黑模式

    如果手机开启暗黑模式,没有做暗黑模式的app显示会有问题,如果不打算支持暗黑模式,需要将暗黑模式禁止。在plist...

  • 苹果暗黑模式适配

    前段时间因为微信未适配苹果暗黑模式在各种媒体上吵的沸沸扬扬,今天我们来说说苹果暗黑模式的简单适配。 系统自带 只要...

  • 暗黑模式开发

    iOS13暗黑模式适配(项目开发版) iOS 13 DarkMode 暗黑模式 IOS 暗黑模式适配---基础适配

  • Xcode 升级11 适配 ⚠️记录~

    1、关闭暗黑模式 ,如果没有适配暗黑模式,在暗黑模式下会很丑 2、 报错 library not found fo...

网友评论

      本文标题:web跟随系统暗黑模式

      本文链接:https://www.haomeiwen.com/subject/idzvzltx.html