elementUI默认提供了一套主题色,并且css明明采用BEM风格,可以方便的覆盖样式。
但是如果整个项目主题色都不同,那么一个个去覆盖工作量太大了。
我们可以通过一些方法来批量改变样式变量。详细见elementUI官方文档
这里我们使用sass来实现
首先我们要安装sass
npm i sass -D
而后准备定制化的样式文件,在styles目录下创建element/index.scss
这个文件通常是由UI设计师提供
/* 只需要重写你需要的即可 */
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
$colors: (
'primary': (
// 主色
'base': #27ba9b,
),
'success': (
// 成功色
'base': #1dc779,
),
'warning': (
// 警告色
'base': #ffb302,
),
'danger': (
// 危险色
'base': #e26237,
),
'error': (
// 错误色
'base': #cf4444,
),
)
)
安装官方的配置文档来导入配置,这里我将修改的部分又注释包起来,方便观看
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// 导入对应包
// 此处为需要修改的地方
import ElementPlus from 'unplugin-element-plus/vite'
export default defineConfig({
plugins: [
vue(),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),
// 按需定制主题配置
// 此处为需要修改的地方
ElementPlus({
useSource: true,
}),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
// 此处为需要修改的地方
css: {
preprocessorOptions: {
scss: {
// 自动导入定制化样式文件进行样式覆盖
additionalData: `
@use "@/styles/element/index.scss" as *;
`,
}
}
}
})
配置完成