scss多主题适配方案

  1. 定义多主题变量
// theme.scss
$themes: (
  default: (
    font-color-black3: #333333,
    font-color-black0: #000000,
    font-color-gray6: #666666,
    font-color-gray9: #999999,
    font-color-blue: #437acf,
    font-color-red: #e91500,
    bg-color-white: #ffffff,
    bg-color-white-f4: #f4f4f4,
    bg-color-blue: #437acf,
    bg-color-black: rgba(0, 0, 0, 0.4),
    bg-color-black0: #000000,
    border-color-gray: #dddddd,
    border-color-gray2: #cccccc,
  ),
  dark: (
    font-color-black3: #333333,
    font-color-black0: #000000,
    font-color-gray6: #666666,
    font-color-gray9: #999999,
    font-color-blue: #437acf,
    font-color-red: #e91500,
    bg-color-white: #ffffff,
    bg-color-white-f4: #f4f4f4,
    bg-color-blue: #437acf,
    bg-color-black: rgba(0, 0, 0, 0.4),
    bg-color-black0: #000000,
    border-color-gray: #dddddd,
    border-color-gray2: #cccccc,
  ),
);
  1. 定义多主题方法
// main.scss
@import './theme.scss';

//遍历主题map
@mixin themeify {
  @each $theme-name, $theme-map in $themes {
    //!global 把局部变量强升为全局变量
    $theme-map: $theme-map !global;
    //判断html的data-theme的属性值  #{}是sass的插值表达式
    //& sass嵌套里的父容器标识   @content是混合器插槽,像vue的slot
    // 这里的data-theme是自己定义并全局挂载的属性 可以在APP.vue或者main.js里初始化赋值
    [data-theme='#{$theme-name}'] & {
      @content;
    }
  }
}
//声明一个根据Key获取颜色的function
@function themed($key) {
  @return map-get($theme-map, $key);
}
//获取颜色公共方法
@mixin theme_color($name,$color) {
  @include themeify {
    #{$name}: themed($color) !important;
  }
}
  1. 应用
// demo.scss
@import '@/assets/style/main.scss';
.demo-page{
	width:200px;
	height:100px;
	@include theme_color('background-color','bg-color-white');
	@include theme_color('border-color','border-color-gray');
	@include theme_color('font-color','font-color-red');
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值