小工具知识网

当前位置: 首页 > 行业知识 > css前端主题切换方案(三种)

行业知识

css前端主题切换方案(三种)

2026-11-02 14:14:57 来源:互联网转载

第一种:提前引入所有样式,用类名切换

// dark.css/* dark样式主题 */body.dark .box {  color: #eee;  background: #333;}
// day.css/* day样式主题 */body.day .box {  color: #f90;  background: #fff;}
// html                              theme                      白天        夜晚                    提前引入所有主题样式,做类名切换                  做法:
需要切换主题的时候将指定的根元素类名更换 优点:不用重新加载样式index.php/tags-522.html" >文件,在样式切换时不会有卡顿 缺点:首屏加载时会牺牲一些时间加载样式资源
如果主题样式表内定义不当,也会有优先级问题
各个主题样式是写***的,后续针对某一主题样式表修改或者新增主题也很麻烦 document.body.className = 'day'; document.getElementsByClassName('btn-day')[0].onclick = ()=>{ document.body.className = 'day'; } document.getElementsByClassName('btn-dark')[0].onclick = ()=>{ document.body.className = 'dark'; }

第二种:link标签动态引入

// default.css.text {  color: #999;}
// blue.css.text {  color: blue;}
// green.css.text {  color: green;}
                  theme                      默认        蓝色        绿色                    link标签动态引入                  做法:
提前准备好几套CSS主题样式文件
在需要的时候,创建link标签动态加载到head标签中,或者是动态改变link标签的href属性。 优点:实现了按需加载,提高了首屏加载时的性能 缺点:动态加载样式文件,如果文件过大网络情况不佳的情况下可能会有加载延迟,导致样式切换不流畅
如果主题样式表内定义不当,会有优先级问题
各个主题样式是写***的,后续针对某一主题样式表修改或者新增主题也很麻烦
function createLink(cssURL){ var head = document.getElementsByTagName('head')[0], linkTag = null; if(!cssURL){ return false; } // 判断link是否存在,存在时,改变href,不存在时创建 if (document.getElementsByTagName('link').length > 0) { document.getElementsByTagName('link')[0].href = cssURL; } else { linkTag = document.createElement('link'); linkTag.setAttribute('rel','stylesheet'); linkTag.setAttribute('type','text/css'); linkTag.href = cssURL; head.appendChild(linkTag); } } createLink(`default.css`); document.getElementsByClassName('default')[0].onclick = ()=>{ createLink(`default.css`); } document.getElementsByClassName('blue')[0].onclick = ()=>{ createLink(`blue.css`); } document.getElementsByClassName('green')[0].onclick = ()=>{ createLink(`green.css`); }

第三种:CSS变量+类名切换

// dark.css/* dark样式主题 */.dark {  --theme-color: #fff;  --theme-background: #333;}
// day.css/* day样式主题 */.day {  --theme-color: #999;  --theme-background: #fff;}
// public.css@import "dark.css";@import "day.css";.box {  height: 400px;  border: 1px solid #000;  padding: 10px;  color: var(--theme-color);  background: var(--theme-background);}
// html                  白天        夜晚                    CSS变量+类名切换                  做法:
依然是提前将样式文件载入,切换时将指定的根元素类名更换。 优点:不用重新加载样式文件,在样式切换时不会有卡顿
在需要切换主题的地方利用var()绑定变量即可,不存在优先级问题
新增或修改主题方便灵活,仅需新增或修改CSS变量即可,在var()绑定样式变量的地方就会自动更换
缺点:首屏加载时会牺牲一些时间加载样式资源
IE兼容性(IE9以下不兼容) document.body.className = "day"; document.getElementsByClassName("btn-day")[0].onclick = () => { document.body.className = "day"; }; document.getElementsByClassName("btn-dark")[0].onclick = () => { document.body.className = "dark"; };

上一篇:宝塔面板轻松搭建网站数据库并连接!详细教程揭秘!

下一篇:阿里云服务器web怎么登录?