【问题标题】:Change Variable colors if else in scss如果在 scss 中,则更改可变颜色
【发布时间】:2018-09-23 08:56:20
【问题描述】:

我正在尝试在 scss 中单击更改对比度(将更改对比度类添加到正文)来更改颜色。

我的静态颜色是:

$primary-color-blue: #2aace2;

$mid-blue-color: #2695d2;

$dark-blue-color: #124b62;


关于改变对比:

$primary-color-blue: #177eab;

$mid-blue-color: #1c6f9b;

$dark-blue-color: #124b62;

应该类似于 sass

if(change-contrast) {
//  console.log (get High Constrast Colors)
}
else {
//  console.log (Static Colors)
}

我正在尝试像下面那样做,但如果我确实像下面那样,我必须添加到每个班级。

@mixin branding {
  @each $brand in $brand_clr {
    &.#{nth($brand,1)} {
      $primary-color-blue: #177eab;
      @content;
    }
  }
}

test {
    background: $primary-color-blue;
    @include branding {
      background: $primary-color-blue;
    }
} 

感谢您对此的帮助!

谢谢

【问题讨论】:

    标签: css if-statement sass scss-mixins


    【解决方案1】:

    我认为解决方案遇到了结构良好的颜色图。您需要按类型(例如静态、对比)对颜色进行分组。然后,使用 mixin 来避免重复自己。

    $colors:(
      standard: (
        primary-color-blue: #2aace2,
        mid-blue-color:#2695d2,
        dark-blue-color:#124b62
      ),
      contrasted: (
        primary-color-blue: #177eab,
        mid-blue-color:#1c6f9b,
        dark-blue-color:#124b62
      )
    );
    
    
    @function get-color($key, $type: 'standard'){
      @each $name, $color in map-get($colors, $type){
        @if($key == $name){
          @return $color
        }
      }
    }
    
    @mixin get-color($property,$color){
      #{$property}: get-color($color);
      @at-root body.contrasted & {
        #{$property}: get-color($color, contrasted);
      }
    }
    
    
    .className{
      @include get-color(background-color, primary-color-blue)
    }
    

    这将输出:

    .className {
      background-color: #2aace2;
    }
    body.contrasted .className {
      background-color: #177eab;
    }
    

    【讨论】:

    • 我们可以从变量中完成,而不是在每个类中进行更改吗?
    • 我的意思是 if(standard) { primary-color-blue: #2aace2, } else { primary-color-blue: #177eab, } 如果我们可以这样尝试,那将非常耗时。无需将其添加到每个班级。但是你提供的也很好:)'
    • 你可以像color: get-color($color, contrasted);一样使用函数,不要使用mixin。但我认为代码应该符合一些...
    • 渐变是一个长属性,但仍然是,所以将它添加到颜色图中。我不知道游览构建过程,但使用 autoprefixer 更容易为供应商添加前缀。对于边框,我建议将属性分开,例如:border-bottom-color、border-bottom-width、border-bottom-style。
    • 也许您想更改 mixin 名称,我认为您应该在标准地图和对比地图中添加 background-imagebackground-image-retina。然后使用 mixin 两次,一次默认,另一次在视网膜 @media 查询中。
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 2017-02-02
    • 2012-04-03
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2023-04-01
    • 2018-08-10
    相关资源
    最近更新 更多