前端换肤,聊一聊主题切换那些事

news2025/1/15 17:16:30

一些网站通常会提供白天、夜间模式,以及自定义主题等等,这种主题切换也就是本文说的前端换肤。
这次案例用的是白天和夜间模式的切换,在做换肤之前,得先知道一件事情:css的变量定义,对变量定义不熟悉的同学请看MDN文档:自定义属性(–*):CSS 变量

主题切换也就是样式的切换,白天和黑夜的模式切换需要准备两套样式,我们通过css的变量定义,全局访问这些公共变量就可以实现主题切换。
此处我已经准备好了样式:

/*style.css*/
/* 基本样式 */
:root {
  --theme-background: #ecf5ff; /*背景色*/
  --theme-menuBackground : #fff; /*菜单颜色*/
  --theme-menuIcon : #303133; /*菜单icon*/
}

/* 黑夜模式 */
html[theme-colors='dark'] {
  --theme-background: #1b1b1b;  /*背景色*/
  --theme-menuBackground : #343434; /*菜单颜色*/
  --theme-menuIcon : #cdcdcd; /*菜单icon*/
  --theme-activeColor : #97a1fe;
}
/* 白天 */
html[theme-colors='white'] {
  --theme-background: #ecf5ff; /*背景色*/
  --theme-menuBackground : #fff; /*菜单颜色*/
  --theme-menuIcon : #303133; /*菜单icon*/
  --theme-activeColor : #97a1fe;
}

默认情况用:root定义的样式,黑夜模式用dark,白天用white

公共样变量定义后,我们就可以到页面使用了,例如设置卡片的背景色:

.card {
  background: var(--theme-background); 
}

此时访问的是:root中的默认变量,我们需要做到根据按钮切换,访问不同主题下的变量

<!-- 换肤 -->
<el-switch
    v-model="theme"
    inline-prompt
    style="--el-switch-on-color: #13ce66; --el-switch-off-color: #97a0ff"
    :active-icon="Sunny"
    :inactive-icon="Moon"
    @change="themeChange"
/>
// 主题切换
const theme = ref<boolean>(true);
const themeChange = (val : boolean) => {
  // true白天 false夜晚
   if(val){
    document.querySelectorAll('html')[0].setAttribute('theme-colors','white')
   } else {
    document.querySelectorAll('html')[0].setAttribute('theme-colors','dark')
   }
}

setAttribute()设置指定元素上的某个属性值。如果属性已经存在,则更新该值;否则,使用指定的名称和值添加一个新的属性。如果要切换夜间模式,我们可以给html设置一个属性为theme-colors = dark,此时我们就可以访问html[theme-colors='dark']下的css变量了
,白天模式切换theme-colors = white即可。
在这里插入图片描述
在做项目之前我们可以考虑到这一点,否则后期页面都写好了再改会比较麻烦。如果用了前端框架的话,我们需要覆盖框架自带的样式,我们可以将覆盖的样式写成公共文件,全局引入或者在对应页面引入即可。


如果觉得这篇文章对你有帮助,欢迎点赞👍、收藏💖、转发✨哦~

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

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

相关文章

DINO损失函数构造解析

损失函数 首先看下模型的输出结果&#xff1a; output_cls&#xff1a;torch.Size([2, 900, 3]) output_box&#xff1a;torch.Size([2, 900, 4]) 即设置batch-size2&#xff0c;900个预测框 真值信息如下&#xff1a;第一张图片内有4个真值框&#xff0c;第二张图片亦然 随后…

面试官:前端如果 100 个请求,你怎么用 Promise 去控制并发?

摘要&#xff1a; 时隔两年半&#xff0c;我&#xff0c;一个卑微的前端菜鸡&#xff0c;又来写面经了&#xff01;以为钱是程序员年轻奋斗的动力&#xff01;作为一个程序员&#xff0c;在一个地方慢慢成长后会产生一个能力小提升的一种傲娇&#xff01;希望你们一跳涨好几丈。…

【问题总结】不使用回滚,如何删除/剔除/回退 远程仓库的错误commit。

场景描述 某次使用IDEA操作GIT时&#xff0c;将一些【被忽略】的文件都提交到commit中&#xff0c;并且被push到远程仓库&#xff0c;甚至还被合并到了主分支中该怎么办&#xff1f; 解决思路 分享两种思路 删除/回退/剔除 掉远程错误的分支重新commit一次正确的分支 删除…

企业落地数字化转型,如何部署战略规划

当前环境下&#xff0c;各领域企业通过数字化相关的一切技术&#xff0c;以数据为基础、以用户为核心&#xff0c;创建一种新的&#xff0c;或对现有商业模式进行重塑就是数字化转型。这种数字化转型给企业带来的效果就像是一次重构&#xff0c;会对企业的业务流程、思维文化、…

降低 Spark 计算成本 50.18 %,使用 Kyligence 湖仓引擎构建云原生大数据底座,为计算提速 2x

2023 中国开源未来发展峰会于 5 月 13 日成功举办。在大会开源原生商业分论坛&#xff0c;Kyligence 解决方案架构高级总监张小龙发表《云原生大数据底座演进 》主题演讲&#xff0c;向与会嘉宾介绍了他对开源发展的见解&#xff0c;数据底座向云原生湖仓一体架构演进的趋势&am…

建立在Safe生态的—GameFi SocialFi双赛道项目No.1头号玩家

