主题Sass,在React App上Scss主题混合

问题描述

我使用sass-themify,但是它仅适用于node元素或id#,我想使用className来使用它,如何更改mixin? 感谢您的宝贵帮助

例如:

header {
  width: 100%;
  Box-shadow: 0px 1px 1px rgba(0,0.1);
  position: fixed;
  z-index: 666;
  img {
    height: 50px;
  };
}
@include sass-themify($element:header){
  background-color: sass-themify-get-color("primary-color");
} 

工作正常,而

.staffName {
  font-size: 20px;
  //color: $GR-tourterelle;
  font-weight: 400;
  font-style: italic;
  margin-right: 40px;
}
@include sass-themify($element:'.staffName'){
  color: sass-themify-get-color("primary-color");
} 

甚至

@include sass-themify() {
  .staffName {
    color: sass-themify-get-color("hello");
  }
}

不起作用 我也尝试将它添加到mixin中,但是它也不起作用

     .{$element}.#{$theme-name}{
        @content;
      }

这是mixin:

@mixin sass-themify-init($scheme-table){
  @if $scheme-table == null{
    @error "[sass-themify] sass-themify mixin needs a valid $scheme-table map defined"
  } @else {
    @if variable-exists("sass-themify-scheme-table") {
      @warn "[sass-themify] sass-themify has already been initialized once. Initializing again will replace the prevIoUs initialized color scheme"
    }
    $sass-themify-scheme-table: $scheme-table !global;
  }
}

@mixin sass-themify($element:"body"){
  //determine if global varaible has been declared or not
  @if not variable-exists("sass-themify-theme-name") {
    $sass-themify-theme-name: null !global;
  }

  @each $theme-name,$color-map in $sass-themify-scheme-table{
    $sass-themify-theme-name: $theme-name !global;
    @if $theme-name != "default"{
      #{$element}.#{$theme-name}{
        @content;
      }
    } @else {
      #{$element}{
        @content;
      }
    }
    $sass-themify-theme-name: null !global;
  }
}

@function sass-themify-get-map-deep($map,$keys...) {
  @each $key in $keys {
    $map: map-get($map,$key);
  }
  @return $map;
}


@function sass-themify-get-color($component){
  @if $sass-themify-scheme-table == null {
    @error "[sass-themify] You need to call sass-themify mixin to initialize a theme before you can call the sass-themify-get function.";
  }
  @if $sass-themify-theme-name == null {
    @error "[sass-themify] sass-themify-get function can only be used within the scope of the 'sass-themify' mixin.";
  }
  @return sass-themify-get-map-deep($sass-themify-scheme-table,$sass-themify-theme-name,$component);
}

@function sass-themify-get-theme-name(){
  @return $sass-themify-theme-name;
}

`````

and my themes :
`````
@import './colors';
@import './sass_themify.scss';

$theme : (
  'YR-theme' : (
    'header-color' : #6f7e0d,'header-image' : none,'hello' : #fff,'text' : $YR-brown,'CTA' : $YR-light-raspBerry,'CTA-hover' : $YR-raspBerry,'show-btn' : $YR-green,'show-btn-hover' : $YR-olive,),'GR-theme' : (
    'header-color' : $GR-beige--,'header-image' : url(data:image/png;base64,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),'hello' : $GR-tourterelle,'text' : $GR-roche,'CTA' : $GR-orange,'CTA-hover' : $GR-orange-hover,'show-btn' : $GR-tourterelle,'show-btn-hover' : $GR-tourterelle-hover,)
);

@include sass-themify-init($theme);

解决方法

我使用vary-sass

解决了问题