@if e @else

Se a regra @if for escrita @if <expression> { ... }, e controlar se o seu bloco é ou não avaliado (incluindo emissões de quaisquer estilos como CSS). A expressão normalmente retorna ou true ou false — se a expressão retornar true, o bloco é avaliado, e se a expressão retornar false não.

SCSS Syntax

@use "sass:math";

@mixin avatar($size, $circle: false) {
  width: $size;
  height: $size;

  @if $circle {
    border-radius: math.div($size, 2);
  }
}

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

Sass Syntax

@use "sass:math"

@mixin avatar($size, $circle: false)
  width: $size
  height: $size

  @if $circle
    border-radius: math.div($size, 2)



.square-av
  @include avatar(100px, $circle: false)

.circle-av
  @include avatar(100px, $circle: true)

CSS Output

.square-av {
  width: 100px;
  height: 100px;
}

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







@else@else permalink

Uma regra @if pode opcionalmente será seguido por uma regra @else, escrita @else { ... }. Este bloco da regra é avaliado se a expressão de @if retornar false:

SCSS Syntax

$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);
  }
}

Sass Syntax

$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)


CSS Output

.banner {
  background-color: #f2ece4;
  color: #036;
}
body.dark .banner {
  background-color: #6b717f;
  color: #d2e1dd;
}













As expressões condicionais pode conter operadores booleanosboolean operators (and, or, not).

@else if@else if permalink

Tu também podes escolher se avalia um bloco da regra @else escrevendo-o @else if <expression> { ... }. Se fizeres, o bloco é avaliado somente se a expressão da @if precedente retornar false e a expressão da @else if retornar true.

Na realidade, podes acorrentar tantos @else if quiseres depois dum @if. O primeiro bloco na cadeia cuja expressão retorna true será avaliado, e os outros não. Se existir um @else simples no final da cadeia, o seu bloco será avaliado se todos os outros blocos falharem:

SCSS Syntax

@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);
}

Sass Syntax

@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)

CSS Output

.next {
  height: 0;
  width: 0;
  border-color: transparent;
  border-style: solid;
  border-width: 2.5px;
  border-left-color: black;
}


















Veracidade e FalsidadeVeracidade e Falsidade permalink

Em qualquer parte que true ou false forem permitidos, podes usar outros valores também. Os valores false e null são falsos, o que significa que a Sass considera-os para indicar falsidade e motivos de condições falharem. Todo outro valor é considerado verdadeiro, então a Sass considera-os para funcionar como true e motivo das condições serem bem-sucedidas.

Por exemplo, se quiseres verificar se uma sequência de caracteres contém um espaço, podes apenas escrever string.index($string, ""). A função string.index() retorna null se a sequência de caracteres não for encontrada e de outro modo um número.

⚠️ Atenção!

Algumas linguagens consideram mais valores falsos do que false e null. A Sass não é uma dessas linguagens! Sequências de caracteres vazias, listas vazias, e o número 0 são todos verdadeiros na Sass.