Français

Explorez la règle CSS @when, une fonctionnalité puissante pour appliquer des styles conditionnels selon le support du navigateur, la taille de l'écran et plus encore.

Règle @when en CSS : Maîtriser l'Application de Style Conditionnelle

Le monde du CSS est en constante évolution, offrant aux développeurs des moyens plus puissants et flexibles pour styliser les pages web. Une de ces fonctionnalités qui gagne en popularité est la règle @when, aussi connue sous le nom de CSS Conditional Rules Module Level 1. Cette règle vous permet d'appliquer des styles CSS de manière conditionnelle, en fonction de la satisfaction de conditions spécifiques. C'est un outil puissant pour le design responsive, la détection de fonctionnalités et la création de feuilles de style plus robustes et adaptables.

Qu'est-ce que la Règle CSS @when ?

La règle @when est une règle @ conditionnelle en CSS qui vous permet de définir des styles qui ne sont appliqués que si certaines conditions sont remplies. Voyez-la comme une instruction if pour votre CSS. Contrairement aux media queries, qui se concentrent principalement sur les caractéristiques de la fenêtre d'affichage (taille de l'écran, orientation, etc.), @when offre une manière plus générale et extensible de gérer le style conditionnel. Elle étend les règles @ conditionnelles existantes comme @supports et @media.

Principaux Avantages de l'Utilisation de @when

Syntaxe de la Règle @when

La syntaxe de base de la règle @when est la suivante :
@when <condition> {
  /* Règles CSS à appliquer lorsque la condition est vraie */
}

La <condition> peut être n'importe quelle expression booléenne valide qui s'évalue à vrai ou faux. Cette expression implique souvent :

Exemples Pratiques de @when en Action

Explorons quelques exemples pratiques pour illustrer la puissance et la polyvalence de la règle @when.

1. Design Responsive avec @when et les Media Queries

Le cas d'utilisation le plus courant pour @when est le design responsive, où vous ajustez les styles en fonction de la taille de l'écran. Bien que les media queries puissent accomplir cela seules, @when offre une approche plus structurée et lisible, surtout lorsqu'il s'agit de conditions complexes.

@when (min-width: 768px) and (max-width: 1023px) {
  body {
    font-size: 18px;
    line-height: 1.6;
  }
  .container {
    width: 720px;
    margin: 0 auto;
  }
}

Dans cet exemple, les styles à l'intérieur du bloc @when ne sont appliqués que lorsque la largeur de l'écran est comprise entre 768px et 1023px (taille typique d'une tablette). Cela fournit un moyen clair et concis de définir des styles pour des plages de vue spécifiques.

Note sur l'internationalisation : Le design responsive est essentiel pour une audience mondiale. Prenez en compte les tailles d'écran variables selon les régions. Par exemple, l'utilisation du mobile est plus élevée dans certains pays, ce qui rend la conception "mobile-first" encore plus cruciale.

2. Détection de Fonctionnalités avec @when et @supports

@when peut être combinée avec @supports pour appliquer des styles uniquement lorsqu'une fonctionnalité CSS spécifique est supportée par le navigateur. Cela vous permet d'améliorer progressivement votre site web, offrant une meilleure expérience aux utilisateurs avec des navigateurs modernes tout en maintenant la compatibilité avec les plus anciens.

@when supports(display: grid) {
  .container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    grid-gap: 20px;
  }
}

@when not supports(display: grid) {
  .container {
    /* Styles de secours pour les navigateurs ne supportant pas grid */
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
  }
  .item {
    width: calc(50% - 10px); /* Ajuster la largeur pour les anciens navigateurs */
  }
}

Ici, nous utilisons @supports pour vérifier si le navigateur supporte CSS Grid Layout. Si c'est le cas, nous appliquons des styles basés sur la grille au .container. Sinon, nous fournissons des styles de secours utilisant flexbox pour garantir qu'une mise en page similaire soit obtenue dans les navigateurs plus anciens.

Note sur l'accessibilité globale : La détection de fonctionnalités est importante pour l'accessibilité. Les navigateurs plus anciens peuvent ne pas supporter les nouveaux attributs ARIA ou les éléments sémantiques HTML5. Fournissez des solutions de repli appropriées pour garantir que le contenu reste accessible.

3. Combiner Media Queries et Requêtes de Fonctionnalité

La vraie puissance de @when vient de sa capacité à combiner les media queries et les requêtes de fonctionnalité pour créer des règles de style conditionnelles plus complexes et nuancées.

@when (min-width: 768px) and supports(backdrop-filter: blur(10px)) {
  .modal {
    background-color: rgba(255, 255, 255, 0.8);
    backdrop-filter: blur(10px);
  }
}