最近大家关注的重点在BRC-20和MEME项目&#xff0c;人们似乎更在意短期的投机回报。而在这之外&#xff0c;一个web3的游戏——No.1头号玩家却得到了大量的玩家支持。 据了解&#xff0c;No.1是一个GameFi & SocialFi的双赛道web3游戏&#xff0c;中文名称为头号玩家。它是…

系统分析师上午题,经典易错题目

CRC即循环冗余校验码(Cyclic Redundancy Check)是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。在CRC校验方法中,进行多项式除法(模2除法)运算后的余数为校验字段。第一个空的分析,系统读记录的时间为33/11=3ms,对第一种情况:…

计算机毕业论文选题推荐|软件工程|系列七

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)的家政服务系统…

Android 打开webView黑屏闪烁问题排查

______ NO.1 ______ 前言 最近在研发项目的时候&#xff0c;有个模块调用webView功能&#xff1b; 点击搜索框&#xff0c;进入webView页面&#xff0c;出现了黑色过渡页面&#xff0c;效果如下&#xff1a; ______ NO.2 ______ 排查问题 个人在排查此问题的时候&#xff0c;用…

Redis缓存双写一致性之更新策略

Redis缓存双写一致性之更新策略 一 面试题引入二 缓存双写一致性三 双写双检加锁策略四 数据库和缓存一致性的集中更新策略4.1 最终一致性4.2 可以关机的情况下4.3 不能关机的情况下&#xff0c;四种更新策略4.3.1 先更新数据库&#xff0c;再更新缓存4.3.2 先更新缓存&#xf…

【算法学习系列】03 - 由[1-5]等概率随机实现[2-10]等概率随机

文章目录 约定条件说明解决方案构造 0 1 发生器函数 f2()计算需要几个二进制位验证 2-10 等概率返回某个整数 总结 约定条件说明 假定 f() 是一个函数&#xff0c;保证 [1, 5] 范围内等概率返回一个整数实现 2-10 等概率随机不能使用 Math.random() 函数&#xff0c;只能使用函…

栈与队列的性质互换

本期内容&#xff1a;栈&#xff0c;队列的定义性质&#xff0c;性质转换 栈&#xff0c;队列的定义性质&#xff0c;性质转换 认识栈实现栈 队列实现 性质转换 认识栈 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性表。限定仅在表尾进行插入和…

【渗透测试】web日志、linux命令、常用知识

文章目录 web日志分析基础知识1. 编码2. 解码工具3. 数据提交方式4. 常见脚本语言5. 日志还原 分析日志1. 分析日志的目的2. 攻击出现的位置3. 攻击常见的语句4. 攻击常见的特点5. 攻击日志分析流程 相关linux命令常用命令系统状态检测命令工作目录切换命令文本文件编辑命令文件…

BlueZ自动连接蓝牙耳机

问题&#xff1a;调好蓝牙之后&#xff0c;出现了一个客户问题&#xff0c;第一次连接好之后&#xff0c;开关机后没法自动连了。 解决方法&#xff1a; 针对这个情况&#xff0c;实际定位一下问题原因&#xff0c;原来是蓝牙耳机每次连时&#xff0c;都要求授权服务: Author…

sqlmap

1、Sqlmap简介&#xff1a; Sqlmap是一个开源的渗透测试工具&#xff0c;可以用来自动化的检测&#xff0c;利用SQL注入漏洞&#xff0c;获取数据库服务器的权限。它具有功能强大的检测引擎&#xff0c;针对各种不同类型数据库的渗透测试的功能选项&#xff0c;包括获取数据库…

Maven安装和配置(详细版)

Maven安装和配置 Maven安装1、安装链接&#xff1a;2、配置环境变量&#xff1a; Maven配置1、修改Maven仓库下载镜像及修改仓库位置&#xff1a;2、在Idea上配置Maven&#xff1a; 测试Maven安装能否安装jar包 Maven安装 1、安装链接&#xff1a; Maven – Download Apache …

使用A100 GPU搭建OBBDetection的运行环境

项目场景&#xff1a; 最近需要复现一篇目标检测论文的代码&#xff0c;文章提供了代码&#xff0c;因此自己根据仓库的说明尝试配置环境运行代码&#xff0c;但遇到了非常多的困难 问题描述 比较老的代码加上比较的GPU&#xff0c;导致了环境在配置的时候困难重重 OBBDetect…

xorm多表连接查询

SQL的连接查询可以将多个表的数据查询出来&#xff0c;形成一个中间表。在sql中为JOIN关键字。最常用的是LEFT JOIN,RIGHT JOIN,INNER JOIN,OUTER JOIN。 xorm框架是基于go语言的orm框架同样支持连接查询&#xff0c;由于xom及支持原生的sql查询也支持基于xorm的方法查询&…

openEuler用户软件仓(EUR)| 近期项目介绍

在操作系统的世界&#xff0c;软件包是一等公民&#xff0c;软件包的丰富程度和是否易于分发&#xff0c;一定程度上决定了操作系统用户和开发者的使用体验.。 EUR(openEuler User Repo)是openEuler社区针对开发者推出的个人软件包托管平台&#xff0c;目的在于为开发者提供一个…

【LeetCode训练营】用栈来实现队列+用队列来实现栈 详解

&#x1f4af; 博客内容&#xff1a;【LeetCode训练营】用栈来实现队列用队列来实现栈 详解 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; …