A função `if` no SASS
Este artigo explica a função if no SASS.
Vamos percorrer tudo, do básico da função if a técnicas avançadas, passo a passo.
YouTube Video
A função if no SASS
A função if() é uma função condicional simples fornecida pelo SASS que retorna um de dois valores com base em uma condição booleana. Ela é semelhante ao operador ternário do JavaScript.
Sintaxe
A sintaxe é a seguinte:.
1// if(condition, trueValue, falseValue)- Se
conditionfor verdadeiro, retornatrueValue; se for falso, retornafalseValue.
Uso Básico
Por exemplo, você pode usar a função if() para alterar as cores de fundo e do texto dependendo se o tema é escuro ou claro.
Código de Exemplo
1$theme: "dark";
2
3$background-color: if($theme == "dark", black, white);
4$text-color: if($theme == "dark", white, black);
5
6body {
7 background-color: $background-color;
8 color: $text-color;
9}- Se a variável
$themefor"dark", o fundo se torna preto com texto branco; se for"light", o fundo se torna branco com texto preto.
O CSS gerado
1body {
2 background-color: black;
3 color: white;
4}- Como a variável
$themeé"dark", o fundo é preto com texto branco.
Diferenças entre a declaração @if e a função if()
O Sass fornece uma declaração @if e uma função if() para ramificação condicional, mas elas são usadas para finalidades diferentes.
Código de Exemplo
1$theme: "dark";
2
3// `@if` statement: Compile-time branching (syntax level)
4$background-color: null;
5@if $theme == "dark" {
6 $background-color: black;
7} @else if $theme == "light" {
8 $background-color: white;
9} @else {
10 $background-color: gray;
11}
12
13// `if()` function: Returns a value (expression level)
14$text-color: if($theme == "dark", white, black);
15
16body {
17 background-color: $background-color;
18 color: $text-color;
19}- A declaração
@ifcontrola qual código é gerado no momento da compilação do Sass. - Por outro lado, a função
if()retorna um valor e é usada para alternar valores dinamicamente dentro de expressões.
O CSS gerado
1body {
2 background-color: black;
3 color: white;
4}- Neste exemplo, como
$themeé"dark", são aplicados um fundo preto e uma cor de texto branca. - As duas principais diferenças são que a declaração
@ifcontrola a estrutura e a funçãoif()retorna um valor.
Usando funções if aninhadas
Quando você precisa de lógica condicional complexa, pode aninhar funções if.
Código de Exemplo
1$theme: "custom";
2$custom-color: blue;
3
4$background-color: if(
5 $theme == "dark",
6 black,
7 if(
8 $theme == "light",
9 white,
10 $custom-color
11 )
12);
13
14body {
15 background-color: $background-color;
16}- Se
$themefor"dark", retorna preto; se for"light", retorna branco; caso contrário, retorna o valor padrão ($custom-color).
O CSS gerado
1body {
2 background-color: blue;
3}- Como a variável
$themeécustom, a cor de fundo é azul.
Casos de uso práticos
Alternância de tema
Abaixo está um exemplo que altera os estilos do botão com base no tema.
1$theme: "dark";
2
3.button {
4 background-color: if($theme == "dark", #333, #fff);
5 color: if($theme == "dark", #fff, #333);
6 border: 1px solid if($theme == "dark", #444, #ccc);
7}- Este código é um exemplo condicional em SASS que alterna as cores de fundo, texto e borda de um botão com base no valor da variável
$theme. A funçãoif()é usada para definir dinamicamente estilos para temas escuros e claros.
O CSS gerado
1.button {
2 background-color: #333;
3 color: #fff;
4 border: 1px solid #444;
5}- Ao alternar o tema, você pode alterar de forma uniforme o design geral.
Exemplo avançado: definindo dinamicamente o contraste de cor
Vamos ver um exemplo que define automaticamente a cor do texto com base na cor de fundo.
Código de Exemplo
1@use "sass:color";
2
3$background-color: #000;
4
5$text-color: if(
6 color.channel($background-color, "lightness", $space: hsl) > 50%,
7 black,
8 white
9);
10
11body {
12 background-color: $background-color;
13 color: $text-color;
14}- A função
color.channel()é usada para obter a luminosidade (lightness) da cor de fundo. Se esse valor for maior que50%, o preto é escolhido; se for menor, o branco é escolhido como cor do texto, otimizando automaticamente o contraste com o fundo.
O CSS gerado
1body {
2 background-color: #000;
3 color: white;
4}- Ao usar a função
if(), você pode implementar estilos flexíveis que levam em conta a acessibilidade do design, como ajustar o contraste.
Combinando com @function
Usar a função if dentro de uma @function permite um design de estilos ainda mais flexível.
Código de Exemplo
1@function theme-color($theme, $type) {
2 @return if(
3 $theme == "dark",
4 if(
5 $type == "background",
6 black,
7 white
8 ),
9 if(
10 $type == "background",
11 white,
12 black
13 )
14 );
15}
16
17body {
18 background-color: theme-color("dark", "background");
19 color: theme-color("dark", "text");
20}- Este código demonstra o uso de
if()dentro de uma@functionpara retornar cores adequadas com base no tema e no tipo de cor. Isso possibilita um design de estilos consistente e reutilizável para cada tema.
O CSS gerado
1body {
2 background-color: black;
3 color: white;
4}- Ao criar e usar funções auxiliares que aproveitam a função
if(), você pode melhorar a manutenibilidade de todo o projeto.
Notas
-
A função
ifnão pode ser usada com valores dinâmicos Como o próprio CSS é uma linguagem estática, a funçãoifdetermina os valores no momento em que o SASS é compilado. Para lógica condicional em tempo de execução, é necessário usar JavaScript. -
Priorize a legibilidade Como as funções
ifaninhadas podem se tornar complexas e prejudicar a legibilidade, você pode usar@mixine@functiondo SASS conforme necessário para organizar seu código.
Conclusão
A função if do SASS é uma ferramenta poderosa que retorna valores diferentes dependendo das condições. Ela é útil não apenas para condicionais simples, mas também em muitos cenários, como alternância de tema e configurações dinâmicas de estilo. No entanto, ao lidar com condições complexas, preste atenção à legibilidade e aproveite @mixin e @function para melhorar a manutenibilidade.
Ao dominar a função if, você pode alcançar um design de estilos mais eficiente e flexível.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.