css实现一键换肤

实现一键换肤的时候,我们除了动态替换引用的css文件,还可以通过使用css变量的方式,达到所需效果。

首先我们来了解css变量,css变量以--开头,引用时va(--变量名),例

css 复制代码
:root{
    --default-color: #fff;
}
.box{
    background-color: var(--default-color);
}

:root指向文档根元素,可用来配置全局变量,而我们可以通过修改变量的值,来实现修改样式。

一种方式是直接修改变量值,这种方式需要在setProperty时将所有变量都设置一遍。

javascript 复制代码
document.documentElement.style.setProperty('--default-color', '#f00');

另一种方式是在css中将每一套变量的值罗列出来,在:root上添加自定义属性,js通过修改自定义属性的值修改css的引用值

css

css 复制代码
:root{
    --default-color: #fff;
}
:root[theme="black"]{
    --default-color: #000;
}

js

javascript 复制代码
document.documentElement.setAttribute('theme', "black");
localStorage.setItem('theme', "black"); // 在缓存中存入theme的值,方便下次进入页面的时候主题与上一次一致

第二种方式较第一种的优势是,不需要在js中修改那么多的变量,如果主题样式也特别多的话,js的方式比较麻烦,而且第二种更方便存储到缓存中,以便后续直接应用

相关推荐
li357412 小时前
将已有 Vue 项目通过 Electron 打包为桌面客户端的完整步骤
前端·vue.js·electron
Icoolkj13 小时前
VuePress 与 VitePress 深度对比:特性、差异与选型指南
前端·javascript·vue.js
excel13 小时前
CNN 分层详解:卷积、池化到全连接的作用与原理
前端
excel13 小时前
CNN 多层设计详解:从边缘到高级特征的逐层学习
前端
西陵14 小时前
Nx带来极致的前端开发体验——任务编排
前端·javascript·架构
大前端helloworld14 小时前
从初中级如何迈入中高级-其实技术只是“入门卷”
前端·面试
东风西巷16 小时前
Balabolka:免费高效的文字转语音软件
前端·人工智能·学习·语音识别·软件需求
萌萌哒草头将军16 小时前
10个 ES2025 新特性速览!🚀🚀🚀
前端·javascript·vue.js
半夏陌离16 小时前
SQL 入门指南:排序与分页查询(ORDER BY 多字段排序、LIMIT 分页实战)
java·前端·数据库