@scope pour des styles à portée limitée
Limitez la portée des règles CSS à des sous-arbres précis à l’aide de la règle @scope.
@scope pour des styles à portée limitée est une leçon CSS Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage CSS Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours CSS Academy comprend 4 leçons au total.
Qu'est-ce que @scope ?
La règle @scope (@scope) (Chrome 118+, Safari 17.4+) limite les règles CSS à un sous-arbre précis du DOM. Les règles placées dans @scope s'appliquent uniquement aux éléments situés dans la racine de portée déclarée, ce qui empêche les styles de se propager entre les composants.
Syntaxe de base
Déclarez une portée avec un sélecteur de racine de portée. Toutes les règles qu'elle contient s'appliquent uniquement aux descendants des racines de portée correspondantes, et non à l'ensemble du document.
<div class="card">
<div class="title">Scoped Title</div>
<div class="body">Scoped body text — styles only apply inside .card.</div>
</div>
Racine de portée
La racine de portée (@scope (.card)) définit le point d'entrée. Les éléments situés dans la portée qui correspondent à .title sont stylisés. Les éléments situés en dehors de .card et possédant la classe .title ne sont pas affectés : cela permet une véritable encapsulation des styles sans DOM encapsulé.
Limite de portée (frontière de portée)
Vous pouvez définir une frontière de portée avec to : @scope (.card) to (.nested-card). Les règles s'appliquent dans .card, mais s'arrêtent aux descendants .nested-card : les styles sont ainsi limités à un niveau d'imbrication des composants et les instances plus profondes sont exclues.
Pseudo-classe :scope dans @scope
Dans un bloc @scope, :scope désigne l'élément racine de la portée lui-même. @scope (.card) { :scope { border-radius: 8px; } } applique un style directement à l'élément .card, et non à ses descendants.
Spécificité fondée sur la proximité
@scope introduit une spécificité fondée sur la proximité : lorsque plusieurs portées correspondent à un élément, la racine de portée ancêtre la plus proche l'emporte, quelle que soit la spécificité du sélecteur. Cela empêche les styles de composants profondément imbriqués d'être remplacés par ceux de portées ancestrales éloignées.
@scope ou modules CSS
Les modules CSS génèrent des noms de classe hachés uniques pour obtenir une portée au moment de la construction — une préoccupation liée à l’outil de regroupement JavaScript. @scope apporte une portée native dans le navigateur, sans outils de construction, noms hachés ni syntaxe propre à une infrastructure — du CSS pur.
@scope ou DOM fantôme
Le DOM fantôme crée une isolation complète des styles : les styles externes ne peuvent pas le pénétrer. @scope crée une isolation partielle : les styles extérieurs peuvent toujours atteindre les éléments délimités si leur spécificité est suffisamment élevée. @scope constitue une solution plus légère pour limiter la portée des composants sans isolation complète.
Superposition avec @scope
Combinez @scope avec @layer pour contrôler finement la cascade : définissez les styles propres au composant dans une couche de composant. Vous gérez ainsi à la fois l’ordre de la cascade (avec les couches) et la portée des styles (avec @scope), de manière composable et sans acrobaties de nommage de classes.
Cas d’utilisation pratiques
Composants de système de conception : limitez la portée de tous les styles de bouton à @scope (.button-group) afin que les styles des boutons internes ne se propagent jamais à l’extérieur. Isolation de widgets : limitez la portée des styles d’un widget tiers à son conteneur pour éviter les conflits avec les styles globaux de la page.
Compatibilité des navigateurs et solution de repli
@scope est pris en charge par Chrome 118+, Safari 17.4+ et Firefox 128+. Dans les navigateurs non compatibles, les styles placés dans @scope sont ignorés : la cascade utilise alors les styles globaux. Utilisez @scope comme amélioration progressive lorsque la limitation de portée des composants est utile, mais pas indispensable.
Vérification des connaissances
Quel problème @scope résout-il, alors qu’il est difficile de le résoudre avec les seuls sélecteurs CSS traditionnels ?
Résumé
@scope limite l’application des règles CSS à un sous-arbre DOM déclaré, ce qui permet d’encapsuler nativement les styles sans DOM fantôme ni hachage des noms de classe par un outil de construction. Les limites de portée, la spécificité de proximité et l’intégration avec @layer en font une primitive puissante pour les systèmes de conception à portée limitée par composant, en CSS pur.
Questions Fréquemment Posées
La leçon « @scope pour des styles à portée limitée » est-elle gratuite ?
Oui — le texte complet de « @scope pour des styles à portée limitée » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours CSS Academy, passe à CoddyKit PRO. Le cours CSS Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « @scope pour des styles à portée limitée » ?
Limitez la portée des règles CSS à des sous-arbres précis à l’aide de la règle @scope. Tu pratiques CSS Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer CSS Academy ?
Aucune expérience préalable n'est requise. CSS Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « @scope pour des styles à portée limitée » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon CSS Academy ?
Oui. Chaque leçon CSS Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Imbrication CSS native
- :has() : pseudo-classe relationnelle
- @scope pour des styles à portée limitée
- API View Transitions