当前位置: 首页 > 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)时结合组件化设计进行封装;

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

相关文章:

  • VisionPro_连接相机
  • labview实现LED流水灯的第二种方法
  • 机器人坐标系标定
  • spring boot 实现resp视频推流
  • 数据结构:绪论之时间复杂度与空间复杂度
  • OceanBase数据库全面指南(函数篇)函数速查表
  • 基于cornerstone3D的dicom影像浏览器 第二十一章 显示DICOM TAGS
  • 先更新数据库,再删除缓存的cache aside策略
  • 性能测试、压力测试、负载测试如何区分
  • 工业 / 农业 / AR 场景怎么选?Stereolabs ZED 双目3D相机型号对比与选型建议
  • 【Django Serializer】一篇文章详解 Django 序列化器
  • WooCommerce缓存教程 – 如何防止缓存破坏你的WooCommerce网站?
  • [免费]微信小程序宠物医院管理系统(uni-app+SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 初步尝试AI应用开发平台——Dify的本地部署和应用开发
  • 优化 CRM 架构,解锁企业竞争力密码
  • 【开源解析】基于深度学习的双色球预测系统:从数据获取到可视化分析
  • Redisson分布式锁案列和源码解读
  • labview设计一个虚拟信号发生器
  • 大模型应用开发之Dify进阶版使用教程—react前端+django后端+dify-API制作聊天界面
  • 了解Android studio 初学者零基础推荐(2)
  • 微信开放品牌/网站建设seo
  • 自适应网站一般做多大尺寸/国内重大新闻十条
  • 科技网站建设分析/市场营销渠道
  • 东莞虎门建设网站寻找/搜索排名查询
  • 教做游戏的网站/百度一下主页官网
  • 深圳做高端企业网站建设公司/市场运营和市场营销的区别