Vue 实现主题切换(明暗)

项目地址:https://gitee.com/abcdfdewrw/vue3_xiaohongshu_project

效果展示:
在这里插入图片描述

步骤1:定义明暗scss样式

// 浅色模式
html[data-theme="light"]:root {
  --header-height: 72px;
  --color-border-bottom: #eef2f9;
  --color-primary-label: #333;
  --color-secondary-label: rgba(51, 51, 51, 0.8);
  --color-tertiary-label: rgba(51, 51, 51, 0.6);
  --color-quaternary-label: rgba(51, 51, 51, 0.3);
  --color-link: #13386c;
  --color-inverted-label: #fff;
  --color-background: #fff;
  --color-active-background: rgba(0, 0, 0, 0.03);
  --color-border: rgba(0, 0, 0, 0.08);
  --color-shadow-border: rgba(0, 0, 0, 0.02);
  --elevation-low-background: #fff;
  --elevation-high-background: #fff;
  --elevation-note-background: #fff;
  --elevation-low-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.04),
    0 1px 2px 0 rgba(0, 0, 0, 0.02);
  --elevation-high-shadow: 0 4px 32px 0 rgba(0, 0, 0, 0.08),
    0 1px 4px 0 rgba(0, 0, 0, 0.04);
  --elevation-note-shadow: 0 8px 64px 0 rgba(0, 0, 0, 0.04),
    0 1px 4px 0 rgba(0, 0, 0, 0.02);
  --elevation-low-shadow-filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.04))
    drop-shadow(0 1px 2px rgba(0, 0, 0, 0.02));
  --elevation-high-shadow-filter: drop-shadow(0 4px 32px rgba(0, 0, 0, 0.08))
    drop-shadow(0 1px 4px rgba(0, 0, 0, 0.04));
  --material-filter: saturate(150%) blur(10px);
  --material-background: rgba(64, 64, 64, 0.25);
  --material-inverted-background: rgba(51, 51, 51, 0.9);
  --mask-backdrop: rgba(0, 0, 0, 0.25);
  --mask-note-card: rgba(0, 0, 0, 0.25);
  --mask-paper: rgba(255, 255, 255, 0.98);
  --color-white: #fff;
  --color-red: #ff2442;
  --color-tinted-red: rgba(255, 36, 66, 0.06);
  --color-blue: #3d8af5;
  --color-tinted-blue: rgba(61, 138, 245, 0.1);
  --mask-video-player-mask: linear-gradient(
    180deg,
    rgba(0, 0, 0, 0.25) 0%,
    rgba(0, 0, 0, 0) 24.48%,
    rgba(0, 0, 0, 0) 50%,
    rgba(0, 0, 0, 0.75) 100%
  );
  --search-hotspot-hint: linear-gradient(90deg, #ff2543 0%, #ff5225 100%);
  --color-vertical-channel: #fff9d5;
}

