@if 和 @else

@if 规则是编写的 @if <expression> {...} ,它控制其块是否被评估(包括发出任何样式作为 CSS)。表达式通常返回 true 或者 false 。如果表达式返回 true ,则计算块,如果表达式返回 false ,则不计算。

scss 语句 css 语句
@mixin avatar($size, $circle: false) {
  width: $size;
  height: $size;

  @if $circle {
    border-radius: $size / 2;
  }
}

.square-av {
  @include avatar(100px, $circle: false);
}
.circle-av {
  @include avatar(100px, $circle: true);
}
.square-av {
  width: 100px;
  height: 100px;
}

.circle-av {
  width: 100px;
  height: 100px;
  border-radius: 50px;
}


@else

一个 @if 规则可以选择跟随一个 @else 规则,写成 @else {...} 。如果 @if 表达式返回 false ,则计算该规则的块。

scss 语句 css 语句
$light-background: #f2ece4;
$light-text: #036;
$dark-background: #6b717f;
$dark-text: #d2e1dd;

@mixin theme-colors($light-theme: true) {
  @if $light-theme {
    background-color: $light-background;
    color: $light-text;
  } @else {
    background-color: $dark-background;
    color: $dark-text;
  }
}

.banner {
  @include theme-colors($light-theme: true);
  body.dark & {
    @include theme-colors($light-theme: false);
  }
}
.banner {
  background-color: #f2ece4;
  color: #036;
}
body.dark .banner {
  background-color: #6b717f;
  color: #d2e1dd;
}


@else if

您还可以通过编写 @else if &;t;expression> {...} ,来选择是否计算规则的块。如果这样做,则仅当前面的 @if 的表达式返回 false ,而 @else if 的表达式返回 true 时,才会计算块。

实际上,您可以在 @else if 之后链接任意数量的 @else if 。将计算链中表达式返回 true 的第一个块,而不计算其他块。如果在链的末端有一个普通的 @else ,那么如果每个其他块都失败,则将对其块进行评估。

scss 语句 css 语句
@use "sass:math";

@mixin triangle($size, $color, $direction) {
  height: 0;
  width: 0;

  border-color: transparent;
  border-style: solid;
  border-width: math.div($size, 2);

  @if $direction == up {
    border-bottom-color: $color;
  } @else if $direction == right {
    border-left-color: $color;
  } @else if $direction == down {
    border-top-color: $color;
  } @else if $direction == left {
    border-right-color: $color;
  } @else {
    @error "Unknown direction #{$direction}.";
  }
}

.next {
  @include triangle(5px, black, right);
}
.next {
  height: 0;
  width: 0;
  border-color: transparent;
  border-style: solid;
  border-width: 2.5px;
  border-left-color: black;
}


真与假

在允许任何地方 true false 的地方,您也可以使用其他值。 false null 的值是 falsey,这意味着 Sass 认为它​​们表示错误并导致条件失败。其他所有值都被认为是真实的,因此 Sass 认为它​​们的工作方式类似true并导致条件成功。

例如,如果要检查字符串是否包含空格,则只需编写 string.index($string," ") .如果未找到该字符串,则该 string.index() 函数,返回 null ,否则返回一个数字。

⚠️注意!
一些语言认为更多的值是虚假的,而不仅仅是 false null 。Sass 不是其中一种语言! 空字符串 空列表 和数字 0 ,在 Sass 中,都是真值。

下篇: @each