Vue项目动态主题切换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue项目动态主题切换相关的知识,希望对你有一定的参考价值。

参考技术A 通常情况下,很多后台管理界面需要有好几套颜色的主题,我们的Vue项目已经集成了ElementUI,本来也支持主题定制,ElementUI使用了Sass开发样式,因此自定义样式也是很方便的。

参考: https://element.eleme.cn/#/zh-CN/component/custom-theme

主要就是修改ElementUI提供的变量,先根据实际情况修改变量值,然后引入ElementUI提供的scss:

目前我们把通用样式写到 common.scss 中,然后在 index.scss 中引入:

common.scss 片段:

然后在 main.js 中引入就可以了。

这样完成了主题的定制了,不过要实现多套主题切换的话,还有些需要处理

动态主题切换一般有好几种方式:

其实Vue对css动态切换主题支持并不是太好,通常的css被编译处理之后加入页面,因此动态引入不同的css文件比较难做到。

我们这里选择第2种方式。

目录结构如下,图上是两个主题, default 和 simple :

common.scss——引入ElementUI样式,并自定义一些变量和样式

themes/themeName/index.scss——定制变量

css/main.scss——样式入口

main.scss 主要内容:

sass样式这样引入之后所有样式定义自动在主题样式之下

因为样式已经引入,只需要改变body的样式名称即可,调用 $changeTheme(theme) :

实际效果参考下面的截图,更多样式可以在主题文件中再做定制。

默认主题:

紫色主题:

目前遇到一个比较奇怪的问题,按照上面的方法做了之后,其他都显示正常,就是图标显示有问题,直接引入主题文件就是好的,放到主题样式之下就有问题。

针对font-face做了特殊处理就可以正常了:

main.scss 中添加:

GitHub地址: https://github.com/fugary/simple-element-ui-template

Antd 最简切换主题色

参考技术A 按antd官方文档,要动态切换主题不能引用@import '~antd/dist/antd.less';而需要引用@import '~antd/dist/antd.variable.min.css';

引入完毕后,配置动态主题色Config。(此处我使用umi的useModel作为状态管理,有用Redux的也可以换成Redux)

配置好后,切换主题色。改变状态参数theme即可。

例如:

切换主题一共就这三处地方,极为简单。

该项目地址以上传 github 。

以上是关于Vue项目动态主题切换的主要内容,如果未能解决你的问题,请参考以下文章

Vue 开发实战实战篇 # 42:如何定制主题及动态切换主题

vue+js动态切换element-ui生成的主题css文件

基于 vue3viteantdvcss 变量实现在线主题色切换

前端切换主题颜色的几种思路

如何使用 SASS 动态切换颜色主题?

Antd 最简切换主题色