// 深色模式
html[data-theme="dark"]:root {
  --header-height: 72px;
  --color-primary-label: #fff;
  --color-secondary-label: rgba(255, 255, 255, 0.8);
  --color-tertiary-label: rgba(255, 255, 255, 0.6);
  --color-quaternary-label: rgba(255, 255, 255, 0.3);
  --color-link: #c7daef;
  --color-inverted-label: #0a0a0a;
  --color-background: #0a0a0a;
  --color-active-background: rgba(255, 255, 255, 0.04);
  --color-border: rgba(255, 255, 255, 0.08);
  --color-shadow-border: rgba(255, 255, 255, 0.02);
  --elevation-low-background: #121212;
  --elevation-high-background: #181818;
  --elevation-note-background: #121212;
  --elevation-low-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.04),
    0 1px 2px 0 rgba(0, 0, 0, 0.02), 0 0 0 1px rgba(255, 255, 255, 0.04) inset;
  --elevation-high-shadow: 0 4px 32px 0 rgba(0, 0, 0, 0.08),
    0 1px 4px 0 rgba(0, 0, 0, 0.04), 0 0 0 1px rgba(255, 255, 255, 0.06) inset;
  --elevation-note-shadow: 0 8px 64px 0 rgba(0, 0, 0, 0.04),
    0 1px 4px 0 rgba(0, 0, 0, 0.02);
  --elevation-low-shadow-filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.04))
    drop-shadow(0 1px 2px rgba(0, 0, 0, 0.02))
    drop-shadow(0 0 1px rgba(255, 255, 255, 0.04));
  --elevation-high-shadow-filter: drop-shadow(0 4px 32px rgba(0, 0, 0, 0.08))
    drop-shadow(0 1px 4px rgba(0, 0, 0, 0.04))
    drop-shadow(0 0 1px rgba(255, 255, 255, 0.06));
  --material-filter: saturate(150%) blur(10px);
  --material-background: rgba(64, 64, 64, 0.25);
  --material-inverted-background: rgba(255, 255, 255, 0.9);
  --mask-backdrop: rgba(0, 0, 0, 0.5);
  --mask-note-card: rgba(0, 0, 0, 0.25);
  --mask-paper: rgba(10, 10, 10, 0.98);
  --color-white: #fff;
  --color-red: #ff2e4d;
  --color-tinted-red: rgba(255, 46, 77, 0.06);
  --color-blue: #3d8af5;
  --color-tinted-blue: rgba(61, 138, 245, 0.1);
  --mask-video-player-mask: linear-gradient(
    180deg,
    rgba(0, 0, 0, 0.25) 0%,
    rgba(0, 0, 0, 0) 24.48%,
    rgba(0, 0, 0, 0) 50%,
    rgba(0, 0, 0, 0.75) 100%
  );
  --search-hotspot-hint: linear-gradient(90deg, #ff2543 0%, #ff5225 100%);
  --color-vertical-channel: #181714;
}

所有页面就需要使用你定义的这些scss变量
在这里插入图片描述

步骤2:切换主题调用方法

