Sélecteurs et cascade
Quand deux règles donnent des couleurs différentes au même élément, CSS ne devine pas. Il compare les sélecteurs, et un id l'emporte sur n'importe quel nombre de classes.
Choisir des éléments
Un sélecteur est un motif qui correspond à des éléments de la page. Les plus simples sélectionnent par nom d'élément, par classe ou par id. p est un sélecteur de type et correspond à tous les paragraphes. .note est un sélecteur de classe et correspond à tous les éléments qui ont class="note" ; un élément peut avoir plusieurs classes séparées par des espaces, et une même classe peut servir sur de nombreux éléments. #intro est un sélecteur d'id et correspond à l'unique élément qui a id="intro". *, le sélecteur universel, correspond à tout.
p { line-height: 1.5; } /* every p */
.note { background: #fff4d6; } /* class="note" */
#intro { font-size: 20px; } /* id="intro" */
h1, h2 { font-weight: 600; } /* group: h1 and h2 */
nav a { text-decoration: none; } /* a anywhere inside nav */
ul > li { margin: 4px 0; } /* li that is a direct child of ul */
a:hover { text-decoration: underline; }
input[type="email"] { width: 20em; }Combiner des sélecteurs
Une virgule regroupe des sélecteurs qui partagent les mêmes déclarations : h1, h2 met donc en forme les deux. Un espace est le combinateur descendant : nav a correspond aux liens situés n'importe où dans un nav, à n'importe quelle profondeur. > est plus strict et ne correspond qu'aux enfants directs. Écrire deux sélecteurs simples collés, sans espace, comme a.active, signifie qu'un même élément doit correspondre aux deux : un lien qui a aussi la classe active. Les sélecteurs d'attribut, entre crochets, sélectionnent selon un attribut, par exemple input[type="email"].
Les pseudo-classes, écrites avec un seul deux-points, sélectionnent des éléments dans un état ou une position particulière : :hover quand le pointeur est dessus, :focus-visible quand l'élément a le focus clavier, :first-child quand c'est le premier enfant de son parent. Les pseudo-éléments, écrits avec deux deux-points, mettent en forme une partie d'un élément, comme ::first-line ou ::placeholder.
Quand les règles ne sont pas d'accord
Souvent, plusieurs règles définissent la même propriété sur le même élément. La cascade, le C de CSS, décide laquelle l'emporte. En laissant de côté les styles propres au navigateur et !important, deux questions règlent presque tous les cas. D'abord, quel sélecteur est le plus spécifique ? La spécificité se compte avec trois nombres : les id, puis les classes (y compris les sélecteurs d'attribut et les pseudo-classes), puis les noms d'éléments. #menu a vaut 1-0-1, .active vaut 0-1-0 et nav a vaut 0-0-2. Les nombres se comparent en partant de la gauche, donc un seul id l'emporte sur n'importe quel nombre de classes. Ensuite, à spécificité égale, c'est la règle placée le plus loin dans la feuille de style qui gagne.
Les attributs style en ligne l'emportent sur tous les sélecteurs, et une déclaration marquée !important l'emporte sur les déclarations normales. Ce sont deux solutions rapides tentantes, mais elles compliquent la modification suivante, car on ne peut les surpasser qu'en en rajoutant. La plupart des équipes gardent une spécificité faible et homogène, en mettant en forme surtout avec des classes, pour que l'ordre dans le fichier suffise à prévoir le résultat.
L'héritage
Certaines propriétés passent automatiquement du parent à l'enfant. Définis color ou font-family sur body, et chaque paragraphe, liste et cellule de tableau à l'intérieur en hérite, sauf si une règle définit sa propre valeur. Les propriétés liées au texte sont en général héritées ; celles liées à la boîte, comme width, padding, border et margin, ne le sont pas. C'est pour cela qu'une bordure sur une section n'apparaît pas autour de chaque paragraphe qu'elle contient. Le mot-clé inherit force une propriété à copier la valeur de son parent.
Nomme les classes d'après ce qu'est l'élément, pas d'après son apparence. .warning garde son sens quand le designer passe la couleur du rouge à l'orange ; .red-text, non. Les id sont uniques : mieux vaut les réserver aux cibles de liens et aux étiquettes de formulaire plutôt qu'à la mise en forme, ce qui garde une spécificité faible.
| sélecteur de type | p, h1, a : tous les éléments de ce nom |
| sélecteur de classe | .nom : tous les éléments qui ont cette classe |
| sélecteur d'id | #nom : l'unique élément qui a cet id |
| combinateur descendant | Un espace : nav a = un a n'importe où dans nav |
| pseudo-classe | :hover, :focus-visible : un état ou une position |
| spécificité | id-classes-types, comparés en partant de la gauche |
| cascade | Les règles qui décident quelle déclaration l'emporte |
| héritage | Les propriétés de texte passent du parent à l'enfant |
- Quel sélecteur correspond à
<p class="note">?- .note
- #note
- note
- À quoi correspond
nav a?- Aux liens situés n'importe où dans un nav
- Aux éléments nav et à tous les liens
- Seulement aux liens enfants directs de nav
- Que fait
h1, h2?- Il applique la règle à la fois aux h1 et aux h2
- Il correspond aux h2 situés dans un h1
- Il ne correspond à rien
- Quelle est la spécificité de
#menu .item a?- 1-1-1
- 0-2-1
- 1-0-2
.a.b.c(0-3-0) et#x(1-0-0) donnent des couleurs différentes à un même élément. Lequel gagne ?- #x
- .a.b.c
- The one written later
- Deux règles ont la même spécificité. Laquelle gagne ?
- Celle qui vient plus loin dans la feuille de style
- Celle qui vient avant
- Aucune ne s'applique
- Quelle propriété est héritée par défaut ?
- color
- border
- padding
- Quelle pseudo-classe met en forme un élément qui a le focus clavier ?
- :focus-visible
- :hover
- :first-child
- À quoi correspond
a.active?- À un lien qui a la classe active
- À tout élément de classe active situé dans un lien
- À tous les liens et à tous les éléments .active
- Pourquoi éviter !important pour les corrections de tous les jours ?
- On ne peut le surpasser qu'avec d'autres !important, donc les modifications suivantes deviennent plus difficiles
- Ce n'est pas du CSS valide
- Cela ralentit le navigateur
- p, .classe, #id ; la virgule regroupe ; l'espace signifie descendant ; > signifie enfant.
- La spécificité id-classes-types décide ; en cas d'égalité, la dernière règle gagne.
- Les propriétés de texte sont héritées ; les propriétés de boîte ne le sont pas.
Sources de ce cours (6)
- W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
- MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
- W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
- W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
- 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
- every code exercise checked with a Playwright probe against a reference solution.
Consulté le: 2026-10-17