vue+scss实现一键全局换肤功能

vue+scss实现一键全局换肤功能

需求:实现点击按钮,项目全局换肤
思路:
  1. 利用window.document.documentElement.setAttribute('data-theme', 'dark')设置html的attribute属性
  2. 利用scss的混入@mixin定义不同主题的样式表,然后在需要的文件中使用@include加载定义的样式
实现步骤:
  1. App.vue中获取当前的主题,并且设置html的attribute ,当没有设置主题时默认设置一个主题,我这里是设置为dark
let theme = localStorage.getItem('theme')
    if(!theme || theme === 'dark'){
      window.document.documentElement.setAttribute('data-theme', 'dark')
    }else{
      window.document.documentElement.setAttribute('data-theme', 'bright')
    }
  1. 新建文件mixin.scss,用来写不同主题的样式表
@mixin header_font_color{
  [data-theme="dark"] & {
   color:#8B8F9A
  }
  [data-theme="bright"] & {
    color:#484848
  }
}

以上css中 [ ] 可以识别到在html标签上设置的属性,所以在html上对应属性发生变化时,就会执行相应的样式,这一步有点类似于平时给div添加一个.active属性,css自动执行相应样式。

  1. 使用不同样式表,在vue文件中引入mixin.scss文件,也可全局引入,然后使用@include引入之前定义的混入函数
.form-title{
        font-size: 18px;
        @include header_font_color() // 这里是引用混入函数
 }
  1. 点击按钮换肤:重新设置html的attribute属性即可
 switchMode(mode) {
      if(!mode || mode === 'dark'){
        window.document.documentElement.setAttribute('data-theme', 'dark')
      }else{
        window.document.documentElement.setAttribute('data-theme', 'bright')
      }
    },
实现效果:

dark效果
dark效果
bright效果
bright效果

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值