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

html主题切换小demo

主题切换功能为网页和应用程序提供了多样化的视觉风格与使用体验。实现多主题切换的技术方案丰富多样,其中 CSS 变量和 JavaScript 样式控制是较为常见的实现方式。

以下是一个简洁的多主题切换示例,愿它能为您的编程之旅增添一份趣味。

代码展示

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>多主题切换 Demo</title><style>:root {--bg-color: #ffffff;--text-color: #000000;}body {background-color: var(--bg-color);color: var(--text-color);font-family: sans-serif; /* 字体 */text-align: center; /* 居中对齐 */transition: background-color 0.3s, color 0.3s; /* 过渡效果 */padding-top: 100px; /* 顶部内边距 */}.dark-theme { /* 暗黑主题 */--bg-color: #121212;  /* 背景色 */--text-color: #eeeeee; /* 文字色 */}.blue-theme { /* 蓝色主题 */--bg-color: #e3f2fd;--text-color: #1565c0;}.green-theme { /* 绿色主题 */--bg-color: #e8f5e9;--text-color: #2e7d32;}.red-theme { --bg-color: #ffebee; --text-color: #c62828; }.purple-theme { --bg-color: #f3e5f5; --text-color: #6a1b9a; }.orange-theme { --bg-color: #fff3e0; --text-color: #ef6c00; }.gray-theme { --bg-color: #f5f5f5; --text-color: #424242; }select, button {padding: 10px 20px;font-size: 16px;margin-top: 20px;cursor: pointer;}</style>
</head>
<body><h1>选择主题</h1><p>这是个主题是 <span id="currentTheme">默认</span></p><select id="themeSelector" onchange="changeTheme()"><option value="">默认</option><option value="dark-theme">暗黑</option><option value="blue-theme">蓝色</option><option value="green-theme">绿色</option><option value="red-theme">红色</option><option value="purple-theme">紫色</option><option value="orange-theme">橙色</option><option value="gray-theme">灰色</option></select><script>function changeTheme() {const theme = document.getElementById('themeSelector').value;document.body.className = theme;const themeName = theme ? theme.split('-')[0] : '默认';document.getElementById('currentTheme').textContent = themeName;}</script>
</body>
</html>

效果展示

实现原理解析

该 demo 的核心思想是通过 CSS标签引入不同的样式,并使用 JavaScript 修改其 href 属性,从而实现动态更换主题的功能。这种方式简单直观,适用于中小型项目或学习用途。

扩展建议

如果你希望进一步优化这个功能,可以考虑以下几点:

  • 使用 localStorage 记住用户选择的主题;

  • 使用 CSS 变量搭配类名控制,减少重复代码;

  • 使用框架(如 Vue/React)时结合组件化设计进行封装;

  • 添加动画过渡效果,提升用户体验。

http://www.xdnf.cn/news/590059.html

相关文章:

  • Oracle 中 SHRINK 与 MOVE 操作的比较
  • NR 通讯的整体架构
  • PyTorch可视化工具——使用Visdom进行深度学习可视化
  • Jetson:aarch64平台编译onnxruntime使用GPU
  • 【GESP】C++三级真题 luogu-B4038 [GESP202409 三级] 平衡序列
  • Flask 路由跳转机制:url_for生成动态URL、redirect页面重定向
  • 基于 ZU49DR FPGA 的无线电射频数据采样转换开发平台核心板
  • Docker-Mysql
  • LLaMA-Factory微调LLM-Research/Llama-3.2-3B-Instruct模型
  • 基于多目标优化的样本调度适应度函数设计
  • 7.1.查找的基本概念
  • 高等数学-无穷级数
  • Unity飞机大战-射击类游戏3D虚拟
  • Athena 执行引擎:在线服务计算的效率王者
  • pandas :从入门到进阶的系统实践笔记
  • 错误: gdalbuildvrt 命令未找到————的问题
  • 数字孪生驱动的离散制造智能升级:架构设计与工程实践
  • C++:关联式容器map容器,multimap容器
  • ssrf漏洞学习
  • 并发编程:各种锁机制、锁区别、并发工具类深刻总结
  • 关于标准盒模型和怪异盒模型
  • python正方形面积 2024年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析
  • 数据分析师如何用OKR驱动业务增长
  • 钉钉通讯录与金蝶云星空无缝集成的技术实现方法
  • AI时代的操作系统:VAST如何重塑基础设施新标准?
  • SenseGlove Nova2 力反馈数据手套:助力外科手术训练的精准触觉模拟
  • 海外 APP 开发的全方位指南:从技术架构到市场进入的综合策略
  • 2023CCPC东北四省赛题解
  • 关于 Burp Suite 详解
  • 一键安装docker