La fonction `if` dans SASS
Cet article explique la fonction if dans SASS.
Nous passerons en revue, étape par étape, tout ce qui va des bases de la fonction if aux techniques avancées.
YouTube Video
La fonction if dans SASS
La fonction if() est une fonction conditionnelle simple fournie par SASS qui renvoie l'une de deux valeurs selon une condition booléenne. Elle est similaire à l'opérateur ternaire de JavaScript.
Syntaxe
La syntaxe est la suivante :.
1// if(condition, trueValue, falseValue)- Si
conditionest vraie, elle renvoietrueValue; si elle est fausse, elle renvoiefalseValue.
Utilisation de base
Par exemple, vous pouvez utiliser la fonction if() pour changer les couleurs d'arrière-plan et de texte selon que le thème est sombre ou clair.
Exemple de code
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}- Si la variable
$themevaut"dark", l'arrière-plan devient noir avec un texte blanc ; si elle vaut"light", l'arrière-plan devient blanc avec un texte noir.
Le CSS généré
1body {
2 background-color: black;
3 color: white;
4}- Comme la variable
$themevaut"dark", l'arrière-plan est noir avec un texte blanc.
Différences entre l’instruction @if et la fonction if()
Sass propose une instruction @if et une fonction if() pour les branchements conditionnels, mais elles sont utilisées à des fins différentes.
Exemple de code
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’instruction
@ifdétermine quel code est généré à la compilation de Sass. - À l’inverse, la fonction
if()renvoie une valeur et sert à basculer dynamiquement des valeurs à l’intérieur des expressions.
Le CSS généré
1body {
2 background-color: black;
3 color: white;
4}- Dans cet exemple, puisque
$themevaut"dark", un arrière-plan noir et une couleur de texte blanche sont appliqués. - Les deux principales différences sont que l’instruction
@ifcontrôle la structure, tandis que la fonctionif()renvoie une valeur.
Utilisation de fonctions if imbriquées
Lorsque vous avez besoin de branchements complexes, vous pouvez imbriquer des fonctions if.
Exemple de code
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}- Si
$themevaut"dark", elle renvoie le noir ; si"light", elle renvoie le blanc ; sinon, elle renvoie la valeur par défaut ($custom-color).
Le CSS généré
1body {
2 background-color: blue;
3}- Comme la variable
$themeestcustom, la couleur d'arrière-plan est bleue.
Cas d'utilisation pratiques
Changement de thème
Ci-dessous un exemple qui modifie les styles des boutons en fonction du thème.
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}- Ce code est un exemple conditionnel SASS qui bascule les couleurs d'arrière-plan, de texte et de bordure d'un bouton selon la valeur de la variable
$theme. La fonctionif()est utilisée pour définir dynamiquement des styles pour les thèmes sombre et clair.
Le CSS généré
1.button {
2 background-color: #333;
3 color: #fff;
4 border: 1px solid #444;
5}- En changeant le thème, vous pouvez modifier uniformément l'apparence générale.
Exemple avancé : définition dynamique du contraste des couleurs
Voyons un exemple qui définit automatiquement la couleur du texte en fonction de la couleur d'arrière-plan.
Exemple de code
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 fonction
color.channel()est utilisée pour obtenir la luminosité (lightness) de la couleur d’arrière-plan. Si cette valeur est supérieure à50%, le noir est choisi ; si elle est inférieure, le blanc est choisi comme couleur de texte, ce qui optimise automatiquement le contraste avec l’arrière-plan.
Le CSS généré
1body {
2 background-color: #000;
3 color: white;
4}- En utilisant la fonction
if(), vous pouvez mettre en œuvre des styles flexibles qui prennent en compte l’accessibilité du design, par exemple l’ajustement du contraste.
Combinaison avec @function
L'utilisation de la fonction if à l'intérieur d'une @function permet une conception de styles encore plus flexible.
Exemple de code
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}- Ce code démontre l'utilisation de
if()au sein d'une@functionpour renvoyer des couleurs appropriées en fonction du thème et du type de couleur. Cela permet une conception de styles cohérente et réutilisable pour chaque thème.
Le CSS généré
1body {
2 background-color: black;
3 color: white;
4}- En créant et en utilisant des fonctions utilitaires qui tirent parti de la fonction
if(), vous pouvez améliorer la maintenabilité de l’ensemble du projet.
Notes
-
La fonction
ifne peut pas être utilisée avec des valeurs dynamiques Comme le CSS est lui-même un langage statique, la fonctionifdétermine les valeurs au moment où SASS est compilé. Pour une logique conditionnelle à l'exécution, vous devez utiliser JavaScript. -
Privilégiez la lisibilité Comme les fonctions
ifimbriquées peuvent devenir complexes et nuire à la lisibilité, vous pouvez utiliser les@mixinet@functionde SASS selon les besoins pour organiser votre code.
Conclusion
La fonction if de SASS est un outil puissant qui renvoie des valeurs différentes selon les conditions. Elle est utile non seulement pour des conditions simples, mais aussi dans de nombreux scénarios tels que le changement de thème et les réglages de style dynamiques. Cependant, face à des conditions complexes, prêtez attention à la lisibilité et exploitez @mixin et @function pour améliorer la maintenabilité.
En maîtrisant la fonction if, vous pouvez obtenir une conception de styles plus efficace et plus flexible.
Vous pouvez suivre l'article ci-dessus avec Visual Studio Code sur notre chaîne YouTube. Veuillez également consulter la chaîne YouTube.