Aller au contenu principal
ShadowAcademy

Les langages CSS La cascade

Spécificité et ordre

Deux règles donnent deux couleurs différentes au même lien : laquelle l'emporte ? Le navigateur tranche en trois étapes.

1. Le poids du sélecteur : la spécificité

Chaque sélecteur reçoit trois nombres (a, b, c) :

Compte dans Exemples
a : les identifiants #menu
b : les classes, attributs, pseudo-classes .actif, [type="text"], :hover
c : les éléments, pseudo-éléments a, li, ::before

On compare a d'abord, puis b, puis c :

#menu a            /* (1, 0, 1) */
.lien-actif        /* (0, 1, 0) : perd, a vaut 0 contre 1 */
#menu .lien-actif  /* (1, 1, 0) : gagne contre (1, 0, 1) */

Un seul identifiant bat n'importe quel nombre de classes. C'est pourquoi on évite les #id dans les feuilles de style : ils rendent les règles très difficiles à surcharger ensuite.

2. À poids égal : la dernière règle écrite

.note { color: red; }
.note { color: navy; }     /* gagne : même spécificité, écrite après */

3. !important, en dernier recours

!important passe devant toute spécificité. Le problème : pour le surcharger, il faut un autre !important, et la feuille devient une surenchère impossible à maintenir. On l'évite ; le bon réflexe face à une règle qui « ne s'applique pas » est de comparer les spécificités.

Le style écrit dans l'attribut style="..." d'un élément passe devant toutes les règles de la feuille, sauf !important.

1 exercice pour cette lecon

Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte

  • Qui gagne ? moyen lecon a valider