【问题标题】:Sass @mixin - prevent selector repetition and combine all styles under single selectorSass @mixin - 防止选择器重复并在单个选择器下组合所有样式
【发布时间】:2021-06-09 23:06:27
【问题描述】:

我写了这个@mixin 来在一行中设置明暗主题的样式。

@mixin setThemeDynamicCSSRule($property, $light-theme-value, $dark-theme-value) {
     #{$property}: #{$light-theme-value};
    
      .dark-mode & {
          #{$property}: #{$dark-theme-value}   
      }
}

body {
    @include setThemeDynamicCSSRule(color, black, white);
    @include setThemeDynamicCSSRule(background-color, white, black);
    @include setThemeDynamicCSSRule(font-size, 16px, 32px);
}

这会返回我:

body {
  color: black;
  background-color: white;
  font-size: 16px;
}
.dark-mode body {
  color: white;
}
.dark-mode body {
  background-color: black;
}
.dark-mode body {
  font-size: 32px;
}

它不断为每个 setThemeDynamicCSSRule() 调用重复 .dark-mode body 选择器。

它仍然可以完成工作,但理想情况下我希望 css 编译为:

body {
  color: black;
  background-color: white;
  font-size: 16px;
}
.dark-mode body {
  color: white;
  background-color: black;
  font-size: 32px;
}

【问题讨论】:

标签: css sass styles stylesheet


【解决方案1】:

不完全是您正在寻找的方式......但向前思考它是想要的结果。并且可能是一种更简单、更整洁的方式来在一个地方组织您的特殊主题属性。

将您不同的主题属性/值包装到嵌套地图中。比使用适应的 mixin。

$themes: (

    color: (
        'light': 'black',
        'dark': 'white',
    ),
    background-color: (
        'light': 'white',
        'dark': 'black',
    ),
    font-size: (
        'light': 16px,
        'dark': 32px,
    ),

);

@mixin setThemeStyles($themes){

    @each $property, $values in $themes {
        #{$property}: map-get($values, 'light' );
    }

    .dark-mode & {
        @each $property, $values in $themes{
            #{$property}: map-get($values, 'dark');
        }
    }
    

}

body {
    @include setThemeStyles($themes);
}



//######>> RESULT IS YOUR WANTED CSS
body {
  color: "black";
  background-color: "white";
  font-size: 16px;
}
.dark-mode body {
  color: "white";
  background-color: "black";
  font-size: 32px;
}

【讨论】:

  • 感谢您的回答。这也是一个很好的解决方案。但我试图避免这种方法,因为我喜欢这样的想法,即我不必使用元素范围的 CSS 规则维护单独的地图,而是在选择器内的一行 mixin 中设置样式。
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 2013-10-27
  • 2011-11-12
  • 2020-04-05
  • 2013-04-15
  • 2013-02-06
  • 2018-12-07
相关资源
最近更新 更多