Découvrez ce que signifie la spécificité CSS et pourquoi c'est important
Que se passe-t-il lorsqu'un élément est ciblé par plusieurs règles, avec différents sélecteurs, qui affectent la même propriété?
Par exemple, parlons de cet élément:
<p class="dog-name">Roger</p>
Nous pouvons avoir
.dog-name {
color: yellow;
}
et une autre règle qui ciblep
, qui définit la couleur sur une autre valeur:
p {
color: red;
}
Et une autre règle qui ciblep.dog-name
. Quelle règle prévaudra sur les autres et pourquoi?
Entrez la spécificité.La règle la plus spécifique l'emportera. Si deux règles ou plus ont lemême spécificité, celle qui apparaît en dernier gagne.
Parfois, ce qui est plus spécifique dans la pratique est un peu déroutant pour les débutants. Je dirais que c'est aussi déroutant pour les experts qui ne regardent pas ces règles aussi souvent ou qui les négligent tout simplement.
Comment calculer la spécificité
La spécificité est calculée à l'aide d'une convention.
Nous avons 4 emplacements, et chacun d'eux commence à 0:0 0 0 0
. La fente à gauche est la plus importante et celle la plus à droite est la moins importante.
Comme cela fonctionne pour les nombres dans le système décimal:1 0 0 0
est supérieur à0 1 0 0
.
Slot 1
Le premier emplacement, le plus à droite, est le moins important.
Nous augmentons cette valeur lorsque nous avons unsélecteur de type. Un type est un nom de balise. Si vous avez plusieurs sélecteurs de type dans la règle, vous incrémentez en conséquence la valeur stockée dans cet emplacement.
Exemples:
p {
} /* 0 0 0 1 */
span {
} /* 0 0 0 1 */
p span {
} /* 0 0 0 2 */
p > span {
} /* 0 0 0 2 */
div p > span {
} /* 0 0 0 3 */
Slot 2
Le deuxième slot est incrémenté de 3 choses:
- sélecteurs de classe
- sélecteurs de pseudo-classes
- sélecteurs d'attributs
Chaque fois qu'une règle rencontre l'une de celles-ci, nous incrémentons la valeur de la deuxième colonne à partir de la droite.
Exemples:
.name {
} /* 0 0 1 0 */
.users .name {
} /* 0 0 2 0 */
[href$='.pdf'] {
} /* 0 0 1 0 */
:hover {
} /* 0 0 1 0 */
Bien entendu, les sélecteurs de slot 2 peuvent être combinés avec les sélecteurs de slot 1:
div .name {
} /* 0 0 1 1 */
a[href$='.pdf'] {
} /* 0 0 1 1 */
.pictures img:hover {
} /* 0 0 2 1 */
Une bonne astuce avec les classes est que vous pouvez répéter la même classe et augmenter la spécificité. Par exemple:
.name {
} /* 0 0 1 0 */
.name.name {
} /* 0 0 2 0 */
.name.name.name {
} /* 0 0 3 0 */
Slot 3
L'emplacement 3 contient la chose la plus importante qui peut affecter votre spécificité CSS dans un fichier CSS: leid
.
Chaque élément peut avoir unid
attribut attribué, et nous pouvons l'utiliser dans notre feuille de style pour cibler l'élément.
Exemples:
#name {
} /* 0 1 0 0 */
.user #name {
} /* 0 1 1 0 */
#name span {
} /* 0 1 0 1 */
Slot 4
L'emplacement 4 est affecté par les styles en ligne. Tout style en ligne aura la priorité sur toute règle définie dans un fichier CSS externe, ou à l'intérieur dustyle
balise dans l'en-tête de la page.
Exemple:
<p style="color: red">Test</p> /* 1 0 0 0 */
Même si une autre règle du CSS définit la couleur, cette règle de style en ligne sera appliquée. Sauf pour un cas - si!important
is used, which fills the slot 5.
Importance
La spécificité n'a pas d'importance si une règle se termine par!important
:
p {
font-size: 20px !important;
}
Cette règle prévaudra sur toute règle avec plus de spécificité
Ajouter!important
dans une règle CSS va rendre cette règle plus importante que toute autre règle, selon les règles de spécificité. La seule façon dont une autre règle peut avoir préséance est d'avoir!important
ainsi, et ont une plus grande spécificité dans les autres emplacements moins importants.
Des astuces
En général, vous devez utiliser la quantité de spécificité dont vous avez besoin, mais pas plus. De cette façon, vous pouvez créer d'autres sélecteurs pour écraser les règles définies par les règles précédentes sans devenir fou.
!important
est un outil très débattu que CSS nous offre. De nombreux experts CSS déconseillent son utilisation. Je me retrouve à l'utiliser surtout lorsque j'essaie un style et une règle CSS a tellement de spécificité que je dois utiliser!important
pour que le navigateur applique mon nouveau CSS.
Mais généralement,!important
ne devrait avoir aucune place dans vos fichiers CSS.
En utilisant leid
attribut au style CSS est également beaucoup débattu, car il a une spécificité très élevée. Une bonne alternative consiste à utiliser des classes à la place, qui ont moins de spécificité, et sont donc plus faciles à utiliser, et elles sont plus puissantes (vous pouvez avoir plusieurs classes pour un élément, et une classe peut être réutilisée plusieurs fois).
Outils pour calculer la spécificité
Vous pouvez utiliser le sitehttps://specificity.keegan.st/pour effectuer automatiquement le calcul de spécificité.
C'est utile surtout si vous essayez de comprendre les choses, car cela peut être un bon outil de rétroaction.
Téléchargez mon gratuitManuel CSS
Plus de didacticiels CSS:
- Le guide Flexbox
- Tutoriel CSS Grid
- Variables CSS (propriétés personnalisées)
- Introduction à PostCSS
- La propriété CSS margin
- Comment centrer un élément avec CSS
- Polices système CSS
- Comment imprimer votre HTML avec style
- Un guide d'introduction aux transitions CSS
- Un didacticiel sur les animations CSS
- Introduction au CSS
- Le guide CSS
- Comment configurer Tailwind avec PurgeCSS et PostCSS
- La feuille de triche de Tailwind
- Comment faire pivoter en continu une image en utilisant CSS
- Rendre un tableau réactif en utilisant CSS
- Comment déboguer CSS en divisant en deux
- Sélecteurs CSS
- Cascade CSS
- Spécificité CSS
- Sélecteurs d'attributs CSS
- Couleurs CSS
- Unités CSS
- URL CSS ()
- Typographie CSS
- Le modèle CSS Box
- La propriété de position CSS
- Requêtes multimédias CSS et conception réactive
- Requêtes de fonctionnalités CSS
- Transformations CSS
- Comment styliser des listes en utilisant CSS
- Préfixes de fournisseur CSS
- Héritage CSS
- Pseudo-classes CSS
- Pseudo éléments CSS
- Styliser les tableaux HTML avec CSS
- La propriété d'affichage CSS
- La fonction CSS calc ()
- Bordures CSS
- Importer un fichier CSS avec @import
- Gestion des erreurs CSS
- Filtres CSS
- Dimensionnement de la boîte CSS
- Arrière-plans CSS
- Commentaires CSS
- Polices CSS
- Remplissage CSS
- La propriété CSS float et la compensation
- Normalisation CSS
- La propriété CSS z-index
- Comment désactiver la sélection de texte à l'aide de CSS
- Comment mettre un élément au bas de son conteneur en utilisant CSS
- Comment inverser les couleurs en utilisant CSS
- Balises pré réactives en CSS
- Intégrations de vidéos YouTube réactives
- Quelles sont les bonnes valeurs CSS Breakpoint pour le Responsive Design?
- Comment aligner le centre dans Flexbox