vue 切换主题色切换主题色切换主题色切换主题色切换主题色

news2024/11/16 3:19:10

第一种:使用CSS变量

CSS变量(Custom Properties)是CSS的一种新特性

1.实现需求:自定义颜色

在这里插入图片描述

  1. 定义变量
    全局的theme.css
:root {
    --primary-color:red;
}
  1. 在组件中使用这些变量
    demo.vue
<template>
  <div class="main">
    <!-- 修改主题色 -->
    <div class="router-header">
      <span>主题色</span>
      <el-color-picker v-model="theme"></el-color-picker>
    </div>
  </div>
</template>
<script >
export default {
  data() {
    return {
      theme: "#409EFF",
    };
  },
  watch: {
    //监听颜色变化,赋值修改主题色
    theme(val) {
      // let root = document.querySelector(":root");
      // root.style.setProperty("--primary-color", val);
      //或者下面直接修改也可以
      document.documentElement.style.setProperty("--primary-color", val);
    },
  },
};
</script>
<style lang='less'>
.main {
	//css中使用主题色
  background: var(--primary-color);
}
</style>

2.实现需求:切换深浅主题色

在这里插入图片描述

  • theme.css
:root[theme="light"] {
    --primary-color:rgb(76, 34, 228);
}
:root[theme="dark"] {
    --primary-color: rgb(242, 86, 8);
}
  
  • main.js中引入theme.css
import './pages/theme.css'
  • vue中使用
<template>
  <div class="main">
    <!-- 修改主题色 -->
    <div class="router-header">
      <span>主题色</span>
      <el-switch
        v-model="isDarkTheme"
        active-text="深色皮肤"
        inactive-text="浅色皮肤"
      >
      </el-switch>
    </div>
  </div>
</template>
<script >
export default {
  data() {
    return {
      isDarkTheme: true,
    };
  },
  watch: {
    isDarkTheme(val) {
      // 切颜色
      window.document.documentElement.setAttribute(
        "theme",
        this.isDarkTheme ? "dark" : "light"
      );
    },
  },
};
</script>
<style lang='less'>
.main {
  background: var(--primary-color);
}
</style>

3.优缺点分析

  1. 优点:
  • 简单易用:CSS变量使用和更改都很方便。
  • 性能高效:只需更改变量值,无需重新加载样式表。
  • 兼容性好:适用于各种CSS预处理器,如Sass、Less等。
  1. 缺点:
  • 浏览器兼容性:旧版浏览器(如IE)不支持CSS变量。
  • 维护成本:对于大型项目,需要维护大量的变量,可能导致变量命名冲突和管理困难。

第二种:引入不同的CSS文件实现主题切换

在这里插入图片描述

1.实现步骤

深色主题和浅色主题,根据变量标识,切换最顶层类名

<template>
  <div class="main" :class="isDarkTheme ? 'dark-theme' : 'light-theme'">
    <!-- 修改主题色 -->
    <div class="router-header">
      <span>主题色</span>
      <el-switch
        v-model="isDarkTheme"
        active-text="深色皮肤"
        inactive-text="浅色皮肤"
      >
      </el-switch>
    </div>
  </div>
</template>
<script >
export default {
  data() {
    return {
      isDarkTheme: true,
    };
  },
};
</script>
<style lang='less'>
.main {
  //所有的深色主题的样式都写这儿
  &.dark-theme {
    background: #caeae8;
  }
  //所有的浅色主题的样式都写这儿
  &.light-theme {
    background: pink;
  }
}
</style>

2.优缺点分析

  1. 优点:
  • 实现简单:只需切换样式文件,不需要复杂的逻辑。
  • 适应性广:适用于所有前端框架和纯HTML项目。
  1. 缺点:
  • 性能开销:每次切换都需要重新加载CSS文件,可能导致页面闪烁。
  • 维护成本:需要维护多套完整的CSS文件,代码重复度高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1912091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024.7.9作业

1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include <stdio.h> #include <string.h> int main(int argc,const char *argv[]) { char arr[30]{0}; int zm0,kg0,sz0,qt0; printf("请输入字符串&…

Python基础-成年人判断(if条件语句联系)

注意输入的年龄需要转化为字符串 代码&#xff1a; print("欢迎来到游乐场&#xff1a;儿童免费&#xff0c;成人收费") age int(input("请输入你的年龄:")) if age>18:print("你已经成年&#xff0c;需要补票10元") # 四个空格缩进print…

P8306 【模板】字典树

题目描述 给定 n 个模式串 s1​,s2​,…,sn​ 和 q 次询问&#xff0c;每次询问给定一个文本串 ti​&#xff0c;请回答 s1​∼sn​ 中有多少个字符串 sj​ 满足 ti​ 是 sj​ 的前缀。 一个字符串 t 是 s 的前缀当且仅当从 s 的末尾删去若干个&#xff08;可以为 0 个&#…

【Python的pip配置、程序运行、生成exe文件】

Python的pip配置、程序运行、生成exe文件 一、安装Python 通过官网下载对应的版本&#xff0c;安装即可。 下载地址&#xff1a;https://www.python.org/downloads/ Python标准库查看&#xff08;Python自带库&#xff09; Python 标准库文档 安装Python的时候&#xff0c…

【自学网络安全】:安全策略与用户认证综合实验

实验拓扑图&#xff1a; 实验任务&#xff1a; 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00-18:00)可以访问&#xff0c;生产区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设备10.0.2.10不允许访问Dmz区…

suricata7 rule加载(三)加载options

