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

主题切换之根元素CSS自定义类

要实现CSS样式的主题切换,可以通过在HTML中添加一个按钮来触发JavaScript事件,进而通过JavaScript动态修改HTML元素的class或直接切换CSS文件,以达到改变页面整体风格的目的。以下是实现这一功能的步骤、原理及代码示例。

原理:

  1. HTML结构:提供一个用户界面元素(如按钮)来触发切换操作。
  2. CSS样式:定义两套样式,一套为默认主题,另一套为备用主题(比如夜间模式)。备用主题的样式通常通过类名(如.night-mode)来控制。
  3. JavaScript:编写逻辑来响应用户的切换请求,通过修改HTML元素的class或更改<link>标签的href属性来应用新的主题样式。

示例代码:

HTML (index.html)
html<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>主题切换示例</title><!-- 引入默认CSS样式 --><link rel="stylesheet" href="styles.css" id="themeStyles">
</head>
<body><header><h1>主题切换演示</h1></header><main><p>这是一个示例文本,用于展示主题切换效果。</p><button id="toggleTheme">切换主题</button></main><!-- 引入JavaScript文件 --><script src="script.js"></script>
</body>
</html>
CSS (styles.css)
css/* 默认主题样式 */
body {background-color: white;color: black;
}/* 夜间主题样式,通过类名控制 */
body.night-mode {background-color: #333;color: white;
}
JavaScript (script.js)
javascript// 获取切换主题按钮
const toggleButton = document.getElementById('toggleTheme');// 定义切换主题的函数
function toggleTheme() {// 获取当前文档的根元素,即bodyconst bodyElement = document.body;// 判断是否已应用夜间模式类名if (bodyElement.classList.contains('night-mode')) {// 如果已应用,移除它,恢复到默认主题bodyElement.classList.remove('night-mode');} else {// 如果未应用,添加夜间模式类名bodyElement.classList.add('night-mode');}
}// 绑定按钮点击事件
toggleButton.addEventListener('click', toggleTheme);

过程说明:

  1. 用户访问页面时,看到的是由styles.css定义的默认主题样式。
  2. 当用户点击“切换主题”按钮时,会触发toggleTheme函数。
  3. toggleTheme函数通过检查body元素是否具有.night-mode类来判断当前主题,并据此添加或移除该类,从而在默认主题和夜间主题之间切换。
  4. 由于CSS中已经定义了.night-mode类对应的样式,所以页面的外观会立即响应这些变化,实现主题的即时切换。
http://www.lryc.cn/news/372687.html

相关文章:

  • 如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
  • selenium execute_script常用方法汇总
  • 如何选择最佳的APP封装平台-小猪APP分发为您解忧
  • Linux基础 (十八):Libevent 库的安装与使用
  • 冒泡排序的详细介绍 , 以及c , python , Java的实现方法
  • 使用llama.cpp实现LLM大模型的格式转换、量化、推理、部署
  • 给你一个扫码支付的二维码,如何写测试用例?
  • 计算机专业在未来的发展与抉择
  • 【Linux】基础IO——文件描述符,重定向
  • 1.0 Android中Activity的基础知识
  • 线代知识点总结
  • 案例学习-存量更新规划实施探索(武汉)
  • C#操作MySQL从入门到精通(17)——使用联结
  • MyBatis 关于查询语句上配置的详细内容
  • 基于STM32和人工智能的智能家居监控系统
  • 这三款使用的视频、图片设计工具,提供工作效率
  • [Algorithm][贪心][最长递增子序列][递增的三元子序列][最长连续递增序列][买卖股票的最佳时机][买卖股票的最佳时机Ⅱ]详细讲解
  • 手把手教你入门vue+springboot开发(三)--登录功能后端
  • 三款有3D效果的js图表库
  • 【SQLAlChemy】表之间的关系,外键如何使用?
  • Linux 基础IO 二
  • 找工作小项目:day15-macOS支持、完善逻辑
  • 植物大战僵尸杂交版 v2.0.88 mac版 Plants vs. Zombies 杂交版下载
  • PHP中的while循环:用法、技巧与最佳实践
  • 如何解决跨境传输常见的安全及效率问题?
  • 『大模型笔记』主成分分析(PCA)解释:简化机器学习中的复杂数据!
  • springboot与flowable(5):任务分配(表达式)
  • 如何使用CCS9.3打开CCS3.0工程
  • Stable Diffusion 3 Medium 模型
  • 数据分析------统计学知识点(五)