Retour aux leçons
Scrollytelling

La cascade CSS

Comment le navigateur résout les styles conflictuels

Qu'est-ce que la cascade ?

Le « C » de CSS signifie Cascading (en cascade). Quand plusieurs règles CSS ciblent le même élément avec des propriétés conflictuelles, le navigateur doit décider laquelle gagne. Cet algorithme de résolution est la cascade.

  L'algorithme de la cascade (simplifié) :
  ────────────────────────────────────
  1. Origine & importance  (auteur vs utilisateur vs navigateur)
  2. Spécificité           (le sélecteur est-il ciblé ?)
  3. Ordre source          (quelle règle vient en dernier ?)
  ────────────────────────────────────

La spécificité

La spécificité est un poids qui détermine quelle règle CSS a la priorité. Elle est calculée comme un tuple de trois nombres : (IDs, Classes, Éléments).

Exemples de spécificité
/* Spécificité : (0, 0, 1) — un élément */
p { color: black; }

/* Spécificité : (0, 1, 0) — une classe */
.highlight { color: blue; }

/* Spécificité : (1, 0, 0) — un ID */
#titre { color: red; }

/* Spécificité : (0, 1, 1) — une classe + un élément */
p.highlight { color: green; }
  Comparaison de spécificité :
  ────────────────────────────
  p              → (0, 0, 1)
  .highlight     → (0, 1, 0)  ← gagne sur p
  #titre         → (1, 0, 0)  ← gagne sur .highlight
  style en ligne → (1, 0, 0, 0) ← gagne sur tout
  ────────────────────────────

L'héritage

Certaines propriétés CSS sont héritées par les éléments enfants. Les propriétés typographiques comme color, font-family et line-height sont héritées. Les propriétés de layout comme margin, padding et border ne le sont pas.

Héritage
body {
  color: #333;           /* Hérité par TOUS les descendants */
  font-family: sans-serif; /* Hérité */
}

.card {
  border: 1px solid #ddd; /* NON hérité */
  padding: 16px;          /* NON hérité */
}

L'ordre source

Quand deux règles ont la même spécificité, la dernière déclarée gagne. C'est pourquoi l'ordre de vos fichiers CSS et de vos règles compte.

L'ordre source gagne
/* Même spécificité (0, 1, 0) */
.text { color: blue; }
.text { color: red; }
/* Résultat : red gagne (déclaré en dernier) */

!important

L'annotation !important surcharge toutes les règles de spécificité. À utiliser avec parcimonie — elle rend le CSS difficile à maintenir.

Bonne pratique

Évitez !important dans vos styles réguliers. Acceptable dans les classes utilitaires et pour surcharger du CSS tiers que vous ne pouvez pas modifier.

Résumé

La spécificité détermine le gagnant

Les IDs battent les classes, les classes battent les éléments. En cas d'égalité, l'ordre source tranche.

L'héritage réduit la répétition

Définissez la typographie sur body et laissez-la cascader. Ne surchargez que là où c'est nécessaire.

Gardez la spécificité basse

Utilisez des classes plutôt que des IDs. Évitez les sélecteurs profondément imbriqués.