news 2026/5/11 15:05:51

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/5/11 15:05:13

3大痛点×7项特性:思源宋体OTF多场景应用指南

3大痛点7项特性&#xff1a;思源宋体OTF多场景应用指南 【免费下载链接】source-han-sans-ttf A (hinted!) version of Source Han Sans 项目地址: https://gitcode.com/gh_mirrors/so/source-han-sans-ttf 在全球化设计项目中&#xff0c;多语言排版面临着诸多挑战&…

作者头像 李华
网站建设 2026/5/9 6:25:04

如何高效备份抖音直播内容?直播回放管理工具实战指南

如何高效备份抖音直播内容&#xff1f;直播回放管理工具实战指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 直播内容备份已成为自媒体创作者和内容运营者的核心需求&#xff0c;但面对直播回放无法直接…

作者头像 李华
网站建设 2026/5/11 15:05:50

突破Windows限制:远程桌面多用户解决方案完全指南

突破Windows限制&#xff1a;远程桌面多用户解决方案完全指南 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 远程桌面多用户工具、Windows多会话破解、免费远程协作方案——这三个关键词或许正是你寻找已久的答案…

作者头像 李华
网站建设 2026/5/9 18:07:39

QQ空间备份工具:数字记忆守护者的全方位解决方案

QQ空间备份工具&#xff1a;数字记忆守护者的全方位解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 在这个信息爆炸的时代&#xff0c;我们的生活轨迹越来越多地以数字形式存在…

作者头像 李华
网站建设 2026/5/10 22:15:11

5步解锁显卡隐藏性能:专业玩家都在用的驱动调校工具

5步解锁显卡隐藏性能&#xff1a;专业玩家都在用的驱动调校工具 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 显卡驱动优化是提升游戏体验的关键环节&#xff0c;而性能调校则是释放硬件潜力的核心手…

作者头像 李华
网站建设 2026/5/9 23:37:34

家庭游戏串流自建服务器全攻略:从硬件利旧到多设备无缝体验

家庭游戏串流自建服务器全攻略&#xff1a;从硬件利旧到多设备无缝体验 【免费下载链接】Sunshine Sunshine: Sunshine是一个自托管的游戏流媒体服务器&#xff0c;支持通过Moonlight在各种设备上进行低延迟的游戏串流。 项目地址: https://gitcode.com/GitHub_Trending/su/S…

作者头像 李华