js 中动态引入样式文件 import()
不能通过 import() 动态引用样式文件来解决主题切换的问题,因为 import 文件后引入的样式会覆盖先引入的样式,如果选择主题1、主题2,再选择主题1是没办法切换回去的。
:export 实现 CSS、JS变量共享
scss 中导出变量,js 中导入变量。但是 js 中动态改变这个变量的值后无法实现数据双向绑定,dom 不会实时动态渲染。
|
|
|
|
如果要设置主题颜色,可以将从 css 中导出的变量值注入到 js 的全局变量中,需要设置主题颜色的地方,将样式写在 js 中并使用这个全局变量。
|
|
js 动态改变 css 的变量
设定 css 可以直接读取的参数,注意变量名前面要加两根连词线,这是 css 的规则。
|
|
css 中读取参数
|
|
js 改变主 html 元素上的类
js 中修改主 html 元素上的类名,css 中不同类名下定义相同的变量,取不同的颜色值,页面元素使用变量。
|
|
|
|
data-theme 多套主题配色方案
html 根标签设置一个 data-theme 属性,然后通过 js 切换 data-theme 的属性值,SCSS 根据此属性来判断使用对应主题变量。
|
|
|
|
|
|
若依方案
思路是下载 element-ui 相应版本的 theme-chalk 样式文件,将其中的主题相关颜色替换成新的颜色值,然后添加到页面的 style 标签上。因为页面中除了 element-ui 还有自己定义的主题样式,再查找一遍所有的 style 标签找到使用主题颜色的标签,替换其中的主题相关颜色值。注意,这种方式只进行了 element-ui 组件基础颜色的切换。
|
|
webpack-theme-color-replacer
参考Ant Design Pro 的 Vue 实现项目的主题切换配置。主要代码涉及如下几个文件:
vue.config.js
src/utils/themeUtil.js
src/store/modules/setting.js
src/App.vue
src/components/setting/Setting.vue