Vue3+ElementPlus实现主题切换(暗亮色)

一、前言

网站切换主题的原理是通过css变量,即为定义的颜色复制给相应的css变量,通过控制css变量的值来实现切换主题,本文章讲述如何使用elementPlus实现暗亮色的切换。

ElementPlus2.2.0版本以后,支持了暗黑模式,底层还是通过控制css变量来实现的。

二、切换暗黑主题

2.1构建项目 

首先要构建一个vue3项目,并引入ElementPlus组件库,引入组件库请参考官网快速开始 | Element PlusA Vue 3 based component library for designers and developersicon-default.png?t=O83Ahttps://element-plus.org/zh-CN/guide/quickstart.html

2.2切换暗黑主题

只需在项目的index.html文件的<html>标签内添加dark类名,如下图所示

执行该操作后,项目中所有使用的ElementPlus组件都会转化为黑色(样式覆盖除外),反之,若添加class="light"类名则会显示亮色。

2.3动态切换

那么如何实现动态切换呢,此时只需通过js动态添加dark类名即可,这里我引入<el-switch>来控制类名。

import { useDark } from "@vueuse/core";

//切换主题
const isDark = useDark();
<el-switch v-model="isDark" :active-icon="Moon" :inactive-icon="Sunny" inline-prompt @change="customToggleDark"/>

其中useDark@vueuse/core 库中的一个组合式函数,用于检测和切换用户界面的暗模式(dark mode)。它可以帮助开发者轻松地在应用中实现暗模式功能。要使用 @vueuse/core,你需要先安装它:npm install @vueuse/core

customToggleDark方法为控制添加类名

const customToggleDark = (e) => {
  console.log(e);
  if (e) {
    //暗色主题
    const theme = 'dark'
    const theme = userStore.savedThem
    document.documentElement.setAttribute('class',theme)
  } else {
    //亮色主题
    const theme = 'light'
    const theme = userStore.savedThem
    document.documentElement.setAttribute('class',theme)
  }
};

此时便可以通过el-switch开关控制主题切换

2.4自定义主题色

上述代码运行后,切换的暗黑色为elmentPlus默认的暗黑颜色,并且只是对elementPlus的组件生效,下面讲述如何自定义暗色和亮色的颜色,并将其应用到全局。

由2.2可知,我们只需配置好dark 和light下的样式即可。

1.在vue项目中assets文件下新建dark.less文件

2.在main.js中引入

3.在dark.less中使用css变量编写颜色样式

上述分别为使用light类名时使用的样式,和使用dark类名时的样式

两套变量名要保持一致,根据需求定义好之后只需在对应组件的颜色样式中使用即可,例如

background-color: var(--back-color)

现在只需切换el-switch便可以切换.dark和.light类名的使用,从而展示出不同的样式。

### 实现 `el-table` 组件在深色模式下的配色方案 为了使 `el-table` 组件适应深色模式,可以通过自定义样式来调整表格的颜色属性。这涉及到修改表头、单元格背景颜色、文字颜色以及其他视觉元素。 #### CSS 变量覆盖方法 Element Plus 提供了一种基于CSS变量的方式来自定义组件的主题颜色。对于深色模式的支持,可以利用这一特性,在全局或局部范围内重写这些变量: ```css /* 定义暗黑模式 */ :root { --el-color-primary: #409EFF; } [data-theme="dark"] { --el-bg-color-overlay: #1f2d3d; /* 表格整体背景色 */ --el-border-color-light-solid: rgba(255, 255, 255, .1); /* 边框线颜色 */ --el-text-color-regular: hsla(0, 0%, 100%, .78); --el-fill-color-blur: rgb(48, 65, 86); --el-table-tr-background-color-hover: #2c3e50 !important; --el-table-header-cell-bg-color: #1a2b44; --el-table-row-bg-color-even: transparent; } ``` 上述代码片段展示了如何针对不同的UI元素应用特定于黑主题的颜色值[^1]。 #### JavaScript 动态切换逻辑 为了让用户能够在浅色和深色之间自由切换,还需要编写一些JavaScript代码用于改变页面上的 `[data-theme]` 属性: ```javascript const toggleDarkMode = () => { document.documentElement.dataset.theme = document.documentElement.dataset.theme === &#39;light&#39; ? &#39;dark&#39; : &#39;light&#39;; }; ``` 此函数会根据当前状态翻转数据集中的theme键值对,从而触发相应的样式变化。 #### HTML 结构与初始化设置 最后,在HTML文档中加入必要的结构并确保初始状态下设置了正确的默认主题: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>Document</title> <link rel="stylesheet" href="/path/to/element-plus.css"/> <style> @import url(&#39;/path/to/custom-style.css&#39;); </style> <script src="/path/to/vue.js"></script> <script src="/path/to/element-plus.js"></script> </head> <body data-theme="light"> <!-- 默认为亮色 --> <div id="app"> <button @click="toggleDarkMode()">Toggle Dark Mode</button> <el-table :data="tableData" style="width: 100%"> ... </el-table> </div> <!-- Vue实例化脚本 --> <script type="module"> import { createApp } from &#39;vue&#39; // 导入其他依赖... createApp(App).use(ElementPlus).mount(&#39;#app&#39;) </script> </body> </html> ``` 这段示例说明了如何构建一个支持深色模式的应用程序框架,并包含了启动Vue应用程序所需的最少配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值