Leçon 10 / 12
Leçon 10 · ~30 min · Partie 3 — Mise en page

Flexbox

Le problème à résoudre

Tu veux trois cartes côte à côte, bien alignées, avec un espace égal. Ou un bouton centré dans une div. Ou un logo à gauche et les liens à droite.

Avant Flexbox, c'était compliqué. Centrer verticalement un élément — une vraie blague chez les développeurs.

Flexbox résout tout ça simplement. C'est l'outil de mise en page le plus utilisé aujourd'hui.

C'est quoi Flexbox ?

Flexbox est un mode d'affichage CSS. Il permet d'aligner, d'espacer et d'organiser des éléments en ligne ou en colonne.

Ça fonctionne avec deux niveaux : le conteneur (le parent) et les éléments (les enfants). Tu appliques Flexbox sur le parent. Les enfants obéissent automatiquement.

Activer Flexbox : display flex

Une seule ligne : display: flex sur le conteneur parent. Tous ses enfants directs s'alignent aussitôt en ligne horizontale.

HTML + CSS
<!-- HTML : un parent avec trois enfants -->
<div class="conteneur">
  <div>A</div>
  <div>B</div>
  <div>C</div>
</div>

/* CSS : une seule ligne transforme tout */
.conteneur {
  display: flex;  /* les enfants s'alignent en ligne ! */
}

Résultat : A, B, C s'alignent côte à côte automatiquement.

A
B
C

Direction : flex-direction

Par défaut, les éléments s'alignent en ligne horizontale. Tu peux changer ça.

CSS
.conteneur {
  display: flex;
  flex-direction: row;     /* par défaut — gauche à droite */
  flex-direction: column;  /* vertical — de haut en bas */
  flex-direction: row-reverse;    /* droite à gauche */
  flex-direction: column-reverse; /* de bas en haut */
}

Avec flex-direction: column, les éléments s'empilent verticalement :

A
B
C

Alignement horizontal : justify-content

justify-content contrôle l'alignement sur l'axe principal. Horizontal par défaut. Comment répartir l'espace entre les éléments ?

CSS
.conteneur {
  display: flex;
  justify-content: flex-start;    /* par défaut — tout à gauche */
  justify-content: center;        /* centré */
  justify-content: flex-end;      /* tout à droite */
  justify-content: space-between; /* espace entre chaque élément */
  justify-content: space-around;  /* espace autour de chaque élément */
  justify-content: space-evenly;  /* espace parfaitement égal partout */
}

justify-content: center — les éléments sont centrés :

A
B
C

justify-content: space-between — le premier à gauche, le dernier à droite, le reste réparti :

A
B
C

Alignement vertical : align-items

align-items contrôle l'alignement sur l'axe secondaire. Vertical par défaut. Tes éléments ont des hauteurs différentes — comment les aligner ?

CSS
.conteneur {
  display: flex;
  align-items: stretch;      /* par défaut — s'étire pour remplir */
  align-items: center;       /* centré verticalement */
  align-items: flex-start;   /* aligné en haut */
  align-items: flex-end;     /* aligné en bas */
  align-items: baseline;     /* aligné sur la ligne de base du texte */
}

L'espacement entre éléments : gap

gap ajoute un espace uniforme entre les éléments. Plus simple que des marges sur chaque élément. Pas d'espace avant le premier ni après le dernier — juste entre les éléments.

CSS
.conteneur {
  display: flex;
  gap: 1rem;         /* 16px entre chaque élément */
  gap: 1rem 2rem;    /* 1rem en vertical, 2rem en horizontal */
}

Centrer parfaitement : horizontal ET vertical

Avant Flexbox, centrer quelque chose au milieu d'un bloc était un vrai casse-tête. Maintenant, c'est trois lignes :

CSS — centrage parfait
.conteneur {
  display: flex;
  justify-content: center;   /* centré horizontalement */
  align-items: center;       /* centré verticalement */
  min-height: 100vh;         /* pleine hauteur d'écran */
}

Ces 3 propriétés ensemble (display: flex + justify-content: center + align-items: center) sont la combinaison la plus utilisée en CSS moderne. Mémorise-les. Tu les utiliseras dans tous tes projets.

flex-wrap : si les éléments débordent

Par défaut, Flexbox met tout sur une ligne. Si les éléments manquent de place, ils rétrécissent. Avec flex-wrap: wrap, ceux qui n'ont plus de place passent à la ligne suivante. Indispensable pour les mises en page adaptées au mobile.

CSS
.grille-cartes {
  display: flex;
  flex-wrap: wrap;  /* les cartes passent à la ligne si pas de place */
  gap: 1rem;
}

.carte {
  /* Chaque carte prend au moins 250px, ou plus si la place le permet */
  flex: 1 1 250px;
}

Aligne des éléments avec Flexbox

Objectif : centre les 3 cartes horizontalement et verticalement dans le conteneur. Essaie flex-direction: column, justify-content: space-between. Change la valeur de gap.

Éditeur live
HTML
CSS
Résultat
// à retenir
  • display: flex sur le parent active Flexbox. Les enfants deviennent des flex items.
  • flex-direction : row (horizontal, défaut) ou column (vertical).
  • justify-content : alignement sur l'axe principal. center, space-between, flex-end
  • align-items : alignement sur l'axe secondaire. center, flex-start, stretch
  • gap : espace entre les éléments. Préfère-le aux margins sur les éléments enfants.
  • flex-wrap: wrap : les éléments passent à la ligne si plus de place.
  • Centrage parfait : display: flex + justify-content: center + align-items: center.