当前位置:   article > 正文

ElementPlus 修改主题色和暗黑模式切换_element plus自定义主题

element plus自定义主题

本文讲述根本ElementPlus官方教程配置项目的自定义主题色的两种方法和暗黑模式切换;

 一、主题配置

方案1 --- 动态设置setProperty

       这个方案比较简单,适用于由用户根据颜色面板自行设定各种颜色主题;

1.首先定义一个全局的方法

  1. export const setVarStyle = (key:string,value:any,dom = document.documentElement) => {
  2. dom.style.setProperty(key, value)
  3. }

2.在根组件App.vue 的onMounted钩子执行,自定义颜色主题;

  1. onMounted(() => {
  2. setVarStyle('--el-color-primary', '#56AB2F')
  3. setVarStyle('--el-color-primary-light-9', '#F5FBF0')
  4. setVarStyle('--el-color-primary-light-3', '#95d475')
  5. })

总结:操作简单(有手就行),可灵活动态修改主题色,但是首屏加载时会相比较慢;


方案2 --- 官方方法全局配置主题色

        这个方案就是覆盖Element Plus 默认提供一套主题;

1.在src/styles/ 文件夹下创建一个 index.scss 文件;

在index.scss 里,首先使用 @forward 导入 Element Plus 的变量,再设置elementplus的主题色;

  1. @forward "element-plus/theme-chalk/src/common/var.scss" with ($colors: (
  2. "primary": ("base": pink),
  3. "success": ("base": red),
  4. "warning": ("base": #FF771C),
  5. "danger": ("base": #ff3030),
  6. "error": ("base": #ff3030),
  7. "info": ("base": #9e9e9e),
  8. ));

这样我们就完成了主题色的覆盖设置,如果某个组件中想使用的话,直接在该组件引入即可

  1. <style lang="scss" scoped>
  2. @import "~/styles/element/custom-element.scss";
  3. </style>

2.如果想全局适用的话,需要在main.ts 中引入;

  1. import { createApp } from 'vue'
  2. // import ElementPlus from 'element-plus'
  3. // import 'element-plus/dist/index.css'
  4. import App from './App.vue'
  5. //引入ElMessage 文件样式
  6. //注意:在vite.config.ts 中配置 importStyle 为sass。,这里的ElMessage 的样式也要引入 sass 格式的样式
  7. import "element-plus/theme-chalk/src/message.scss";
  8. //后续暗黑模式的引入
  9. import "~/styles/dark.scss";
  10. const app = createApp(App)
  11. // app.use(ElementPlus)
  12. app.mount('#app')

3.在vite.config.ts 中配置

  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import { resolve } from 'path'
  4. import Components from 'unplugin-vue-components/vite'
  5. import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
  6. const pathSrc = resolve(__dirname, 'src')
  7. // https://vitejs.dev/config/
  8. export default defineConfig({
  9. plugins: [vue(),
  10. Components({
  11. // a允许自动加载' ./src/components/ '下的标记组件
  12. extensions: ['vue', 'md'],
  13. // allow auto import and register components used in markdown
  14. // include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
  15. resolvers: [
  16. ElementPlusResolver({
  17. //importStyle配置样式引入方式,自动引入修改主题色设置此属性
  18. // importStyle可以配置element-plus的样式引入方式,它默认是css,利用scss变量修改主题时,需要将这个属性设置为scss
  19. importStyle: 'sass',
  20. }),
  21. ],
  22. dts: 'src/components.d.ts',
  23. }),
  24. ],
  25. resolve: {
  26. alias: {
  27. '~/': `${pathSrc}/`,
  28. }
  29. },
  30. css: {
  31. preprocessorOptions: {
  32. scss: {
  33. //自定义的主题文件
  34. additionalData: `@use "~/styles/index.scss" as *;`,
  35. },
  36. },
  37. }
  38. })

4.然后就可以在项目中展示;


 

 二、暗黑模式

        因为是通过在html标签上添加 dark 类,可以自行实现切换;但为了方便切换以及进一步的定制化,官方推荐使用 useDark;

1.同上在src/styles/文件夹下创建 dark.scss;

  1. @forward "element-plus/theme-chalk/src/dark/var.scss" with (
  2. $colors:(
  3. //这里定义在暗黑模式下 primary 的颜色,其他同理
  4. "primary": ("base": green),
  5. )
  6. );
  7. @use "element-plus/theme-chalk/src/dark/css-vars.scss" as *;

2.在mian.ts 中引入 dark.scss;

import "~/styles/dark.scss";

3.在App.vue 中,引入usedark方法;

  1. <template>
  2. <div>
  3. <span @click.stop="toggleDark()">暗黑模式</span>
  4. <el-switch size="small" v-model="isDark" />
  5. </div>
  6. </template>
  7. <script setup lang="ts">
  8. import { useDark, useToggle } from '@vueuse/core'
  9. const isDark = useDark()
  10. const toggleDark = useToggle(isDark)
  11. </script>

4.结果展示;

 拓展:在sass中,@forward 相当于中转站,通过@forward引入scss文件并将引入scss文件中的变量、混合、函数等抛出,当其他scss文件用@use引入此模块时可使用,一般在开源项目中使用较多;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/82087
推荐阅读