likes
comments
collection

三步实现主题切换

作者站长头像
站长
· 阅读数 15

深色模式与浅色模式

现在很多网站上都支持夜间模式,浅色模式来回切换。最近做项目,发现了一种非常简单的方式,跟大家分享一下。主要是通过设置body的全局样式,通过改变className,来达到黑白切换的效果。

先给大家看一下效果图

三步实现主题切换

三步实现主题切换

第一步设置全局样式

//浅色模式
body {
  --primary-color: #ff0064;
  --sun-color: #eec413;
  --link-color: #4299e1;
  --border-radius: 2px;
  --bg: #fff;
  --bg-second: #fff;
  --rgb-bg-second: rgba(255, 255, 255);
  --bg-body: #e7eaee;
  --bg-footer: #292525;
  --bg-code: #f8f8f8;
  --blockquote-color: #fff;
  --main-text-color: rgba(0, 0, 0, 0.85);
  --second-text-color: rgba(0, 0, 0, 0.65);
  --disable-text-color: rgba(0, 0, 0, 0.35);
  --border-color: #e5e6eb;
  --box-shadow: 0 1px 3px rgb(18 18 18/10%);
  --scrollbar-bg: #dadada;
  --comment-editor-border-color: #d9d9d9;
  --comment-editor-disable-bg: #f5f5f5;
  --global-bg-opacoty: 0.75;
}
//深色模式
body.dark {
  background: var(--bg);
  --sun-color: #e684af;
  --bg: #282c35;
  --bg-second: #363c48;
  --rgb-bg-second: rgba(54, 60, 72);
  --bg-body: var(--bg);
  --bg-footer: var(--bg);
  --bg-code: rgba(115, 124, 153, 0.2);
  --blockquote-color: #fff;
  --main-text-color: hsla(0, 0%, 100%, 0.85);
  --second-text-color: hsla(0, 0%, 100%, 0.65);
  --disable-text-color: hsla(0, 0%, 100%, 0.45);
  --border-color: hsla(0, 0%, 100%, 0.2);
  --box-shadow: 0 2px 15px 0 rgba(26, 26, 27, 0.637);
  --scrollbar-bg: var(--bg-second);
  --comment-editor-border-color: var(--border-color);
  --comment-editor-disable-bg: var(--border-color);
  --global-bg-opacoty: 0.25;
}

第二步改变body的class名

const checkTheme = () => {
    if (!document.body.className) {
       document.body.className = "dark"
    } else {
        document.body.className = ""
    }
 }

这样就做到改变body的className啦,然后下面大家也可以通过判断body的className,来渲染小太阳或者小月亮,(iconfont的图标可以自己去找一个)

最后一步:接下来的背景样式,字体样式都要引用全局样式

用var(),引入class样式,给大家示范一下

body {
  background-color: var(--bg);
}

大家凑合看吧,大概就是这样。一定要记得,全部要用var()引用那里的样式哦! 可能会有人不理解var(),var() 函数可以代替元素中任何属性中的值的任何部分。括号里面填写的是我们全局样式的名字。

就这么多啦,大家有更好的方法记得分享给我哦!谢谢