css - SASS 使用变量自定义类名

标签 css sass

有什么方法可以自定义 SASS 中的变量吗? 例如:

.m-b-{$number} {
    margin-bottom: $number;
}

如果我将 class="m-b-50"赋予一个元素,它应该采用 margin-bottom 50。我只是想知道 SASS 是否可行。

最佳答案

是的,在 变量插值或变量替换 的帮助下,它可以在 SASS 中使用 #{} 进行变量替换,而 mixins是一个代码块,就像函数一样。

Interpolation 是对包含一个或多个变量的表达式或字符串求值的过程,产生的结果中变量被替换为其相应的值.

在 SASS 中对 css 属性进行插值和设置值的简单示例:

$number:60;
$n: 20px;

.m-b-#{$number}{
  margin-bottom: #{$number}px;
  margin-top: $n;
}

要创建自定义类名,将使用 mixins:

@mixin margin-class($side, $number) {
  $firstLetter: str-slice($side, 0, 1);
  .m-#{$firstLetter}-#{$number}{
     margin-#{$side}: #{$number}px;
  }
}

$margins: (10, 20);
$sides: ("top", "right", "bottom", "left");
@mixin generate-margin(){
   @each $margin in $margins{
      @each $side in $sides{
        @include margin-class($side, $margin);
      }
   }
}

@include generate-margin();

在这里,generate-margin() 将被执行,它将为每个 $margins 调用 margin-class() $sides,并将生成以下 CSS 类:

.m-t-10 {
  margin-top: 10px;
}

.m-r-10 {
  margin-right: 10px;
}

.m-b-10 {
  margin-bottom: 10px;
}

.m-l-10 {
  margin-left: 10px;
}

.m-t-20 {
  margin-top: 20px;
}

.m-r-20 {
  margin-right: 20px;
}

.m-b-20 {
  margin-bottom: 20px;
}

.m-l-20 {
  margin-left: 20px;
}

当您只需要特定值时,这是一种方法,但如果您想为 0-20 创建边距类,您可以循环遍历 0 到 20,如下所示:

@mixin generate-margin(){
  @for $margin from 1 through 20{
    @each $side in $sides{
      @include margin-class($side, $margin);
    }
  }
}

关于css - SASS 使用变量自定义类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44735495/

相关文章:

html - 居中水平对齐的标题

css - 如何根据 768px 以下的屏幕尺寸制作 col-xs-12 和 col-xs-6

html - 如何在 CSS 中使图像适合该 PNG 图像的形状?

dependencies - 使用 Compass 是否需要 HAML 和 Sass?

css - Sass 符号和父样式

javascript - SASS/SCSS @import 前面的 ~ 是什么意思/做什么?

javascript - 透视变换仅适用于 svg 标签而不适用于 g 或图像

html - 使 flex 元素换行到现有行,而不是新行

css - 带有 ul 列表的 Flexbox

html - 右对齐元素不停留在一行