news 2026/10/9 16:02:18

Vue—— Vue3 + Node.js 后台管理系统 之 【主题系统动态应用】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue—— Vue3 + Node.js 后台管理系统 之 【主题系统动态应用】

背景问题

现代应用需要支持主题切换,包括浅色、深色等多种主题,需要动态调整样式。

方案思考

  • 如何使用CSS变量实现主题切换
  • 如何持久化主题设置
  • 如何优化主题切换性能

具体实现

CSS变量主题:

// style/theme.scss - 主题样式系统 // 默认主题样式 :root { --primary-color: #409eff; --primary-light-1: #53a8ff; --primary-light-2: #66b1ff; --primary-light-3: #79bbff; --primary-light-4: #8cc5ff; --primary-light-5: #a0d2ff; --primary-light-6: #b3dffb; --primary-light-7: #c6e7ff; --primary-light-8: #d9f0ff; --primary-light-9: #ecf7ff; --bg-color: #ffffff; --text-color: #303133; --border-color: #dcdfe6; } // 深色主题样式 html.dark { --primary-color: #337ecc; --primary-light-1: #428bda; --primary-light-2: #519ce8; --primary-light-3: #60aef6; --primary-light-4: #70c2ff; --primary-light-5: #8ed0ff; --primary-light-6: #abe0ff; --primary-light-7: #c9eeff; --primary-light-8: #e6f8ff; --primary-light-9: #f2fbff; --bg-color: #1d1e1f; --text-color: #e4e7ed; --border-color: #4c4d4f; } // 使用主题变量的组件样式 .app-container { background-color: var(--bg-color); color: var(--text-color); border: 1px solid var(--border-color); .primary-button { background-color: var(--primary-color); color: white; &:hover { background-color: var(--primary-light-1); } } }

动态主题应用:

// utils/dynamicTheme.ts - 动态主题应用import{ref,watchEffect}from'vue';// 主题配置interfaceThemeConfig{primaryColor:string;backgroundColor:string;textColor:string;borderColor:string;borderRadius:string;}// 预设主题constpresetThemes:Record<string,ThemeConfig>={light:{primaryColor:'#409eff',backgroundColor:'#ffffff',textColor:'#303133',borderColor:'#dcdfe6',borderRadius:'4px'},dark:{primaryColor:'#337ecc',backgroundColor:'#1d1e1f',textColor:'#e4e7ed',borderColor:'#4c4d4f',borderRadius:'4px'},blue:{primaryColor:'#1890ff',backgroundColor:'#f0f8ff',textColor:'#001529',borderColor:'#91d5ff',borderRadius:'6px'}};// 动态主题应用exportfunctionuseDynamicTheme(){constcurrentTheme=ref('light');// 应用主题constapplyTheme=(themeName:string)=>{consttheme=presetThemes[themeName];if(!theme)return;constroot=document.documentElement;Object.entries(theme).forEach(([key,value])=>{root.style.setProperty(`--${key}`,value);});// 添加主题类名root.className=root.className.replace(/\btheme-\w+\b/g,'');root.classList.add(`theme-${themeName}`);};// 监听主题变化watchEffect(()=>{applyTheme(currentTheme.value);});// 切换主题constswitchTheme=(themeName:string)=>{currentTheme.value=themeName;localStorage.setItem('theme',themeName);};// 获取当前主题constgetCurrentTheme=()=>{returncurrentTheme.value;};// 初始化主题constinitTheme=()=>{constsavedTheme=localStorage.getItem('theme');if(savedTheme&&presetThemes[savedTheme]){currentTheme.value=savedTheme;}};return{currentTheme,switchTheme,getCurrentTheme,initTheme};}

效果验证

通过CSS变量和JavaScript结合,可以实现流畅的主题切换效果。

经验总结

主题系统不仅要考虑视觉效果,还要考虑性能和用户体验,特别是在主题切换过程中的过渡效果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/9 2:54:07

3步解锁AI游戏助手:让2048突破10000分的秘密武器

3步解锁AI游戏助手&#xff1a;让2048突破10000分的秘密武器 【免费下载链接】2048-ai AI for the 2048 game 项目地址: https://gitcode.com/gh_mirrors/20/2048-ai 告别无效尝试&#xff0c;AI带你轻松掌握数字合并的艺术 你是否在2048游戏中经常陷入数字杂乱无章的困…

作者头像 李华
网站建设 2026/10/8 21:08:22

Ryzen优化指南:用SMUDebugTool实现硬件调优与性能释放

Ryzen优化指南&#xff1a;用SMUDebugTool实现硬件调优与性能释放 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

作者头像 李华
网站建设 2026/10/6 2:51:50

SMUDebugTool完全指南:Ryzen系统调试与性能优化实战手册

SMUDebugTool完全指南&#xff1a;Ryzen系统调试与性能优化实战手册 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…

作者头像 李华
网站建设 2026/10/6 0:45:32

工业级3D模型优化与STL格式转换全指南

工业级3D模型优化与STL格式转换全指南 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 在工业级3D打印流程中&#xff0c;3D模…

作者头像 李华
网站建设 2026/10/6 12:20:55

抖音视频下载工具使用指南:从需求到落地的完整方案

抖音视频下载工具使用指南&#xff1a;从需求到落地的完整方案 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容爆炸的时代&#xff0c;高效获取和管理社交媒体视频已成为内容创作者、研究人员和普…

作者头像 李华