Junior
Que savez-vous de la spécificité des sélecteurs CSS ?
sobes.tech IA
Réponse de l'IA
La spécificité détermine la priorité des règles CSS en cas de conflit, lorsque différents styles s'appliquent à un même élément. Elle est calculée pour chaque sélecteur dans la règle.
La spécificité est une évaluation numérique composée de quatre catégories (A, B, C, D), notée comme 0,0,0,0. Plus le nombre est élevé, plus la spécificité est grande.
Catégories :
- A (style en ligne): Styles définis par l'attribut
styledans l'élément HTML. Ils ont la plus haute spécificité (par exemple,1,0,0,0). - B (ID): Sélecteurs par ID (par exemple,
#mon-id). Augmentent le deuxième chiffre (par exemple,0,1,0,0). - C (Classe, Attribut, Pseudo-classe): Sélecteurs par classe (par exemple,
.ma-classe), attribut (par exemple,[type="text"]), pseudo-classe (par exemple,:hover,:first-child). Augmentent le troisième chiffre (par exemple,0,0,1,0). - D (Élément, Pseudo-élément): Sélecteurs par balise HTML (par exemple,
div,p) et pseudo-éléments (par exemple,::before,::after). Augmentent le quatrième chiffre (par exemple,0,0,0,1).
Exemple de calcul :
p-0,0,0,1.ma-classe-0,0,1,0#mon-id-0,1,0,0div p-0,0,0,2(somme des spécificités des deux éléments)#mon-id .ma-classe-0,1,1,0(somme de l'ID et de la classe)div#mon-id.ma-classe:hover-0,1,2,1(somme de la balise, ID, classe et pseudo-classe)
Règles :
- La spécificité du
style en ligneest toujours supérieure à toute combinaison d'autres sélecteurs, sauf si la règle a le drapeau!important. - Les règles avec le drapeau
!importantont la priorité la plus haute, écrasant même le style en ligne. Il n'est pas recommandé d'utiliser!importanten raison de la difficulté de débogage. - En cas d'égalité de spécificité, la règle déclarée en dernier dans le fichier CSS est appliquée.
- Le sélecteur universel (
*) et:where()ont une spécificité de0,0,0,0et n'augmentent pas la spécificité totale.
/*
Spécificité : 0,0,0,1
S'appliquera s'il n'y a pas de règles plus spécifiques
*/
p {
color: blue;
}
/*
Spécificité : 0,0,1,0
Écrasera la règle pour la balise p
*/
.text {
color: green;
}
/*
Spécificité : 0,1,0,0
Écrasera la règle pour la classe .text
*/
#texte-principal {
color: red;
}
/*
Spécificité : 1,0,0,0
S'appliquera si l'élément a l'attribut style="color: purple;"
*/
/* <p style="color: purple;">Texte</p> */
/*
Spécificité très élevée, écrasera tout
Il n'est pas recommandé de l'utiliser sauf en cas de nécessité absolue
*/
.override-text {
color: black !important;
}