vite实现选择深色、浅色、跟随系统设置页面主题的方法

21 篇文章 0 订阅
17 篇文章 0 订阅
本文介绍了如何使用VueUse库结合Vite开发项目时实现页面的深色、浅色和跟随系统颜色模式切换。通过引入VueUse的useColorMode,开发者可以轻松管理项目主题并根据用户选择或系统设置动态调整页面样式。
摘要由CSDN通过智能技术生成

项目框架:vite + js

需求:页面设置深色、浅色、跟随系统,切换不同皮肤(主题)功能

① 如果设置了深色主题,不管电脑系统设置的是深色还是浅色,都是用深色主题;
② 如果设置了浅色主题,不管电脑系统设置的是深色还是浅色,都是用浅色主题;
③ 如果设置了跟随系统,当系统是深色主题时,用深色主题;系统是浅色主题时,用浅色主题。

安装 VueUse 库

在项目中
安装方法:

npm i @vueuse/core

使用方法

在要是用的组件中引入 “useColorMode”,
可以 从 useColorMode() 方法返回的 对象中 ,通过结构赋值,得到系统当前设置的是深色还是浅色主题,以及项目设置的是什么主题(深色、浅色、跟随系统)

system.value - - - 记录的当前电脑系统使用的是深色还是浅色 颜色模式;有两个值:dark、light。dark 是指深色,light 是指浅色。

store.value - - - 记录的是项目页面设置是 深色、浅色、根据系统 颜色模式;有三个值:dark、light、auto。dark 是指深色,light 是指浅色,auto 是指 跟随系统。

import { useColorMode } from '@vueuse/core'

const { system, store } = useColorMode()

system.value // 'dark' | 'light'
store.value // 'dark' | 'light' | 'auto'

// 计算属性,动态获取设置的 主题色模式
const myColorMode = computed(() => store.value === 'auto' ? system.value : store.value)

如果不是设置使用主题的组件中要获取当前使用主题,可以使用如下方法:

import { useColorMode } from '@vueuse/core'

const mode = useColorMode() // Ref<'dark' | 'light'>

小提示:

通过 const mode = useColorMode() 获取页面模式时,
尝试修改过 mode 的值为 auto, 修改后,页面会在修改电脑系统时自动变换主题,但 读取 mode 值的时候,不是 auto,是当前系统设置的颜色模式。
所以,需要设置跟随系统时,使用 ‘const { system, store } = useColorMode()’ 来获取电脑系统设置的颜色模式,以及页面设置的颜色模式,

只是获取页面使用的模式时,可以使用 ‘const mode = useColorMode()’ 来读取使用的颜色模式,展示不同主题效果。

win10查看电脑主题色和修改主题色的方法如下:

找到电脑设置选项 - - -》找到 “个性化”(背景、锁屏、颜色)选项 - - -》找到 “颜色” 选项,
可以查看电脑使用的是浅色还是深色主题色。

在这里插入图片描述

在这里插入图片描述
查看主题色:
在这里插入图片描述
修改主题色:
在这里插入图片描述

创建深色、浅色主题样式

VueUse 判断项目使用的是浅色主题色时,会给元素添加 “light” 类名;
使用的是深色主题色时,会给元素添加 “dark” 类名;不会实质性的改变页面样式

实现换肤效果的关键就是 :页面设置为浅色/深色主题时,使用不同的样式表

所以,需要设置 深色、浅色两套样式,当浅色模式时添加浅色主题样式;深色模式时,添加深色主题样式。

如下:
在这里插入图片描述
在这里插入图片描述
可以在 main.css 中添加 .lgiht 、.dark 样式表:

.dark {
	--bg-color: #181818;
	--color-text_primary: rgba(255, 255, 255, 0.9);
}

.light {
	--bg-color: #F8F8FA;
	--color-text_primary: rgba(0,0,0,0.9);
}

组件中编写样式时,使用定义好的变量名:

.box {
	background: var(--bg-color);
	color: var(--color-text_primary);

页面中切换不同模式方法

代码示例 :


<script setup>
import { computed } from 'vue'
import { useColorMode } from '@vueuse/core'

const { system, store } = useColorMode()

// 页面的颜色模式
const mode = computed(() => {
  return store.value == 'auto' ? system.value : store.value
})

// 切换主题
const changeTheme = (val) => {
  store.value = val
}

</script>

<template>

  <ul v-if="showTheme" class="theme-list">
	<li :class="{active: store == 'dark'}" @click="changeTheme('dark')">暗黑模式</li>
	<li :class="{active: store == 'light'}" @click="changeTheme('light')">亮色模式</li>
	<li :class="{active: store == 'auto'}" @click="changeTheme('auto')">跟随系统</li>
  </ul>

</template>

点击切换 深色、浅色模式后,页面就会切换不同主题了,
如果设置成跟随系统模式,当系统设置的是浅色时,就会使用浅色(light)下的样式,呈现浅色主题;
当系统改成深色模式,页面就会自动变成深色(dark)下的样式,呈现深色主题。

根据需求,添加样式变量到 light 、dark 类名下的样式表中。

如果有使用图片,也可以根据页面使用的是深色还是浅色模式,使用相应的图片

例如:

<img v-if="mode == 'light'" src="../../assets/image/logo-light.svg" />
<img v-else src="../../assets/image/logo-dark.svg" />
  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vite 是一个非常快速的前端构建工具,它内置了对 CSS 的支持,包括 CSS 模块化。下面是在 Vite实现 CSS 模块化的步骤: 1. 安装依赖 首先,您需要安装 `sass` 和 `sass-loader` 依赖项,它们将帮助您在 Vite 中使用 CSS 模块化。 ``` npm install sass sass-loader --save-dev ``` 2. 配置 `vite.config.js` 在 `vite.config.js` 中,您需要配置 `css` 属性来启用 CSS 模块化和 `sass` 预处理器。例如: ``` import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], css: { modules: { localsConvention: 'camelCaseOnly' }, preprocessorOptions: { scss: { additionalData: `@import "@/styles/variables.scss";` } } } }) ``` 在上面的示例中,`css.modules` 属性启用了 CSS 模块化,并将类名转换为 CamelCase 格式。`preprocessorOptions.scss` 属性启用了 `sass` 预处理器,并将全局变量文件导入到所有样式文件中。 3. 创建样式文件 在您的样式文件中,您可以使用 `:local()` 选择器来定义局部样式。例如: ``` .container { padding: 10px; background-color: white; border-radius: 5px; :local(.title) { font-size: 18px; color: #333; } :local(.description) { font-size: 14px; color: #666; } } ``` 在上面的示例中,`:local()` 选择器定义了 `.title` 和 `.description` 类的局部样式。 4. 在组件中使用样式 在您的组件中,您可以像这样导入样式文件: ``` <template> <div class="container"> <h2 class="title">Title</h2> <p class="description">Description</p> </div> </template> <style module> @import "@/styles/your-styles.scss"; </style> ``` 在上面的示例中,`<style module>` 标签启用了 CSS 模块化,并导入了样式文件。然后,您可以像这样在组件中使用局部类名:`.title` 和 `.description`。 这就是在 Vite实现 CSS 模块化的基本步骤。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值