Dans cet exemple, l'élément .modal n'aura un arrière-plan flouté que lorsque la largeur de l'écran est d'au moins 768px et que le navigateur supporte la propriété backdrop-filter. Cela vous permet de créer des effets visuellement attrayants sur les navigateurs modernes tout en évitant les problèmes de performance potentiels ou les défauts de rendu sur les plus anciens.

4. Stylisation Basée sur les Propriétés Personnalisées (Variables CSS)

@when peut également être utilisée en conjonction avec les Propriétés Personnalisées CSS (aussi connues sous le nom de variables CSS) pour créer un style dynamique et basé sur l'état. Vous pouvez utiliser JavaScript pour mettre à jour la valeur d'une propriété personnalisée, puis utiliser @when pour appliquer différents styles en fonction de cette valeur.

D'abord, définissez une propriété personnalisée :

:root {
  --theme-color: #007bff; /* Couleur de thème par défaut */
  --is-dark-mode: false;
}

Ensuite, utilisez @when pour appliquer des styles basés sur la valeur de la propriété personnalisée :

@when var(--is-dark-mode) = true {
  body {
    background-color: #333;
    color: #fff;
  }
  a {
    color: #ccc;
  }
}

Enfin, utilisez JavaScript pour basculer la valeur de la propriété personnalisée --is-dark-mode :

document.getElementById('darkModeToggle').addEventListener('click', function() {
  document.documentElement.style.setProperty('--is-dark-mode', this.checked);
});

Cela permet aux utilisateurs de basculer entre les thèmes clair et sombre, avec le CSS se mettant à jour dynamiquement en fonction de la valeur de la propriété personnalisée. Notez que la comparaison directe des variables CSS dans `@when` pourrait ne pas être universellement supportée par tous les navigateurs. À la place, vous pourriez avoir besoin d'utiliser une solution de contournement avec une media query vérifiant une valeur non nulle :

@when ( --is-dark-mode > 0 ) { ... }

Cependant, assurez-vous que la propriété personnalisée a une valeur numérique pour que cela fonctionne correctement.

Note sur l'accessibilité : Fournir des thèmes alternatifs (ex: mode sombre) est crucial pour l'accessibilité. Les utilisateurs ayant des déficiences visuelles peuvent bénéficier de thèmes à contraste élevé. Assurez-vous que votre sélecteur de thème est accessible via le clavier et les lecteurs d'écran.

5. Stylisation Basée sur les Attributs de Données

Vous pouvez également utiliser @when avec des attributs de données pour styliser des éléments en fonction de leurs valeurs de données. Cela peut être utile pour créer des interfaces dynamiques où les éléments changent d'apparence en fonction de l'interaction de l'utilisateur ou des mises à jour de données.

Par exemple, disons que vous avez une liste de tâches, et chaque tâche a un attribut data-status qui indique son état (ex: "todo", "in-progress", "completed"). Vous pouvez utiliser @when pour styliser chaque tâche différemment en fonction de son état.

[data-status="todo"] {
  /* Styles par défaut pour les tâches à faire */
  color: #333;
}

@when attribute(data-status string equals "in-progress") {
  [data-status="in-progress"] {
    color: orange;
    font-style: italic;
  }
}

@when attribute(data-status string equals "completed") {
  [data-status="completed"] {
    color: green;
    text-decoration: line-through;
  }
}

Note : le support pour la condition de test attribute() peut être limité ou pas entièrement implémenté sur tous les navigateurs actuellement. Testez toujours de manière approfondie.

Compatibilité Navigateur et Polyfills

Fin 2024, le support de la règle @when par les navigateurs est encore en évolution. Bien que de nombreux navigateurs modernes supportent la fonctionnalité de base, certains navigateurs plus anciens pourraient ne pas le faire. Il est donc crucial de vérifier les tableaux de compatibilité et d'utiliser des solutions de repli ou des polyfills appropriés si nécessaire.

Consultez toujours des ressources comme Can I use... pour vérifier l'état actuel du support de @when et des fonctionnalités associées par les navigateurs.

Meilleures Pratiques pour l'Utilisation de @when

Conclusion

La règle @when est un ajout puissant à la boîte à outils CSS, offrant aux développeurs une manière plus flexible et expressive d'appliquer des styles de manière conditionnelle. En la combinant avec les media queries, les requêtes de fonctionnalité et les Propriétés Personnalisées CSS, vous pouvez créer des feuilles de style plus robustes, adaptables et maintenables. Bien que le support par les navigateurs soit encore en évolution, @when est une fonctionnalité qui mérite d'être explorée et intégrée dans votre flux de travail de développement web moderne.

Alors que le web continue d'évoluer, la maîtrise de fonctionnalités comme @when sera essentielle pour créer des expériences engageantes, accessibles et performantes pour les utilisateurs du monde entier. Adoptez la puissance du style conditionnel et débloquez de nouvelles possibilités dans votre développement CSS.