三步实现主题切换
深色模式与浅色模式
现在很多网站上都支持夜间模式,浅色模式来回切换。最近做项目,发现了一种非常简单的方式,跟大家分享一下。主要是通过设置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()
函数可以代替元素中任何属性中的值的任何部分。括号里面填写的是我们全局样式的名字。
就这么多啦,大家有更好的方法记得分享给我哦!谢谢
转载自:https://juejin.cn/post/7053031139694346248