La funzione `if` in SASS
Questo articolo spiega la funzione if in SASS.
Esamineremo tutto, dalle basi della funzione if alle tecniche avanzate, passo dopo passo.
YouTube Video
La funzione if in SASS
La funzione if() è una semplice funzione condizionale fornita da SASS che restituisce uno di due valori in base a una condizione booleana. È simile all'operatore ternario di JavaScript.
Sintassi
La sintassi è la seguente:.
1// if(condition, trueValue, falseValue)- Se
conditionè true, restituiscetrueValue; se è false, restituiscefalseValue.
Uso di base
Ad esempio, puoi usare la funzione if() per cambiare i colori di sfondo e del testo a seconda che il tema sia scuro o chiaro.
Codice di esempio
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 la variabile
$themeè"dark", lo sfondo diventa nero con testo bianco; se è"light", lo sfondo diventa bianco con testo nero.
Il CSS generato
1body {
2 background-color: black;
3 color: white;
4}- Poiché la variabile
$themeè"dark", lo sfondo è nero con testo bianco.
Differenze tra l'istruzione @if e la funzione if()
Sass mette a disposizione un'istruzione @if e una funzione if() per la ramificazione condizionale, ma vengono usate per scopi diversi.
Codice di esempio
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}- L'istruzione
@ifcontrolla quale codice viene generato in fase di compilazione di Sass. - Al contrario, la funzione
if()restituisce un valore ed è usata per selezionare dinamicamente i valori all'interno delle espressioni.
Il CSS generato
1body {
2 background-color: black;
3 color: white;
4}- In questo esempio, poiché
$themeè"dark", vengono applicati uno sfondo nero e un colore del testo bianco. - Le due principali differenze sono che l'istruzione
@ifcontrolla la struttura, mentre la funzioneif()restituisce un valore.
Uso di funzioni if annidate
Quando hai bisogno di ramificazioni complesse, puoi annidare funzioni if.
Codice di esempio
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
$themeè"dark", restituisce il nero; se è"light", restituisce il bianco; altrimenti restituisce il valore predefinito ($custom-color).
Il CSS generato
1body {
2 background-color: blue;
3}- Poiché la variabile
$themeècustom, il colore di sfondo è blu.
Casi d'uso pratici
Cambio del tema
Di seguito un esempio che cambia gli stili dei pulsanti in base al 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}- Questo codice è un esempio di condizionali SASS che commuta i colori di sfondo, testo e bordo di un pulsante in base al valore della variabile
$theme. La funzioneif()viene utilizzata per impostare dinamicamente gli stili per i temi scuro e chiaro.
Il CSS generato
1.button {
2 background-color: #333;
3 color: #fff;
4 border: 1px solid #444;
5}- Cambiando il tema, puoi modificare in modo uniforme l'intero design.
Esempio avanzato: impostazione dinamica del contrasto dei colori
Vediamo un esempio che imposta automaticamente il colore del testo in base al colore di sfondo.
Codice di esempio
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}- La funzione
color.channel()è usata per ottenere la luminosità (lightness) del colore di sfondo. Se quel valore è maggiore di50%, viene scelto il nero; se è minore, viene scelto il bianco come colore del testo, ottimizzando automaticamente il contrasto con lo sfondo.
Il CSS generato
1body {
2 background-color: #000;
3 color: white;
4}- Usando la funzione
if()è possibile implementare stili flessibili che tengano conto dell'accessibilità del design, come l'adeguamento del contrasto.
Combinare con @function
Usare la funzione if all'interno di una @function consente una progettazione degli stili ancora più flessibile.
Codice di esempio
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}- Questo codice dimostra l'uso di
if()all'interno di una@functionper restituire colori appropriati in base al tema e al tipo di colore. Ciò consente una progettazione degli stili coerente e riutilizzabile per ciascun tema.
Il CSS generato
1body {
2 background-color: black;
3 color: white;
4}- Creando e usando funzioni di supporto che sfruttano la funzione
if(), è possibile migliorare la manutenibilità dell'intero progetto.
Note
-
La funzione
ifnon può essere usata con valori dinamici Poiché il CSS è di per sé un linguaggio statico, la funzioneifdetermina i valori al momento della compilazione di SASS. Per la logica condizionale in fase di esecuzione, è necessario usare JavaScript. -
Dai priorità alla leggibilità Poiché le funzioni
ifannidate possono diventare complesse e compromettere la leggibilità, è possibile utilizzare SASS@mixine@functionsecondo necessità per organizzare il codice.
Conclusione
La funzione if di SASS è uno strumento potente che restituisce valori diversi a seconda delle condizioni. È utile non solo per semplici condizioni, ma anche in molti scenari come il cambio del tema e le impostazioni dinamiche degli stili. Tuttavia, quando si gestiscono condizioni complesse, presta attenzione alla leggibilità e sfrutta @mixin e @function per migliorare la manutenibilità.
Padroneggiando la funzione if, puoi ottenere una progettazione degli stili più efficiente e flessibile.
Puoi seguire l'articolo sopra utilizzando Visual Studio Code sul nostro canale YouTube. Controlla anche il nostro canale YouTube.