// 主要代码
export const useTheme = (model = "light") => {
  window.document.documentElement.setAttribute("data-theme", model);
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rabbitmq五种模式的总结——附java-se实现(详细)

rabbitmq五种模式的总结 完整项目地址:https://github.com/9lucifer/rabbitmq4j-learning 一、简单模式 (一)简单模式概述 RabbitMQ 的简单模式是最基础的消息队列模式,包含以下两个角色: 生产者:负责发…

数据结构 day02

3. 线性表 3.1. 顺序表 3.1.3. 顺序表编程实现 操作:增删改查 .h 文件 #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #define N 10 typedef struct seqlist {int data[N];int last; //代表数组中最后一个有效元素的下标 } seqlist_t;//1.创建一个空的顺序表 seq…

STM32的HAL库开发---ADC

一、ADC简介 1、ADC,全称:Analog-to-Digital Converter,指模拟/数字转换器 把一些传感器的物理量转换成电压,使用ADC采集电压,然后转换成数字量,经过单片机处理,进行控制和显示。 2、常见的AD…

25/2/16 <算法笔记> DirectPose

DirectPose 是一种直接从图像中预测物体的 6DoF(位姿:6 Degrees of Freedom)姿态 的方法,包括平移和平面旋转。它在目标检测、机器人视觉、增强现实(AR)和自动驾驶等领域中具有广泛应用。相比于传统的位姿估…

企业级API集成方案:基于阿里云函数计算调用DeepSeek全解析

解决方案链接:https://www.aliyun.com/solution/tech-solution/deepseek-r1-for-platforms?utm_contentg_1000401616 何为DeepSeek R1 DeepSeek R1模型有诸多技术优势。高效架构设计使其能更高效提取特征,减少冗余计算,提升数据处理速度、…

137,【4】 buuctf web [SCTF2019]Flag Shop

进入靶场 都点击看看 发现点击work会增加¥ 但肯定不能一直点下去 抓包看看 这看起来是一个 JWT(JSON Web Token)字符串。JWT 通常由三部分组成,通过点(.)分隔,分别是头部(Header&…

ThinkPHP8视图赋值与渲染

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 在控制器操作中,使用view函数可以传入视图…

渗透利器:YAKIT 工具-基础实战教程.

YAKIT 工具-基础实战教程. YAKIT(Yak Integrated Toolkit)是一款基于Yak语言开发的集成化网络安全单兵工具,旨在覆盖渗透测试全流程,提供从信息收集、漏洞扫描到攻击实施的自动化支持。其核心目标是通过GUI界面降低Yak语言的使用…

Fiori APP配置中的Semantic object 小bug

在配置自开发程序的Fiori Tile时,需要填入Semantic Object。正常来说,是需要通过事务代码/N/UI2/SEMOBJ来提前新建的。 但是在S4 2022中,似乎存在一个bug,即无需新建也能输入自定义的Semantic Object。 如下,当我们任…

shell——分支语句

文章目录 基本语法常用判断条件(1)两个整数之间比较(2)按照文件权限进行判断(3)按照文件类型进行判断(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令&#xf…

Ubuntu 连接 air pods

1. sudo vim /etc/bluetooth/main.conf , 修改蓝牙模式为blder 2.sudo /etc/init.d/bluetooth restart, 重启蓝牙,即可连接成功

机器学习:k近邻

所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com),欢迎查看。 K 邻近算法(K-Nearest Neighbors,简称 KNN)是一种经典的机器学习算法,主要用于分类和回归任务…

低空经济:开启未来空中生活的全新蓝海

引言 随着科技的进步,我们不再仅仅依赖地面交通和传统物流。你是否曾幻想过,未来的某一天,快递、外卖可以像魔法一样直接从空中送到你手中?或者,你能乘坐小型飞行器,快速穿梭于城市之间,告别拥堵…

DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列一DeepSeek核心算法解析:如何…

苍穹外卖day4 redis相关简单知识 店铺营业状态设置

内存存储 键值对 key-value 一般用于处理突发性大量请求数据操作(暂时浅显理解) 读写速度极快,常用于缓存数据,减少对数据库的访问压力,提高系统性能。例如,可以缓存用户会话、商品信息、页面数据 设置默…

API 接口自动化

HTTP协议 - 白月黑羽 HTTP协议简介 如果客户端是浏览器,如何在chrome浏览器中查看 请求和响应的HTTP消息?按f12-》network 清除当前信息 响应的消息体在Response里看 点preview,可以看响应的消息体展开的格式 HTTP请求消息 请求头 reques…

Oracle序列(基础操作)

序列概念 序列是用于生成唯一、连续序号的对象。 序列可以是升序的,也可以是降序的。 使用CREATE SEQUENCE语句创建序列。 start with 1 指定第一个序号从1开始 increment by 1 指定序号之间的间隔为1 increment by -1 降序1000 999 998这样 maxvalue 2000 表…

【pytorch】weight_norm和spectral_norm

apply_parametrization_norm 和spectral_norm是 PyTorch 中用于对模型参数进行规范化的方法,但它们在实现和使用上有显著的区别。以下是它们的主要区别和对比: 实现方式 weight_norm: weight_norm 是一种参数重参数化技术,将权…

unity学习44:学习Animator 的一个动作捕捉网站,实测好用

目录 1 动作捕捉网站 2 注册和下载 3 比如首页的内容,可以直接下载为fbx模型文件 4 上传并修改 5 在 unity里使用 5.1 下载的fbx文件直接拖入到unity 5.2 动画修改 5.3 游戏里播放 1 动作捕捉网站 一个动作捕捉网站 AI神器集合网站 千面视频动捕 | AI神器…

云原生(五十五) | ECS中自建数据库迁移到RDS

文章目录 ECS中自建数据库迁移到RDS 一、场景说明 二、ECS中自建数据库迁移到RDS实现步骤 三、 创建wordpress数据库 四、登录ECS导出wordpress数据库 五、返回RDS数据库管理控制台 六、开启外网地址并设置白名单 七、获取RDS外网访问地址 八、重新设置wordpress的wp-…