vue3+elementplus动态主题切换

1.下载element-plus

# Yarn
$ yarn add element-plus

2.在main.js中引入

import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
const app = createApp(App)
app.use(ElementPlus, {
    locale: zhCn,
  })
app.mount('#app')

​

3.在src文件夹下新建style文件夹,并新建文件fix.scss,style.scss

下载yarn add -D sass  

新增fix.scss

在此文件可以自定义基础颜色

/* 覆盖element-plus样式 */

:root {
	--el-color-primary: #409EFF;
	--el-color-primary-light-1: #53a7ff;
	--el-color-primary-light-2: #66b1ff;
	--el-color-primary-light-3: #79bbff;
	--el-color-primary-light-4: #8cc4ff;
	--el-color-primary-light-5: #9fceff;
	--el-color-primary-light-6: #b2d8ff;
	--el-color-primary-light-7: #c5e1ff;
	--el-color-primary-light-8: #d8ebff;
	--el-color-primary-light-9: #ebf5ff;
	--el-color-primary-dark-1: #398ee5;
	--el-color-primary-dark-2: #337ecc;
	--el-color-primary-dark-3: #2c6eb2;
	--el-color-primary-dark-4: #265e99;
	--el-color-primary-dark-5: #204f7f;
	--el-color-primary-dark-6: #193f66;
	--el-color-primary-dark-7: #132f4c;
	--el-color-primary-dark-8: #0c1f32;
	--el-color-primary-dark-9: #060f19;
}

 新建style.scss

@import 'fix.scss';

4.配置vite.config.js

下载yarn add -D unplugin-auto-import unplugin-vue-components 5

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import Components from 'unplugin-vue-components/vite'
import AutoImport from 'unplugin-auto-import/vite'
const pathSrc = path.resolve(__dirname, 'src')
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({ resolvers: [ElementPlusResolver()] }),
    //Components({ resolvers: [ElementPlusResolver()] }),
    // { importStyle: "sass" }配置ElementPlus采用sass样式配色系统
    Components({ resolvers: [ElementPlusResolver({ importStyle: "sass" })] }),
  ],

  resolve: {
    alias: {
      '~/': `${pathSrc}/`,
    },
  },
  css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@use "~/style/style.scss" as *;`,
      },
    },
  },
})

5.在页面查看效果 

在测试页面写入


<template>
  <div>
    <el-button type="primary">Primary</el-button>
    <div class="demo-color-block">
      <span class="demonstration">切换主题</span>
      <el-color-picker v-model="color1"  :predefine="colorList" @change="changeColor"/>
    </div>
  </div>
</template>

<script setup>
import { watch, onMounted, ref } from 'vue'
import colorTool from '~/utils/color'
const color1 = ref('#409EFF')
const colorList=ref(['#409EFF', '#009688', '#536dfe', '#ff5c93', '#c62f2f', '#fd726d'])


const changeColor=(val)=>{
  console.log(val,'val');
  document.documentElement.style.setProperty('--el-color-primary', val);
  for (let i = 1; i <= 9; i++) {
					document.documentElement.style.setProperty(`--el-color-primary-light-${i}`, colorTool.lighten(val,i/10));
	}
  for (let i = 1; i <= 9; i++) {
    document.documentElement.style.setProperty(`--el-color-primary-dark-${i}`, colorTool.darken(val,i/10));
  }
}
</script>
<style scoped>

</style>

页面展示

 

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3是一种流行的JavaScript框架,用于构建用户界面。它具有响应式和组件化的特性,使得开发者可以更轻松地构建交互式的Web应用程序。 Element Plus是一个基于Vue 3的UI组件库,提供了丰富的可复用组件,可以帮助开发者快速构建漂亮的用户界面。 动态路由是指根据用户的操作或者其他条件,在运行时动态地添加、修改或删除路由。在Vue 3中,可以使用Vue Router来实现动态路由。 下面是一个简单的示例,演示如何在Vue 3和Element Plus中实现动态路由: 1. 首先,安装Vue Router和Element Plus: ```bash npm install vue-router@next element-plus ``` 2. 在Vue项目的入口文件(通常是main.js)中,引入Vue Router和Element Plus,并创建一个路由实例: ```javascript import { createApp } from 'vue' import { createRouter, createWebHistory } from 'vue-router' import ElementPlus from 'element-plus' import 'element-plus/lib/theme-chalk/index.css' import App from './App.vue' const router = createRouter({ history: createWebHistory(), routes: [] }) const app = createApp(App) app.use(router) app.use(ElementPlus) app.mount('#app') ``` 3. 在路由实例中,可以使用`router.addRoute()`方法来动态添加路由。例如,可以在某个事件触发时添加一个新的路由: ```javascript router.addRoute({ path: '/dynamic', component: () => import('./views/Dynamic.vue') }) ``` 4. 在组件中,可以使用`<router-link>`和`<router-view>`来实现路由导航和路由渲染。例如,在App.vue组件中,可以添加一个动态路由链接: ```html <template> <div> <router-link to="/dynamic">Dynamic Route</router-link> <router-view></router-view> </div> </template> ``` 这样,当用户点击"Dynamic Route"链接时,将会渲染Dynamic.vue组件。 这只是一个简单的示例,实际的动态路由可能涉及更复杂的逻辑和配置。你可以根据自己的需求进行进一步的定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值