← Retour aux coursProgrammation

CSS n’est pas une liste de propriétés. C’est un système de règles.

Comprendre la cascade, la spécificité et les modèles de layout permet de créer des interfaces propres sans empiler des corrections au hasard.

Niveau · débutant → intermédiaireLecture · 35 minFlexbox + Grid
Illustration de code CSS
PrérequisHTML de base
ObjectifConstruire un layout responsive
RéférenceMDN CSS

Objectifs d’apprentissage

  • comprendre comment une règle CSS est sélectionnée et appliquée ;
  • maîtriser box model, unités, Flexbox et Grid ;
  • concevoir en mobile-first sans multiplier les breakpoints ;
  • utiliser des variables CSS pour créer des tokens cohérents ;
  • réduire la complexité et les conflits de spécificité.

1. Anatomie d’une règle CSS

.card {
  padding: 1.25rem;
  border-radius: 1rem;
  background: #f5f5f7;
}

Le sélecteur choisit les éléments ; le bloc contient des déclarations ; chaque déclaration associe une propriété à une valeur. Une feuille de style devient maintenable lorsque les sélecteurs restent simples et que les mêmes décisions visuelles sont réutilisées.

2. Cascade, héritage et spécificité

La cascade décide quelle valeur gagne lorsque plusieurs déclarations ciblent la même propriété. Elle tient compte notamment de l’origine des styles, de l’importance, des couches de cascade, de la spécificité et de l’ordre d’apparition.

La spécificité n’est donc pas la seule règle. MDN rappelle qu’elle intervient après la priorité des origines et couches.

Bonne pratiqueÉvite d’escalader vers des sélecteurs toujours plus complexes ou vers !important. Corrige d’abord l’architecture de la cascade.
/* plus simple à maintenir */
.button { ... }
.button--danger { ... }

/* souvent plus fragile */
main .toolbar div.actions button.primary { ... }

3. Le box model

Chaque élément est une boîte composée du contenu, du padding, de la bordure et de la marge. Avec box-sizing: border-box, la largeur déclarée inclut padding et bordure, ce qui simplifie beaucoup les calculs de layout.

*, *::before, *::after {
  box-sizing: border-box;
}

4. Les unités : choisir selon le problème

UnitéUsage courant
pxpetites dimensions précises, bordures, icônes
remespacements et tailles liées à la racine
%dimension relative au conteneur
vw/vh/dvhdimension relative au viewport
frpart de l’espace disponible en Grid
clamp()valeur fluide encadrée par un minimum et un maximum
h1 {
  font-size: clamp(2.5rem, 7vw, 6rem);
}

5. Flexbox : aligner sur un axe

Flexbox est excellent pour les barres de navigation, groupes de boutons, listes horizontales et composants dont la distribution principale suit une ligne ou une colonne.

.toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}

6. Grid : construire une grille en deux dimensions

Grid permet de définir lignes et colonnes ensemble. Une grille responsive peut souvent fonctionner sans media query grâce à minmax() et auto-fit.

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 1.25rem;
}

7. Responsive : laisser le contenu guider les breakpoints

Un design responsive n’est pas une collection de tailles d’iPhone. MDN recommande des layouts flexibles puis des breakpoints lorsque le contenu commence réellement à mal se comporter.

  • commencer par une mise en page simple qui fonctionne sur petit écran ;
  • utiliser Flexbox/Grid avant d’ajouter des media queries ;
  • limiter la largeur des textes longs ;
  • éviter les dimensions fixes lorsque le contenu peut grandir ;
  • tester zoom, orientation et textes longs.
@media (min-width: 60rem) {
  .layout { grid-template-columns: 2fr 1fr; }
}

8. Variables CSS et design tokens

Les propriétés personnalisées centralisent les décisions de design : couleurs, espacements, rayons, durées d’animation.

:root {
  --surface: #f5f5f7;
  --text: #1d1d1f;
  --space: 1rem;
  --radius: 1.5rem;
}
.card {
  background: var(--surface);
  border-radius: var(--radius);
}

9. CSS et accessibilité

Le style ne doit pas casser les comportements utiles du navigateur. Préserve les focus visibles, évite les contrastes trop faibles et respecte la préférence de réduction des animations.

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    scroll-behavior: auto !important;
    animation-duration: .01ms !important;
  }
}
Mini-lab CSS

Règle la personnalité du composant

Déplace les curseurs pour voir l’impact de la teinte et du rayon.

Design utileLe style doit servir le contenu.

Exercice — une grille sans breakpoints inutiles

Crée une grille de cartes qui affiche autant de colonnes que possible, avec une largeur minimale de 220–260 px par carte. Utilise repeat(), auto-fit et minmax(). Ensuite seulement, ajoute un breakpoint si le contenu en a réellement besoin.

CSS & mise en page · atelier progressif

Construire une mise en page qui résiste aux petits écrans

Avant une animation, chaque bloc doit pouvoir se mesurer, se réduire et retourner à la ligne. Flexbox organise une seule direction ; CSS Grid gère lignes et colonnes. Des tailles souples avec minmax() et clamp() évitent de fixer une largeur absolue à chaque carte. La cascade explique pourquoi un style peut être écrasé par un autre.

Pratique pas à pas

  1. Crée trois articles HTML avec une classe card, puis une section englobante de classe grid.
  2. Copie les règles ci-dessous : elles produisent une grille souple sans fixer arbitrairement le nombre de colonnes.
  3. Réduis la fenêtre à 320 pixels et vérifie qu’aucune carte ne provoque un défilement horizontal. Navigue aussi au clavier pour voir les contours de focus.

Exemple à essayer

:root { --gap: 1rem; }
.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
  gap: var(--gap);
}
.card {
  min-width: 0;
  padding: clamp(1rem, 3vw, 2rem);
  border: 1px solid #cbd5e1;
  border-radius: 1.25rem;
}
.card:focus-within { outline: 2px solid #2563eb; }

Ce que tu dois observer : Les cartes passent automatiquement sur moins de colonnes si l’espace diminue. min(100%, 260px) évite qu’une carte impose 260 px quand le conteneur est plus étroit.

Erreur fréquente : Accumuler !important, fixer une largeur en pixels pour chaque écran ou masquer un débordement plutôt que corriger sa cause.

Vérifie que tu as compris

Quand privilégier Grid plutôt que Flexbox ?

Grid convient lorsque les lignes et colonnes doivent s’aligner entre elles ; Flexbox convient aux alignements sur un axe.

Pourquoi vérifier une mise en page à 320 px ?

Pour repérer les éléments trop larges, les textes coupés et les boutons inaccessibles.

Une fois l’atelier réalisé et les questions comprises, valide cette étape dans ton parcours.

À retenir

  • La cascade est le cœur du CSS.
  • Flexbox résout très bien l’alignement sur un axe ; Grid, les layouts bidimensionnels.
  • Le responsive doit partir de layouts flexibles, pas d’une liste d’appareils.
  • Les variables CSS réduisent les incohérences et facilitent les thèmes.
Pause active

Teste ta compréhension

Quelle approche facilite le plus la maintenance d’un gros CSS ?

Références

Cours suivant

Ajouter du comportement avec JavaScript.

Continuer →