vue3 + ElementPlus 换肤方案(Css变量) #
前言 #
你可以在这里直接看到效果 设置主题色 + 换肤
有了css变量,可以方便的在样式中使用统一的颜色,然后通过js修改,就能很快地改变整个界面的样式
定义css变量:(你也可以具体定义在某一选择器上)
:root {
--color: #808080;
}
:root {
--color: #808080;
}
使用css变量:
div {
color: var(--color);
}
.someClass:hover {
background: var(--color);
}
div {
color: var(--color);
}
.someClass:hover {
background: var(--color);
}
改变主题色 #
注意到 Element Plus 的scss变量都编译成了css变量,最新的ElementUI推荐全局引入,那我们覆盖它的样式, 也就是自己的样式写在ElementPlus样式的后面
import 'element-plus/dist/index.css'
import './style/index.scss'
import 'element-plus/dist/index.css'
import './style/index.scss'
比如本项目的主题色使用css变量:
--main
然后把Element UI的变量的值设为这个变量
--el-color-primary: var(--main)
这样只需要修改主题色,整个UI的颜色都可以改变
在js中可以这样修改css变量:
document.documentElement.style.setProperty('--main', '#808080')
document.documentElement.style.setProperty('--main', '#808080')
换肤 #
本项目还准备了换肤功能,主要是准备两套皮肤方案
:root
下面的是默认的皮肤
[data-theme="dark"]
下面是dark的皮肤
:root {
--background: white;
--font-color: #303133;
}
[data-theme='dark'] {
--background: #383838;
--font-color: #eeeeee;
}
:root {
--background: white;
--font-color: #303133;
}
[data-theme='dark'] {
--background: #383838;
--font-color: #eeeeee;
}
在js中这样修改主题方案:
document.documentElement.setAttribute('data-theme', 'dark')
document.documentElement.setAttribute('data-theme', 'dark')
这样,html标签上会多一个data-theme="dark"
的属性,样式也会变成[data-theme="dark"]
下的样式