方法一:在线主题编辑器

element的在线主题编辑器:https://element.eleme.cn/#/zh-CN/theme/preview

修改定制 Element 所有全局和组件的 Design Tokens,并可以方便地实时预览样式改变后的视觉。同时它还可以基于新的定制样式生成完整的样式文件包,供直接下载使用(关于如何使用下载的主题包,请参考方法二中的「引入自定义主题」部分)。

方法二:项目中使用了scss

Element 的 theme-chalk 使用 SCSS 编写,如果你的项目也使用了 SCSS,那么可以直接在项目中改变 Element 的样式变量。新建一个样式文件,例如 element-variables.scss,写入以下内容:

/* 改变主题色变量 */
$--color-primary: teal;

/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';

@import "~element-ui/packages/theme-chalk/src/index";

之后,在项目的入口文件中,直接引入以上样式文件即可(无需引入 Element 编译好的 CSS 文件):

import Vue from 'vue'
import Element from 'element-ui'
import './element-variables.scss'

Vue.use(Element)

需要注意的是,覆盖字体路径变量是必需的,将其赋值为 Element 中 icon 图标所在的相对路径即可。

方法三:命令行主题工具

一. 安装工具

  1. 安装主题工具

npm i element-theme -g
不要使用这个命令,否则运行 et -i 时可能会报错(primordials is not defined错误)

cnpm i element-themex -g
建议使用这个命令,且不要使用npm安装,暂且不知道为什么要使用这个命令,如果有大佬知道,烦请指出

  1. 安装chalk主题,可以从 npm 安装或者从 GitHub 拉取最新代码
# 从 npm
npm i element-theme-chalk -D

# 从 GitHub
npm i https://github.com/ElementUI/theme-chalk -D

二. 修改配置

  1. 获取theme的sass文件并修改
et -i   //[可以自定义变量文件,默认为element-variables.scss]

> ✔ Generator variables file //表示成功
  1. 这时根目录下会产生element-variables.scss(或自定义的文件),大致如下:
  2. 直接编辑 element-variables.scss 文件,例如修改主题色为自己所需要的颜色
$--color-primary: purple;

三. 编译主题

修改完变量后,要编译主题(如果编译后,再次修改了变量,需要重新编译)

et

> ✔ build theme font
> ✔ build element theme   //表示从新编译成功

执行主题编译命令生成主题,根目录会生成一个theme的文件夹 。需要引入这个文件夹里的css、font等资源。theme文件夹里有font文件夹和大量的css文件,css文件只留下index.css,其他的css文件都可以删掉,因为index.css中的样式包含其他全部css文件的样式。

四. 引入自定义主题。

引入自定义主体。先把安装element时引入main.js中的主题样式去掉,在main.js中引入

element 动态换主题 elementui自定义主题_自定义

五. 验证自定义主题是否成功

在项目中写些样式,看下主题色是否改变

<el-row>
      <el-button>默认按钮</el-button>
      <el-button type="primary">主要按钮</el-button>
      <el-button type="success">成功按钮</el-button>
      <el-button type="info">信息按钮</el-button>
      <el-button type="warning">警告按钮</el-button>
      <el-button type="danger">危险按钮</el-button>
</el-row>

参考链接:https://element.eleme.cn/#/zh-CN/component/custom-theme