主题换肤处理(css var)

具体功能实现:

document.body.setAttribute('data-theme', 'red')

设置当前body内容的data-theme属性,想数据持久化则存储到localStorage即可。

在css中定义var变量

@function hexToRGB($hex) {
  @return red($hex), green($hex), blue($hex);
}
// 默认颜色
:root{
  --primary: #F56C6C;  // 主色
  --primary-rgb: #{hexToRGB(#F56C6C)}; // rgb主色
}
// 红色主题
body[data-theme='red'] {
  --primary: #F56C6C;
  --primary-rgb: #{hexToRGB(#F56C6C)};
}
// 蓝色主题
body[data-theme='blue'] {
  --primary: #409EFF;
  --primary-rgb: #{hexToRGB(#409EFF)};
}

如何使用?

div {
  color: var(--primary);
}

通过var()的形式进行变量样式赋值,如果多主题时,只需要将该主题下的具体颜色进行var变量定义既可

浏览器展示:

 

那么问题来了,使用css var(),在ie浏览器中会有兼容问题,下面则是ie浏览器兼容处理

首先在当前项目(vue)中安装css-vars-ponyfill

然后在项目的main.ts/js中引入

import cssVars from 'css-vars-ponyfill';
import Vue from 'vue'
import App from './App.vue'
import router from './router'

// ie var 兼容
cssVars({
  preserveVars: true
});

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值