vue3项目配合element-plus和css实现主题切换,5分钟学会的小技能

在开发自己的小项目过程中,临时起意想做一个光暗主题切换,于是就开始各种查资料捣鼓,看看 less 怎么办,再找找 scss 怎么整。偶然发现知乎上有一篇对国外大神文章的翻译,介绍了使用 css 实现的主题切换。于是在自己的项目中动手试了一下,真的超级简单

先看一下我的小软件实现的两种主题:暗黑,亮白,当然还可以自己定义多种形式

亮白模式:

暗黑模式:还需要再继续调整

css自定义属性讲解

  • 以 -- 开头的属性,另外 scss 是以 $ 开头,less 是以 @ 开头
  • 定义后通过 var() 使用变量
  • 在 :root 选择器中定义, 可以作用于全局文档中的所有元素

在style文件夹下创建theme.css

可以自己额外再添加主题样式,我这里就添加了dark和light两种

/* 默认dark主题 */
:root[theme='dark'] {
  --bg-color: #0d1117;
  --text-color: #f0f6fc;
}



/* light主题 */
:root[theme='light'] {
  --bg-color: #ecf0f3;
  --text-color: #181818;
}

然后在main.ts中引入

在index.css或者vue文件中可以使用var变量引用上面的主题颜色:例如我在index.css中引用这个背景色,在login.css中引入字体颜色:

通过js控制切换主题

  • 通过 switch 标签的 change 事件切换
  • document.documentElement 引用文档的根元素 DOM,即 <HTML> 元素
  • 通过添加和移除 theme 属性达到切换 css 的目的,或者切换属性值
// 切换主题
const chageTheme = (val: Boolean) => {
    if (!val) {
        document.documentElement.setAttribute('theme', 'light')
    } else {
        document.documentElement.setAttribute('theme', 'dark')
    }
}

如果你有使用element plus框架,可以配合element plus的亮暗主题切换: 

需要先在main.ts中引入暗色主题:

import 'element-plus/theme-chalk/dark/css-vars.css'//这句是暗黑模式切换

然后通过js控制切换主题模式: 

const chageTheme = (val: Boolean) => {
    if (!val) {
        document.documentElement.setAttribute('theme', 'light')
        document.querySelector("html")?.classList.remove("dark")
        document.querySelector("html")?.classList.add("light")
    } else {
        document.documentElement.setAttribute('theme', 'dark')
        document.querySelector("html")?.classList.remove("light")
        document.querySelector("html")?.classList.add("dark")
    }
}

效果展示

### 安装配置 Element Plus #### 创建 Vue 3 项目 为了开始集成 Element Plus,首先需要拥有一个基于 Vue 3项目环境。如果尚未创建,则可以通过 `@vue/cli` 或者 Vite 来快速构建一个新的应用实例[^1]。 对于采用 Vite 构建的应用程序而言,在初始化阶段可以选择定制化选项来确保使用的是最新版的 Vue 版本,并且可以在后续过程中单独添加所需的插件服务[^3]。 #### 安装 Element Plus 库 一旦拥有了合适的开发环境之后,就可以通过 npm 或 yarn 命令行工具轻松地将 Element Plus 添加到项目的依赖列表中: ```bash npm install element-plus --save ``` 或者如果是 Yarn 用户则执行如下命令: ```bash yarn add element-plus ``` 这会下载并安装必要的文件至 node_modules 文件夹内以便于稍后的导入操作[^4]。 #### 配置全局样式与按需加载 为了让应用程序能够识别来自 Element Plus 组件库中的 CSS 类名其他资源,默认情况下建议在 main.js/main.ts 中引入整个设计系统的公共样式表;然而考虑到性能优化的需求,也可以借助诸如 unplugin-vue-components vite-plugin-style-import 插件实现更精细粒度上的控制——仅当页面实际请求某个特定组件时才去异步获取对应的外观定义。 ```javascript // main.js or main.ts import { createApp } from &#39;vue&#39; import App from &#39;./App.vue&#39; const app = createApp(App) app.use(ElementPlus) app.mount(&#39;#app&#39;) ``` 上述代码片段展示了最简单的全量引入方式,而针对生产环境中追求极致效率的情况,应该考虑按照官方文档指导完成更加复杂的设置过程以支持懒加载特性。 #### 动态主题色及深色模式切换的支持 除了基本的功能外,还可以利用 VueUse 提供的一系列实用函数进一步增强用户体验,例如允许用户自定义界面颜色方案或是便捷地启用夜间视觉效果等功能点都变得异常简单易行[^2]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024小神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值