用途:帮助开发者定制 Element Plus 主题,包括修改主色、覆盖组件样式、创建自定义主题。
主要能力:提供两种主题定制方式。一是 SCSS 变量覆盖,适合构建期的大规模主题改动,可覆盖 $colors(primary、success、warning、danger、info)、$font-size、$border-radius、$box-shadow 及组件级变量(如 $button、$input、$table),变量定义位于 packages/theme-chalk/src/common/var.scss。二是 CSS 变量覆盖,适合运行时切换主题与动态定制,可在 :root 或自定义类中覆盖 --el-color-primary 及其 light-3/5/7/8/9、dark-2 等派生变量,也可针对单个组件设置,如 <el-tag style="--el-tag-bg-color: red">。
使用方式:SCSS 方式需创建自定义文件(如 styles/element/index.scss),用 @forward 配合 with 覆盖变量,注意使用 @use 而非 @import;随后在入口先引入自定义主题再引入 Element Plus。按需引入时需配置构建工具,Vite 使用 unplugin-element-plus/vite 并设置 useSource: true,Webpack 使用 unplugin-element-plus/webpack,并在 scss 的 additionalData 中引入自定义文件。CSS 变量方式可直接在样式中覆盖,也可用 JS 的 getComputedStyle 读取、style.setProperty 设置,或借助 VueUse 的 useCssVar。
适用场景:全局主题换色、组件样式微调、运行时主题切换、按需引入下的主题定制。
限制:SCSS 方式需构建期编译;CSS 变量不支持 IE11;部分复杂定制可能需两种方式结合;大型 SCSS 文件可能导致热更新变慢。建议将自定义变量与 Element Plus 变量分文件存放,运行时切换优先用 CSS 变量,性能敏感时用类选择器替代 :root。