当前位置:首页 > 科技  > 软件

Vue3项目中实现主题切换真的很简单!!!

来源: 责编: 时间:2024-07-15 17:17:37 750观看
导读一、原理换肤能够实现的终极密码是——CSS变量,可以为每个主题设定一组CSS变量,包含这个主题的所有颜色、字体等信息,当需要切换主题时,只需要更改使用的CSS变量组即可。声明变量。在 :root 伪类中声明 CSS 变量,这样就能

一、原理

换肤能够实现的终极密码是——CSS变量,可以为每个主题设定一组CSS变量,包含这个主题的所有颜色、字体等信息,当需要切换主题时,只需要更改使用的CSS变量组即可。Siz28资讯网——每日最新资讯28at.com

  1. 声明变量。在 :root 伪类中声明 CSS 变量,这样就能在全局范围内使用变量:
:root {  --main-color: #06c;}
  1. 使用变量。在你的 CSS 中,使用 var() 函数来使用 CSS 变量:
.header {  background-color: var(--main-color);}

二、demo实现

下面我们用Vue3+Element-plus为例,来实现一波高亮模式+暗黑模式两个主题色,可参考element-plus暗黑模式介绍。Siz28资讯网——每日最新资讯28at.com

2.1 引入主题色样式

在src/styles下面新建theme.scss,把默认暗黑主题色引入进来,并可以在其里面覆盖原有变量或新增一些变量Siz28资讯网——每日最新资讯28at.com

// theme.scss/** element内置暗黑主题 */@use 'element-plus/theme-chalk/src/dark/css-vars.scss' as *;// 可以进行一些样式的覆盖html {    --v-bg-color: #cfcccc; // 新增}html.dark {    --v-bg-color: #141414; // 新增  	--el-color-primary: #409eff; // 覆盖}

在main.ts中引入默认主题色和暗黑模式主题色Siz28资讯网——每日最新资讯28at.com

// main.ts 文件import { createApp } from 'vue';import ElementPlus from 'element-plus';// element默认主题import 'element-plus/dist/index.css'import './style.css';// 公共样式,包含自定义暗黑模式,element重置样式import './styles/index.scss';import App from './App.vue';const app = createApp(App);app.use(ElementPlus);app.mount('#app')

此时在浏览器控制台就可以看到很多变量Siz28资讯网——每日最新资讯28at.com

图片Siz28资讯网——每日最新资讯28at.com

2.2 主题色切换能力

主题切换能力其核心关注点为:Siz28资讯网——每日最新资讯28at.com

  1. 利用provide注入当前主题及修改主题的方法,然后在组件中通过inject获取主题及主题修改方法;
  2. 利用localStorage持久化存储主题;
  3. 改变html的class属性,进而决定使用哪一套主题;
<script setup lang="ts">import {provide, ref, onMounted} from 'vue';import SwitchDark from './components/SwitchDark.vue';// 改变属性,确定使用哪一套样式const addThemeAttribute = (theme: string) => {  const html = document.documentElement;  html.setAttribute('class', theme);}const theme = ref(localStorage.getItem('myTheme') || 'light');onMounted(() => {  addThemeAttribute(theme.value);});const setTheme = (newTheme: string) => {  // 改变主题  theme.value = newTheme;  addThemeAttribute(newTheme);  localStorage.setItem('myTheme', newTheme);};provide('theme', {  theme,  setTheme});</script><template>  <SwitchDark />  <div class="bg">    我是内容  </div></template><style scoped>.bg {  background-color: var(--v-bg-color);  width: 200px;  height: 200px;}</style>

2.3 切换按钮

切换主题色肯定需要一个按钮,下面利用el-switch实现了一个简单的切换按钮,并利用setTheme来切换对应的主题。Siz28资讯网——每日最新资讯28at.com

图片Siz28资讯网——每日最新资讯28at.com

<template>    <el-switch        v-model="isDark"        inline-prompt	        @change="changeTheme"        :active-icnotallow="Sunny"        :inactive-icnotallow="Moon"        size="large"    /></template><script setup lang="ts">import {inject, Ref, computed} from 'vue';import {Sunny, Moon} from '@element-plus/icons-vue';const {theme, setTheme} = inject<{theme: Ref<string>, setTheme: (newTheme: string) => void}>('theme') || {};const isDark = computed(() => theme?.value === 'dark');const changeTheme = () => {    console.log(theme?.value)    if (theme?.value === 'light') {        setTheme?.('dark');    } else {        setTheme?.('light');    }};</script><style scoped></style>


Siz28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-100991-0.htmlVue3项目中实现主题切换真的很简单!!!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 线程池是什么?线程池与连接池有什么区别?线程池工作原理是什么?

下一篇: 超级加倍:互联网大厂的容灾架构设计与落地方案(跨机房部署、同城双活、异地多活)

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    8月5日消息,云存储服务商Backblaze发布了最新的硬盘故障率报告,年故障率有所上升。Backblaze发布的硬盘季度统计数据,其中包括故障率等重要方面。这些结
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 东方甄选单飞:有些鸟注定是关不住的

    文/彭宽鸿编辑/罗卿东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一年多时间里,东方甄选要脱离抖音自立门户的传闻不绝于耳,&ldquo;7
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
Top