1 背景

最近在搭建一个后台管理系统时遇到一个在线切换主题的需求,由于项目使用的是vite + Ant-Design-Vue搭建的,在网上找了一圈发现基于webpack的,就很苦恼。好在看到了这位老哥的帖子,他写的这个vite插件很好的解决了这个需求。

原贴传送门:传送门

2 使用

这插件使用其实很简单,楼下再细说。先看看效果图:

2.1 安装

  • npm
npm install @zougt/vite-plugin-theme-preprocessor -D
  • yarn
yarn add @zougt/vite-plugin-theme-preprocessor -D

2.2 配置

  • vite.config.ts
import { defineConfig } from "vite";
import path from "path";
import themePreprocessorPlugin from "@zougt/vite-plugin-theme-preprocessor";export default defineConfig({plugins: [// 引入插件themePreprocessorPlugin({// 使用Lessless: {// 此处配置自己的主题文件multipleScopeVars: [{scopeName: "theme-default",path: path.resolve("src/assets/theme/default.less"),},{scopeName: "theme-dark",path: path.resolve("src/assets/theme/dark.less"),},],defaultScopeName: "theme-default", // 默认取 multipleScopeVars[0].scopeNameextract: false,// 在生产模式是否抽取独立的主题css文件},}),]
});
  • 由于Ant-Design-Vue定制主题需要使用less,所以必须引入Ant-Design-Vue的less文件而不是css文件,具体如何切换为less可以看Ant-Design-Vue的官方文档,此处不多赘述。
  • 配置选项具体可参考插件介绍:插件仓库

2.3 定制主题

自定义主题文件里可通过覆盖Ant-Design-Vue官方主题变量、使用自定义变量、自定义样式等方式实现主题的定制。以下是两种主题的文件示例:

  • default.less
// 引入官方主题
@import "node_modules/ant-design-vue/lib/style/themes/default";// 修改组件库主题
@primary-color: red;// 自定义变量
@custom-color: #000000;// 自定义全局样式
.login_bg {background: url("@/assets/images/login/bg.jpg") no-repeat 100% 100%;background-size: cover;
}
  • dark.less
// 引入官方主题
@import "node_modules/ant-design-vue/lib/style/themes/dark";// 修改组件库主题
@primary-color: blue;// 自定义变量
@custom-color: #ffffff;// 自定义全局样式
.login_bg {background: url("@/assets/images/login/bg_daek.jpg") no-repeat 100% 100%;background-size: cover;
}

2.4 切换主题

根据在配置插件时 extract 选项的值,切换主题时的操作有些许不同。

  • extract: true
const toggleTheme = (scopeName = "theme-default") => {let styleLink = document.getElementById("theme-link-tag");if (styleLink) {// 假如存在id为theme-link-tag 的link标签,直接修改其hrefstyleLink.href = `/${scopeName}.css`;// 注:如果是removeCssScopeName:true移除了主题文件的权重类名,就可以不用修改className 操作document.documentElement.className = scopeName;} else {// 不存在的话,则新建一个styleLink = document.createElement("link");styleLink.type = "text/css";styleLink.rel = "stylesheet";styleLink.id = "theme-link-tag";styleLink.href = `/${scopeName}.css`;// 注:如果是removeCssScopeName:true移除了主题文件的权重类名,就可以不用修改className 操作document.documentElement.className = scopeName;document.head.append(styleLink);}
};
  • extract: false
const toggleTheme = (scopeName = "theme-default") => {document.documentElement.className = scopeName;
};

在实际项目操作中,强烈建议将当前主题通过 localstorege 或者 cookie 之类的方式缓存至浏览器中,并在用户在关闭浏览器或刷新后重新取出并初始化主题,这样就不会丢失主题影响体验。

也可将本地缓存搭配 Vuex 使用,将切换主题操作放入 actions 中,统一管理主题状态。

3 后记

最后再次感谢 zgt_不梦 大佬的插件~

vite + Ant-Design-Vue 实现动态主题切换相关推荐

  1. vue将每个路由打包成html,Ant Design Vue pro 动态路由的实现和打包

    Ant Design Vue pro 动态路由的实现和打包 Ant Design Vue pro 动态路由的实现和打包 配置路由权限 在config文件夹下router.config.js中配置路由权 ...

  2. Ant design vue动态主题切换的坑与一般性方法

    本文原创,并且以吐槽为主,下面开始: Ant design vue是很优秀的框架,不过对于一般小白用户(比如我),文档方面不够友好.官方给出了主题自定义色彩的方案,但是太过于简陋,网上很多技术解决方案 ...

  3. vite+vue3+ts+ant design vue+tailwindcss搭建前端web应用(2)

    回顾 上篇文章地址:vite+vue3+ts+ant design vue+tailwindcss搭建前端web应用(1)_konsei的博客-CSDN博客 上篇文章搭建了vue3项目,引入了ant ...

  4. 【Vue3】创建 vite + vue3 + Ant Design Vue 项目

    搭建脚手架 创建项目: 然后按照它的指示运行项目 配置文件 安装构建 vue-router: npm i vue-router@next 创建 router/index.js 文件: import { ...

  5. Ant Design Vue 切换中英文改变Menu和内容

    前言,目前一个小项目使用的是Ant Design Vue,情况是 路由从接口获取并渲染到页面上,切换国际化语言时,Menu 和 内容 都中英文自动切换. Ant Design Vue 结构 Ant D ...

  6. Ant Design Vue中tabs标签页切换导致页面变宽的问题

    问题 在使用Ant Design Vue进行开发的时候,使用了tabs标签页,在页里面套用了表格,但是在页面切换后,会发现页面的width会变大差不多2倍,这样会导致页面一些结构的样式发生变化. 解决 ...

  7. 基于 Vue3.0 和 Ant Design Vue ,高颜值管理后台UI框架vue-vben-admin运行

    简介 Vue Vben Admin 是一个免费开源的中后台模版.使用了最新的vue3,vite2,TypeScript等主流技术开发,开箱即用的中后台前端解决方案,也可用于学习参考. Github地址 ...

  8. Vue vben admin - 新鲜出炉的高颜值管理后台UI框架,基于 Vue3 和 Ant Design Vue

    基于Vue3.0 / Vite / Ant Design 等火热开源项目构建,新鲜出炉,值得关注. 关于 Vue vben admin Vue Vben Admin 是一个基于 Vue3.0.Vite ...

  9. ABP vNext 对接 Ant Design Vue 实现分页查询

    本文内容 ABP vNext中的分页查询 STable组件中的分页查询 实现参数转换层 最终对接效果 在 上一篇 博客中,博主和大家分享了如何在 EF Core 中实现多租户架构.在这一过程中,博主主 ...

  10. 2019 Electron+Vue+Ant Design Vue仿网易云音乐windows客户端实战分享

    特点 拖拽播放 桌面歌词 mini模式 自定义托盘右键菜单 任务栏缩略图,歌曲操作 音频可视化 自动/手动检查更新 Nedb数据库持久化 自定义安装路径,安装界面美化 浏览器中启动客户端 Travis ...

最新文章

  1. linux oracle修改编码utf8
  2. 初探Vue之环境搭建
  3. MapPoint之旅(2)-----Getting Started with MapPoint Web Service(1)
  4. Caffe、TensorFlow、MXnet三库对比
  5. 京东数科上市首轮问询「答卷」:与蚂蚁集团有本质区别、信用风险损失有限
  6. java中匿名数组_Swagger UI:数组中的多个匿名对象
  7. 并发容器(J.U.C)中的队列类
  8. c语言 字体点阵取模,[汉字取模软件怎么用]单片机点阵汉字显示需要用
  9. 软件测试整改报告,软件测试工作效率低的改进措施
  10. Web前端开发工程师需要掌握哪些核心技能?
  11. 关于数据库方言MySQLDialect、MySQL5Dialect、MySQL55Dialect、MySQL57Dialect、MySQL8Dialect之间的区别与联系
  12. Android fragment中广告图片轮播效果的实现(附图 )
  13. SVG排版 | 深色模式彩蛋
  14. 做外贸的你不能犯的十大邮件错误
  15. 从玉农业谋定国家龙头企业-林裕豪:对话农民丰收节交易会
  16. android 电量性能优化
  17. SQL Server基础操作(此随笔仅作为本人学习进度记录六 !--程序块和循环)
  18. 用3D再现2D偶像的可爱,Cygames【偶像大师 灰姑娘女孩】开发示例
  19. 火山视窗文件框基本操作介绍
  20. 深度广度并举,AWS容器服务再推利器!

热门文章

  1. 四月四日服务器维护,【正式服】4月4日例行更新维护公告
  2. 【图像】【OpenGL】VAO和VBO的关系
  3. 逆向js混淆 解密食行生鲜的js加密函数
  4. java-php-python-ssm计算机office课程平台计算机毕业设计
  5. 内容营销管理软件推荐
  6. python边缘检测画简笔画_python计算机视觉2:图像边缘检测
  7. 学习软件测试基础入门,零基础该如何学习软件测试?
  8. android 点击缩略图查看大图
  9. Selenium webdriver安装配置
  10. oppo手机计算机颜色,解开手机屏幕真相,原来OPPO全链路10bit色彩这么强!