Scss支持多主题切换的方案实现

概述

通过改变 body[data-theme='variable'],实现一键切换主题。


代码

主题文件定义

_themes.scss

$themes: (
  default: (
    /* font-size */
    font-size-default: 14px,
    font-size-lg: 16px,
    font-size-sm: 12px,


    color-white: #FFF,

    /* Color */
    color-success: #13CE66,
    color-error: #FF4949,
    color-warning: #FFC82C,
    color-info: #78A4FA,

    // Text Color
    text-color-primary: #dc2b34,
    text-color-white: #ffffff,
    text-color-black: #000000,
    text-color-default: #4a4a4a,
    text-color-placeholder: #C9C9C9,
    text-color-disabled: #CCCCCC,

    // Background Color
    bg-color-primary: #d91720,
    bg-color-primary-light: #b51d29,
    bg-color-white: #ffffff,
    bg-color-grey: #F7F7F7,
    bg-color-light: #ECF5FD,
    bg-color-verifycode: #cfcfcf,

    // Border Color
    borer-color-primary: #e64644,
    borer-color-primary-light: #dc2b34,
    borer-color-white: #ffffff,
    borer-color-default: #CCCCCC,

    // Link Color
    link-color-primary: #d91721,
    link-color-primary-light: #b51d29,
    link-color: #6190E8,
    link-color-light: #79A1EB,
    link-color-disabled: #BFBFBF,

    // Icon Color
    icon-color-base: #CCC,
  ),

  light: (
    /* font-size */
    font-size-default: 14px,
    font-size-lg: 16px,
    font-size-sm: 12px,


    color-white: #FFF,

    /* Color */
    color-success: #13CE66,
    color-error: #FF4949,
    color-warning: #FFC82C,
    color-info: #78A4FA,

    // Text Color
    text-color-primary: #78A4FA,
    text-color-white: #ffffff,
    text-color-black: #000000,
    text-color-default: #4a4a4a,
    text-color-placeholder: #C9C9C9,
    text-color-disabled: #CCCCCC,

    // Background Color
    bg-color-primary: #d91720,
    bg-color-primary-light: #b51d29,
    bg-color-white: #ffffff,
    bg-color-grey: #F7F7F7,
    bg-color-light: #ECF5FD,
    bg-color-verifycode: #cfcfcf,

    // Border Color
    borer-color-primary: #e64644,
    borer-color-primary-light: #dc2b34,
    borer-color-white: #ffffff,
    borer-color-default: #CCCCCC,

    // Link Color
    link-color-primary: #d91721,
    link-color-primary-light: #b51d29,
    link-color: #6190E8,
    link-color-light: #79A1EB,
    link-color-disabled: #BFBFBF,

    // Icon Color
    icon-color-base: #CCC,
  ),
);

主题宏定义

_themeify.scss

@import './_themes.scss';

/* 
  使用demo 
  .app-home {
    font-size: 18px;
    @include themeify {
      color: themed('font-color');
    }
  }
 */

@mixin themeify {
  @each $theme-name, $theme-map in $themes {
    $theme-map: $theme-map !global;
    body[data-theme=#{$theme-name}] & {
      @content;
    }
  }
}

@function themed($key) {
  @return map-get($theme-map, $key);
}

页面样式文件

index.scss

@import '~@assets/theme/_themeify.scss';

.app-home {
  font-size: 18px;
  @include themeify {
    color: themed('text-color-primary');
  }
}

效果

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值