vue3.0 scss一键换肤

一键更换主题主题查了挺多资料的有几种方法:
1:本地创建不同的scss文件 分别申明不同的变量。
2:利用scss混合器的监听属性来监听。
3:利用插件(这个方法比较复杂所以没去研究)
4:利用vuex 存一个颜色的值,在每个地方动态绑定(:style="{}")

这里面第一种跟第二种其实差不多,主要介绍下第二种

利用scss混合器的监听属性来监听

1.创建basic.scss,全局引入,配置vue.config.js

const path = require('path');
module.exports = {
	chainWebpack: (config) => {
	    const types = ['vue-modules', 'vue', 'normal-modules', 'normal']
	    types.forEach(type => addStyleResource(config.module.rule('scss').oneOf(type)))
	  },
}
// 全局导入样式
function addStyleResource(rule) {
  rule.use('style-resource')
    .loader('style-resources-loader')
    .options({
      patterns: [
        path.resolve(__dirname, './src/presentation/style/basic.scss'),
      ],
    })
}

2.basic.scss 变量申明以及监听属性

// 混合器
// 主题色
@mixin fontColor(){
    color: $blue;
    [data-theme="71E5B9"] & {
        color: #71E5B9
    }
}
@mixin bgColor(){
    background: $blue;
    [data-theme="71E5B9"] & {
        background: #71E5B9
    }
}
@mixin borderColor(){
    border-color: $blue;
    [data-theme="71E5B9"] & {
        border-color: #71E5B9
    }
}
@mixin border(){
    border:1px solid $blue;
    [data-theme="71E5B9"] & {
        border:1px solid  #71E5B9;
    }
}

3.需要的地方注入就行了

.el-pagination.is-background .el-pager li:not(.disabled).active{
    @include bgColor()
}

4.改变主题色

document.documentElement.setAttribute("data-theme","71E5B9")

5:注意:这个方法有局限性,就是样式不支持自定义选择,得提前写好几种

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值