elementui主题, 如何动态设置scss变量的值?目的还是动态修改elementui框架的主题颜色
如图官方的修改方法
我的项目中使用了elementui作为框架,同时使用了scss。
有没有办法动态更改这个变量的值来设置不同的主题?
之前的思路是动态引入不同的主题
// 不同的主题文件,他们的内容只有一个就是设置
// $--color-primary: theme1;
// $--color-primary: theme2;
// $--color-primary: theme3;
// 如果使用var变量来会导致构建失败
// $--color-primary: var(--primary, red)
// 通过接口获取到主题
let theme = getTheme()
import(`./${theme}.scss`)
这样存在一个问题,就是实际构建的时候,所有定义的主题都会被编译。就算我没有动态引入也会被编译,导致主题之间互相覆盖。
所以现在想只用一个scss文件来定义变量,但是这个变量的值不是固定的,有没有办法处理呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
经过不断的尝试和搜索,我发现所有实现方式最终还是和elementUI切换主题源码的实现方式基本一致,即手动替换掉框架原来的颜色。
源码如下:
ementui切换主题源码
如果项目配置的webpack在4.0以上的用户也可以查看这篇文章,对框架的处理原理也是类似的
https://segmentfault.com/a/11...
最终我自己的实现也类似,代码如下,供参考:
关键问题在于编译后的 css 无法动态切换样式,最终还是要通过切换 class 的方式切换主题
看看这篇文章 https://segmentfault.com/a/11...
以下是我实际工作中利用scss实现主题色动态切换
1、首先需要在vue项目中安装sass相关的依赖
2、在src->assets文件下下创建_theme.scss,里面主要存放所有公共变量、混合样式等
3、全局引入_theme.scss:修改根目录->build文件夹->utils.js里面的scss: generateLoaders('sass'),具体修改内容如下
4、demo页面效果如下图:
5、具体功能实现代码如下:
如果对你有帮助,感谢采纳~
我研究出了更优雅,更轻松的实现方式 https://segmentfault.com/a/1190000041078020 ,虽然过去近一年,希望还能帮助到今后的项目。