Element Plus
Element Plus 是一个功能强大、易于使用的 Vue.js UI 组件库,可以帮助开发者快速构建美观、交互丰富的 Web 应用程序界面。
安装
bash
npm install element-plus
使用(按需引入)
安装插件
bash
npm install -D unplugin-vue-components unplugin-auto-import
配置 Vite
js
// vite.config.*
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
plugins: [
AutoImport({
resolvers: [ElementPlusResolver()]
}),
Components({
resolvers: [ElementPlusResolver()]
})
]
})
注意
按需引入只对使用 Element-Plus 组件及样式有效,对于使用非 Element-Plus 组件(如:ElMessage
)及样式无效,此时需要安装 unplugin-element-plus
插件或手动导入样式:
- 插件
- 安装
bash
npm install -D unplugin-element-plus
- 配置 Vite
ts
// vite.config.ts
import ElementPlus from 'unplugin-element-plus/vite'
export default {
plugins: [
ElementPlus({
// options
}),
],
}
- 手动导入
js
import 'element-plus/es/components/message/style/css'
import { ElMessage } from 'element-plus'
全局配置 ConfigProvider
size & zIndex
size 用于设置表单组件的默认尺寸,zIndex 用于设置弹出组件的层级,zIndex 的默认值为 2000。
vue
<template>
<el-config-provider :size="size" :z-index="zIndex">
<app />
</el-config-provider>
</template>
<script setup>
import { defineComponent } from 'vue'
import { ElConfigProvider } from 'element-plus'
const size = ref('small')
const zIndex = ref(3000)
</script>
i18n
Element Plus 组件默认使用英语。
vue
<template>
<el-config-provider :locale="locale">
<el-pagination />
</el-config-provider>
</template>
<script setup>
import { ref, defineComponent } from 'vue'
import { ElConfigProvider } from 'element-plus'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
const locale = ref(zhCn)
</script>
日期和时间本地化
Element Plus 组件默认使用 Day.js 库来管理组件的日期和时间,例如 DatePicker。
js
import 'dayjs/locale/zh-cn'
namespace
Element Plus 提供的默认前缀为 el。
- 设置 ElConfigProvider
使用 <el-config-provider>
包装根组件。
vue
<!-- App.vue -->
<template>
<el-config-provider namespace="ep">
<!-- ... -->
</el-config-provider>
</template>
- 设置 SCSS 变量
scss
// assets/styles/element.scss
@forward 'element-plus/theme-chalk/src/mixins/config.scss' with (
$namespace: 'ep'
);
js
// vite.config.ts
import { defineConfig } from 'vite'
export default defineConfig({
// ...
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "@/assets/styles/element.scss" as *;`
}
}
}
// ...
})
button
自动在两个中文字符之间插入空格。
vue
<template>
<el-config-provider :button="config">
<el-button>中文</el-button>
</el-config-provider>
</template>
<script lang="ts" setup>
import { reactive } from 'vue'
const config = reactive({
autoInsertSpace: true
})
</script>
message
可同时显示的消息最大数量。
vue
<template>
<el-config-provider :message="config">
<el-button @click="open">OPEN</el-button>
</el-config-provider>
</template>
<script lang="ts" setup>
import { reactive } from 'vue'
import { ElMessage } from 'element-plus'
const config = reactive({
max: 3
})
const open = () => {
ElMessage('This is a message.')
}
</script>
自定义主题
Element Plus 默认提供一套主题,CSS 命名采用 BEM 的风格,方便使用者覆盖样式。
通过 Scss 变量
- 创建 Scss
scss
// assets/styles/element.scss
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
$colors: (
'primary': (
'base': #409eff
)
)
);
- 配置 Vite
js
// vite.config.*
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
export default defineConfig({
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "@/assets/styles/element.scss" as *;`
}
}
},
plugins: [
AutoImport({
resolvers: [ElementPlusResolver()]
}),
Components({
resolvers: [ElementPlusResolver({ importStyle: 'sass' })]
})
]
})
通过 CSS 变量
全局组件
css
/* style.css */
:root {
--el-color-primary: #409eff !important;
}
单个组件
- HTML
html
<el-tag style="--el-tag-bg-color: red; --el-color-primary: white">Tag</el-tag>
- CSS
css
.custom-class {
--el-tag-bg-color: red;
--el-color-primary: white;
}
- JavaScript:点击查看 useCssVar | VueUse 用法
vue
<script setup lang="ts">
import { ref } from 'vue'
import { useCssVar } from '@vueuse/core'
const el = ref(null)
const color = useCssVar('--color', el)
function switchColor() {
if (color.value === '#df8543') color.value = '#7fa998'
else color.value = '#df8543'
}
</script>
<template>
<div ref="el" style="--color: #7fa998; color: var(--color)">
Sample text, {{ color }}
</div>
<button @click="switchColor">Change Color</button>
</template>