# element-ui
# 自定义element-ui的主题
# 全部引入组件和组件样式
全部引入组件不加以描述
# 项目支持scss
在系统中创建一个scss文件,如element-variables.scss,文件内容如下:
/* 改变主题色变量 */
$--color-primary: teal;
/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';
@import "~element-ui/packages/theme-chalk/src/index";
在项目入口文件中引入element-variables.scss。(不需要引入element-ui编译好的css文件)
import './element-variables.scss'
# 项目不支持scss
安装element-theme,element-theme-chalk
npm i element-theme element-theme-chalk -D
在命令行中执行如下命令,生成element-ui变量文件
et -i ./src/element-variables.scss
生成变量文件之后将文件中的变量修改成自己想要的主题颜色。
在命名行中执行如下命令将./src/element-variables.scss中的主题编译成css文件
et -c ./src/element-variables.scss -o ./src/assets/theme
执行完上述命令之后将在src/assets/theme中生成css文件
在项目入口文件中引入生成的css文件
import './assets/theme/index.css'
# 按需引入组件和组件样式
假如只引入Button
# 生成主题文件
安装element-theme,element-theme-chalk
npm i element-theme element-theme-chalk -D
在命令行中执行如下命令,生成element-ui变量文件。
et -i ./src/element-variables.scss
生成变量文件之后将文件中的变量修改成自己想要的主题颜色。
生成主题文件,并且将文件保存到src/assets/theme
et -c ./src/element-variables.scss -o ./src/assets/theme
# 配置babel.config.js
module.exports = {
presets: [["es2015", { "modules": false }]],
"plugins": [
[
"component",
{
"libraryName": "element-ui",
"styleLibraryName": "~src/assets/theme"
}
]
]
}
styleLibraryName的值要以~开头,并且~后面的值是主题文件相对babel.config.js的路径。
使用babel-plugin-component按需引入组件的同时也会引入组件的样式,所有不需要自己在项目中引入组件的样式。生成的这个变量文件(即:element-variables.scss)在项目中不需要使用,它只是用于生成主题css样式文件
# element-theme
element-theme是一个Element主题生成工具,他使用gulp将sass转成css文件,默认将element-theme-chalk中的sass文件转成css文件,支持自定义主题,甚至可以指定saas文件所在的库。
在package.json中配置element-theme字段自定义主题
{
"element-theme": {
"browsers": ["ie > 9", "last 2 versions"],
"out": "./theme",
"config": "./element-variables.css",
"theme": "element-theme-chalk",
"minimize": false,
"components": ["button", "input"]
}
}
除了可以通过配置package.json的方式自定义主题,还可以在命令行传参数的方式自定义主题
# Commander
在element-theme中使用Commander解析命令行中的参数。
var program = require('commander')
program
.version(require('../package.json').version)
.option('-i --init [filePath]', 'init variables file')
.option('-w --watch', 'watch variable changes then build')
.option('-o --out [outPath]', 'output path', function (out) {config.out = out})
.option('-m --minimize', 'compressed file', function (minimize) {config.minimize = minimize !== false})
.option('-c --config [filePath]', 'variables file', function (c) {config.config = c})
.option('-b --browsers <items>', 'set browsers', function (browsers) {config.browsers = browsers.split(',')})
.parse(process.argv)