当前位置: 首页 > news >正文

(简单有案例)前端实现主题切换、动态换肤的两种简单方式

目录

背景

(强烈推荐)实现方法1:CSS中原生变量“--”和var()

步骤1:定义css变量

 步骤2:使用CSS变量

步骤3:切换主题

实现完整案例

实现方法2:link 动态引入


背景

我们需要做一个功能,类似动态换肤这种功能。实现方式无非两种,一种是css变量、另一种是link动态引入

(强烈推荐)实现方法1:CSS中原生变量“--”和var()

步骤1:定义css变量

属性名:

  • 属性名必须使用 --开头
  • 在:root中定义(root后面的参数用来区分是哪个主题样式 :root[theme='主题名称']
  • 可以是数字、字母、下划线、中划线

属性值:

  • css普通属性可以用的,比如:数字、文本、带单位的长度、角度等等都可以作为属性值

注意点

  • 大小写敏感:大写 和 小写 不同 的2个属性名,将会是2个属性
  • 计算时有效性:自定义属性值可以是任何内容,甚至可能不是css的有效数值,但这并不影响定义,只要保证在使用css自定义属性的地方,最终的计算结果是有效的就可以了。

案例

 /* 默认主题 */:root {--color: yellow}/* 蓝色主题 */:root[theme='blue'] {--color: blue}/* 红色主题 */:root[theme='red'] {--color: red}

 步骤2:使用CSS变量

  • css提供了一个var()方法,进行自定义属性值的获取。可以在多个地方获取到自定义的属性值。
  • css也提供了calc()方法,进行数值的计算。它里面就可以通过var()使用自定属性的值进行计算。
:root {--size: 100px;
}div1 {width: var(--size);
}div2 {width: calc(var(--size) - 2px);
}

步骤3:切换主题

思路

切换html标签上的theme属性的值,来实现切换对应的主题。

theme属性的值为root后的参数 主题名称(:root[theme="主题名称"]),如果无theme,或者未匹配上对应的就使用,默认的root。

document.documentElement.setAttribute('theme', "要切换的主题名称")

实现完整案例

<!DOCTYPE html>
<html lang="en" theme="blue"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<style>/* 默认主题 */:root {--color: yellow}/* 蓝色主题 */:root[theme='blue'] {--color: blue}/* 红色主题 */:root[theme='red'] {--color: red}h1 {color: var(--color)}
</style><body><h1>点击我切换主题</h1>
</body>
<script>const data = document.getElementsByTagName('h1')data[0].onclick = () => {document.documentElement.setAttribute('theme', "red")}
</script></html>

实现方法2:link 动态引入

通过改变link 标签的 href 属性实现动态修改样式(暂不推荐这种方案)

优点:实现了按需加载,提高了性能;

缺点:动态加载样式文件,可能会因为网络问题导致样式加载过慢;

           可维护性较差,后续新增或修改主题较为麻烦。

相关文章:

(简单有案例)前端实现主题切换、动态换肤的两种简单方式

目录 背景 &#xff08;强烈推荐&#xff09;实现方法1&#xff1a;CSS中原生变量“--”和var() 步骤1&#xff1a;定义css变量 步骤2&#xff1a;使用CSS变量 步骤3&#xff1a;切换主题 实现完整案例 实现方法2&#xff1a;link 动态引入 背景 我们需要做一个功能&#…...

wyh的迷宫

涉及知识点&#xff1a;求迷宫能否到达终点的&#xff0c;而不是求路径数的&#xff0c;用bfs时可以不用重置状态数组&#xff08;回溯&#xff09;。 题目描述 给你一个n*m的迷宫&#xff0c;这个迷宫中有以下几个标识&#xff1a; s代表起点 t代表终点 x代表障碍物 .代…...

AWS云用户创建

问题 需要给工友创建AWS云的用户&#xff0c;这里假设使用分配给自己AWS开发者IAM账号&#xff0c;给别人创建aws IAM账号。 登录系统 打开页面&#xff1a;https://xxx.signin.aws.amazon.com/console&#xff0c;使用分配的开发者账号登录。如下图&#xff1a; 创建用户…...

微信小程序(三十七)选项点击高亮效果

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.选择性渲染类 2.以数字为需渲染内容&#xff08;数量&#xff09; 源码&#xff1a; index.wxml <view class"Area"><!-- {{activeNumindex?Active:}}是选择性添加类名进行渲染 -->&l…...

通过Demo学WPF—数据绑定(二)

准备 今天学习的Demo是Data Binding中的Linq&#xff1a; 创建一个空白解决方案&#xff0c;然后添加现有项目&#xff0c;选择Linq&#xff0c;解决方案如下所示&#xff1a; 查看这个Demo的效果&#xff1a; 开始学习这个Demo xaml部分 查看MainWindow.xaml&#xff1a; …...

数据湖的整体思路

湖本质上是一个集中化&#xff0c;中心化的&#xff0c;一体化的存储技术&#xff0c;并且在其之上追求技术架构的统一化&#xff0c;如流批一体&#xff0c;服务分析一体化。 当数据湖成为中心&#xff0c;那么就可以围湖而建“数据服务环”&#xff0c;环上的服务包括了数仓、…...

51单片机 跑马灯

#include <reg52.h>//毫秒级延时函数 void delay(int z) {int x,y;for(x z; x > 0; x--)for(y 114; y > 0 ; y--); }sbit LED1 P1^0x0; sbit LED2 P1^0x1; sbit LED3 P1^0x2; sbit LED4 P1^0x3; sbit LED5 P1^0x4; sbit LED6 P1^0x5; sbit LED7 P1^0x6; s…...

迎新年年终总结

迎新年年终总结 1、除夕迎新年登高有感 1、除夕迎新年登高有感 除旧岁&#xff0c;迎新年。凭栏立&#xff0c;意阑珊。 天空阔&#xff0c;世道艰。唯自强&#xff0c;可彼岸。 于2024年2月9日 10:51。...

一台服务器可以支持多少TCP连接

前言 ​ 在linux系统中一切皆文件&#xff0c;每当有一个tcp连接建立&#xff0c;那么就会打开一个文件描述符。在Linux系统中&#xff0c;文件描述符打开的个数是有限制的&#xff0c;当超过这个限制的时候内核就会跑出too many open files异常。 ​ linux上能打开的最大文件…...

svg基础(六)滤镜-图像,光照效果(漫反射,镜面反射),组合

1 feImage&#xff1a;图像滤镜 feImage 滤镜从外部来源取得图像数据&#xff0c;并提供像素数据作为输出&#xff08;意味着如果外部来源是一个 SVG 图像&#xff0c;这个图像将被栅格化。&#xff09; 1.1 用法: <feImage x"" y"" width"&quo…...

电脑数据误删如何恢复?9 个Windows 数据恢复方案

无论您是由于软件或硬件故障、网络犯罪还是意外删除而丢失数据&#xff0c;数据丢失都会带来压力和令人不快。 如今的企业通常将其重要数据存储在云或硬盘上。但在执行其中任何一项操作之前&#xff0c;您很有可能会丢失数据。 数据丢失的主要原因是意外删除&#xff0c;任何…...

【doghead】uv_loop_t的创建及线程执行

worker测试程序,类似mediasoup对uv的使用,是one loop per thread 。创建一个UVLoop 就可以创建一个uv_loop_t Transport 创建一个: 试验配置创建一个: UvLoop 封装了libuv的uv_loop_t ,作为共享指针提供 对uv_loop_t 创建并初始化...

云计算运营模式介绍

目录 一、云计算运营模式概述 1.1 概述 二、云计算服务角色 2.1 角色划分 2.1.1 云服务提供商 2.1.2 云服务消费者 2.1.3 云服务代理商 2.1.4 云计算审计员 2.1.5 云服务承运商 三、云计算责任模型 3.1 云计算服务模式与责任关系图 3.2 云计算服务模式与责任关系解析…...

物资捐赠管理系统

文章目录 物资捐赠管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;带走&#xff09; 物资捐赠管理系统 一、项目演示 爱心捐赠系统 二、项目介绍 基于springboot的爱心捐赠管理系统 开发语言&#xff1a…...

YOLOv8改进 | 检测头篇 | 独创RFAHead检测头超分辨率重构检测头(适用Pose、分割、目标检测)

一、本文介绍 本文给大家带来的改进机制是RFAHead,该检测头为我独家全网首发,本文主要利用将空间注意力机制与卷积操作相结合的卷积RFAConv来优化检测头,其核心在于优化卷积核的工作方式,特别是在处理感受野内的空间特征时。RFAConv主要的优点就是增加模型的特征提取能力,…...

私有化部署一个吃豆人小游戏

目录 效果 安装步骤 1.安装并启动httpd 2.下载代码 3.启动httpd 使用 效果 安装步骤 1.安装并启动httpd yum -y install httpd 2.下载代码 进入目录 cd /var/www/html/ 下载 git clone https://gitee.com/WangZhe168_admin/pacman-canvas.git 3.启动httpd syste…...

社区店经营管理新思路:提升业绩的秘诀

作为一名资深的鲜奶吧创业者&#xff0c;我深知在社区经营一家店铺所面临的挑战与机遇。经过5年的探索与实践&#xff0c;我总结出了一套提升社区店业绩的秘诀&#xff0c;今天就和大家分享一下。 一、明确目标客户群体&#xff0c;精准定位 在社区开店&#xff0c;首先要明确…...

统一数据格式返回,统一异常处理

目录 1.统一数据格式返回 2.统一异常处理 3.接口返回String类型问题 1.统一数据格式返回 添加ControllerAdvice注解实现ResponseBodyAdvice接口重写supports方法&#xff0c;beforeBodyWrite方法 /*** 统一数据格式返回的保底类 对于一些非对象的数据的再统一 即非对象的封…...

arm 平台安装snort3

本文来自原创,转载请说明来源。谢谢配合。 选择初衷 最近在学习渗透相关课程,回想起曾经拥有自己的域名和服务器的经历。不幸的是,服务器被注入了木马文件,起初并没有察觉。直到我加入了定时任务,才发现了这个问题。当时我下定决心要打造一个安全的网站,以保护自己的网…...

【Ubuntu 20.04/22.04 LTS】最新 esp-matter SDK 软件编译环境搭建步骤

仓库链接&#xff1a;esp-matter SDK官方软件说明&#xff1a;ESP Matter Programming Guide官方参考文档&#xff1a;使用 Matter-SDK 快速搭建 Matter 环境 (Linux) 环境要求 Ubuntu 20.04 或 Ubuntu22.04网络环境支持访问 Gihub 在安装 esp-matter SDK 软件编译环境之前&a…...

【磁盘】gdisk 实战:分区创建与删除的完整流程解析

1. 认识gdisk&#xff1a;你的磁盘分区利器 第一次接触磁盘分区工具时&#xff0c;我完全被各种专业术语搞晕了。直到遇到gdisk&#xff0c;才发现原来分区可以这么简单。gdisk是Linux环境下专门用于GPT分区表的交互式工具&#xff0c;相比传统的fdisk&#xff0c;它支持更大容…...

如何快速开发Kibana自定义React组件:面向开发者的完整指南

如何快速开发Kibana自定义React组件&#xff1a;面向开发者的完整指南 【免费下载链接】kibana Your window into the Elastic Stack 项目地址: https://gitcode.com/GitHub_Trending/ki/kibana Kibana作为Elastic Stack的核心数据可视化平台&#xff0c;其强大的插件架…...

SiameseUIE保姆级教程:3步部署nlp_structbert_siamese-uie_chinese-base

SiameseUIE保姆级教程&#xff1a;3步部署nlp_structbert_siamese-uie_chinese-base 信息抽取不再需要标注数据&#xff0c;一个模型搞定NER、关系抽取、事件抽取、情感分析四大任务 1. 什么是SiameseUIE&#xff1f;为什么值得一试 如果你正在处理中文文本信息抽取任务&#…...

实测AI净界抠图能力:发丝、玻璃杯、薄纱,复杂边缘处理全展示

实测AI净界抠图能力&#xff1a;发丝、玻璃杯、薄纱&#xff0c;复杂边缘处理全展示 1. 为什么我们需要更智能的抠图工具&#xff1f; 在日常工作和创作中&#xff0c;抠图是一个绕不开的环节。无论是电商产品图处理、平面设计还是AI训练数据准备&#xff0c;我们都希望快速获…...

Ansys - Fluent 在激光与电弧焊接增材领域的模拟探索

Ansys-Fluent激光电弧焊接增材数值模拟案例&#xff0c;激光焊接&#xff0c;激光增材&#xff0c;激光熔覆等&#xff0c;SLM Fluent模拟&#xff0c;内容包含 激光焊接熔池演变&#xff08;视频教程&#xff09; SLM激光熔池演变&#xff08;视频教程&#xff09; 激光熔覆单…...

BilibiliDown:专业B站Hi-Res音频下载工具全攻略

BilibiliDown&#xff1a;专业B站Hi-Res音频下载工具全攻略 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/Bili…...

OpenClaw主控Agent配置:任务分发、流程调度,打造专属SEO自动化团队

构建智能中枢&#xff1a;OpenClaw主控Agent的深度配置与SEO自动化团队实践引言在数字化营销日益激烈的今天&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已成为企业获取流量、提升品牌曝光不可或缺的策略。然而&#xff0c;传统的SEO操作往往涉及大量重复性、耗时耗力…...

Z-Image-GGUF完整教程:阿里通义文生图模型从安装到出图

Z-Image-GGUF完整教程&#xff1a;阿里通义文生图模型从安装到出图 你是不是也想过&#xff0c;要是能用几句话就让电脑画出你想象中的画面&#xff0c;那该多酷&#xff1f;比如&#xff0c;你想看“樱花树下的古寺&#xff0c;夕阳西下&#xff0c;电影感十足”&#xff0c;…...

正则表达式实战:精准校验日期时间格式的五大场景

1. 为什么我们需要校验日期时间格式&#xff1f; 在日常开发中&#xff0c;数据校验是最基础也最容易出问题的一环。就拿日期时间来说&#xff0c;你可能遇到过用户把"2023年2月30日"这种不存在的日期提交到系统&#xff0c;或者日志文件里的时间戳格式五花八门&…...

【STM32F407VET6开发】第二章 Keil 5环境配置与Pack Installer实战指南

1. Keil 5环境配置全流程解析 第一次接触STM32开发的朋友&#xff0c;安装完Keil 5后往往会遇到各种环境配置问题。我当年用STM32F407VET6做第一个项目时&#xff0c;光是让开发环境跑起来就折腾了两天。现在回头看&#xff0c;其实只要掌握几个关键步骤&#xff0c;整个过程可…...