Skip to content

主题

项目内已经集成 动态改变主题色, 切换 暗黑模式的功能。

注意

element-plus 默认是支持 暗黑模式的,但是如果你使用了非 element-plus 的 ui 组件等,需要自行根据项目中的变量实现自己的暗黑模式条件。

变更主题配色

element-plus 基于 scss 处理器处理 css。但并不是使用 scss 变量,使用原生 css-var。可以通过覆盖 css-var来实现变更主题色。

在 root 中覆盖

css
:root {
  --el-color-primary: #1677ff;
  --el-button-bg-color: #1677ff;
  --el-button-active-bg-color: #eaf6ff;
  --el-button-active-border-color: #eaf6ff;
  --el-color-primary-dark-2: #00164d;
  --el-color-primary-dark-1: #00164d;
  --el-color-primary-light-1: #00164d;
  --el-color-primary-light-2: #042979;
  --el-color-primary-light-3: #0e44a6;
  --el-color-primary-light-4: #1d62d2;
  --el-color-primary-light-5: #3086ff;
  --el-color-primary-light-6: #3c94ff;
  --el-color-primary-light-7: #68b1ff;
  --el-color-primary-light-8: #93caff;
  --el-color-primary-light-9: #bee2ff;
}

也可以针对某个元素的变量单独覆盖某个元素的变量。

如何动态改变变量

通过 js 来生成主要变量的色阶 , 通过 style 动态设置 css-var

ts
import { generateThemeCluster } from '@/utils'

import { generate } from '@arco-design/color'

export const useElementCssVar = (mode?: 'light' | 'dark') => {
  const el = document.documentElement

  const style = el.style

  mode = mode || 'light'

  const setElementCssVar = (color: string, mode?: 'light' | 'dark'): void => {
    let colorList: string[] = []

    if (mode === 'light') {
      colorList = generateThemeCluster(color)
    } else {
      colorList = generate(color, { index: 10, list: true, dark: true })
      colorList.unshift(color)
    }

    // set css var
    style.setProperty('--el-color-primary', colorList[0])
    style.setProperty('--el-button-bg-color', colorList[0])
    style.setProperty('--el-button-active-bg-color', colorList[10])
    style.setProperty('--el-button-active-border-color', colorList[10])
    style.setProperty('--el-color-primary-dark-2', colorList[1])
    style.setProperty('--el-color-primary-dark-1', colorList[1])
    for (let index = 1; index <= 9; index++) {
      style.setProperty(`--el-color-primary-light-${index}`, colorList[index])
    }
  }
  const removeElementCssVar = () => {
    style.removeProperty('--el-color-primary')
    style.removeProperty('--el-button-bg-color')
    style.removeProperty('--el-button-active-bg-color')
    style.removeProperty('--el-button-active-border-color')
    style.removeProperty('--el-color-primary-dark-2')
    style.removeProperty('--el-color-primary-dark-1')
    for (let index = 1; index <= 9; index++) {
      style.removeProperty(`--el-color-primary-light-${index}`)
    }
  }

  return {
    setElementCssVar,
    removeElementCssVar
  }
}

暗黑主题

暗黑主题 element-plus 已内置。

如何使用 暗黑模式

html
<html class="dark">
  <head></head>
  <body></body>
</html>
ts
// main.ts
// 如果只想导入css变量
import 'element-plus/theme-chalk/dark/css-vars.css'

更多详情