suricata7.0.5 加载options (msg:“HTTP Request Example”; flow:established,to_server; http.method; content:“POST”; http.uri; content:“query.php”; bsize:>9; http.protocol; content:“HTTP/1.1”; bsize:8; http.host; content:“360”; bsize:>3; class…

HI3559AV100四路IMX334非融合拼接8K视频记录

下班无事&#xff0c;写篇博客记录海思hi3559av100四路4K视频采集拼接输出8K视频Demo 一、准备工作&#xff1a; 软件&#xff1a;Win11系统、VMware虚拟机Ubuntu14、Hitool、Xshell等 硬件&#xff1a;HI3559AV100开发板4路imx334摄像头、串口线、电源等 附硬件图&#xff1…

射频硅基氮化镓:两个世界的最佳选择

当世界继续努力追求更高速的连接&#xff0c;并要求低延迟和高可靠性时&#xff0c;信息通信技术的能耗继续飙升。这些市场需求不仅将5G带到许多关键应用上&#xff0c;还对能源效率和性能提出了限制。5G网络性能目标对基础半导体器件提出了一系列新的要求&#xff0c;增加了对…

硕博电子移动控制器在无人驾驶卡车上的应用

传统港口行业一直是一个典型的劳动密集型行业&#xff0c;以前&#xff0c;集装箱的每次起吊操作需要多人配合&#xff0c;包括操作员、指挥手、理货员等至少7名现场工作人员。传统码头设施陈旧&#xff0c;重型设备难以更新换代。而且&#xff0c;港口还经常受到天气状况的影响…

AI自动生成PPT怎么用?5种提升演示效果的方法

随着#7月份我的同事一个个消失了#的话题热议&#xff0c;职场中的效率与变革再次成为焦点。 在忙碌的工作节奏中&#xff0c;AI自动生成PPT的软件悄然兴起&#xff0c;成为不少职场人的新宠。它们不仅简化了繁琐的PPT制作流程&#xff0c;更以高效、专业的姿态&#xff0c;助力…

Msfvenom制作自己的专属Shell

Msfvenom制作自己的专属Shell 如何通过Msfvenom来生成用户自己的专属Shell?有时候我们上传Shell到目标主机后&#xff0c;不仅我们自己可以连接&#xff0c;其他用户也可以连接&#xff0c;有时候会导致我们丢失该Shell&#xff0c;甚至该shell被用户发现并查杀。 实验环境 …

差分+前缀和习题集

&#xff08;luogu题号&#xff09; P6568 [NOI Online #3 提高组] 水壶 思路分析 前缀和优化问题。 其实题意就是让你求有k1个数的区间和最大值&#xff0c;那么直接前缀和优化&#xff0c;就可以通过本题。 代码 #include<bits/stdc.h> using namespace std;const in…

鸿蒙语言基础类库:【@ohos.util.Deque (线性容器Deque)】

线性容器Deque 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 Deque&#xff08;double ended queue&#xff09;根据循环队列的数据结构实现&#xff0c;符合先进先出以及先进后出的特点&…

【电脑应用技巧】如何寻找电脑应用的安装包华为电脑、平板和手机资源交换

电脑的初学者可能会直接用【百度】搜索电脑应用程序的安装包&#xff0c;但是这样找到的电脑应用程序安装包经常会被加入木马或者强制捆绑一些不需要的应用装入电脑。 今天告诉大家一个得到干净电脑应用程序安装包的方法&#xff0c;就是用【联想的应用商店】。联想电脑我是一点…

接口测试(2)

单接口测试 CtrlD 复制 因为单接口的时候主要改变测试用例数据 自动判定响应结果 postman断言 //断言响应状态码为200 pm.test("Status code is 200", function () {pm.response.to.have.status(200); }); //断言返回数据中包括&#xff08;成功&#xff09; //预期结…

深度学习的数学PDF

链接: https://pan.baidu.com/s/1_jScZ7dcyAWGqbrad6bbCQ?pwd9gj9 提取码: 9gj9 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦

探讨3D沉浸式在线会议系统的研发 - Meta演示的元宇宙虚拟化身多人对话场景,Web端现在也可以实现了 !

要实现一个元宇宙多人会议系统&#xff0c;关键技术有&#xff1a; 1. 3D虚拟空间的构建&#xff08;含光影特效、虚拟现实和增强现实&#xff09; 2. 3D虚拟化身的构建&#xff08;含动画、表情、语音&#xff09; 3. 多人角色管理 4. 会话控制和信息同步 5. 语音合成 6…

展开说说:Android服务之实现AIDL跨应用通信

前面几篇总结了Service的使用和源码执行流程&#xff0c;这里再简单分析一下如果需要Service跨进程通信该怎样做。AIDL&#xff08;Android Interface Definition Language&#xff09;Android接口定义语言&#xff0c;用于实现 Android 两个进程之间进行进程间通信&#xff08…

低资源低成本评估大型语言模型(LLMs)

随着新的大型语言模型&#xff08;LLMs&#xff09;的持续发展&#xff0c;从业者发现自己面临着众多选择&#xff0c;需要从数百个可用选项中选择出最适合其特定需求的模型、提示[40]或超参数。例如&#xff0c;Chatbot Arena基准测试平台积极维护着近100个模型&#xff0c;以…

PID控制与模糊PID控制的比较

一、PID控制器的设计 1.PID控制原理图&#xff1a; PID控制其结构框图如下图所示&#xff1a; 图1&#xff1a;PID控制器结构框图 2.PID控制器传递函数的一般表达式 PID控制器传递函数的一般表达形式为&#xff1a; 其中kp为比例增益&#xff1b;ki为积分增益&#xff1b;k…