一、前言
网站切换主题的原理是通过css变量,即为定义的颜色复制给相应的css变量,通过控制css变量的值来实现切换主题,本文章讲述如何使用elementPlus实现暗亮色的切换。
ElementPlus2.2.0版本以后,支持了暗黑模式,底层还是通过控制css变量来实现的。
二、切换暗黑主题
2.1构建项目
首先要构建一个vue3项目,并引入ElementPlus组件库,引入组件库请参考官网快速开始 | Element PlusA Vue 3 based component library for designers and developershttps://element-plus.org/zh-CN/guide/quickstart.html
2.2切换暗黑主题
只需在项目的index.html文件的<html>标签内添加dark类名,如下图所示
执行该操作后,项目中所有使用的ElementPlus组件都会转化为黑色(样式覆盖除外),反之,若添加class="light"类名则会显示亮色。
2.3动态切换
那么如何实现动态切换呢,此时只需通过js动态添加dark类名即可,这里我引入<el-switch>来控制类名。
import { useDark } from "@vueuse/core";
//切换主题
const isDark = useDark();
<el-switch v-model="isDark" :active-icon="Moon" :inactive-icon="Sunny" inline-prompt @change="customToggleDark"/>
其中useDark
是 @vueuse/core
库中的一个组合式函数,用于检测和切换用户界面的暗模式(dark mode)。它可以帮助开发者轻松地在应用中实现暗模式功能。要使用 @vueuse/core
,你需要先安装它:npm install @vueuse/core
customToggleDark方法为控制添加类名
const customToggleDark = (e) => {
console.log(e);
if (e) {
//暗色主题
const theme = 'dark'
const theme = userStore.savedThem
document.documentElement.setAttribute('class',theme)
} else {
//亮色主题
const theme = 'light'
const theme = userStore.savedThem
document.documentElement.setAttribute('class',theme)
}
};
此时便可以通过el-switch开关控制主题切换
2.4自定义主题色
上述代码运行后,切换的暗黑色为elmentPlus默认的暗黑颜色,并且只是对elementPlus的组件生效,下面讲述如何自定义暗色和亮色的颜色,并将其应用到全局。
由2.2可知,我们只需配置好dark 和light下的样式即可。
1.在vue项目中assets文件下新建dark.less文件
2.在main.js中引入
3.在dark.less中使用css变量编写颜色样式
上述分别为使用light类名时使用的样式,和使用dark类名时的样式
两套变量名要保持一致,根据需求定义好之后只需在对应组件的颜色样式中使用即可,例如
background-color: var(--back-color)
现在只需切换el-switch便可以切换.dark和.light类名的使用,从而展示出不同的样式。