CSS Grid — Les grilles
Grilles 2D, fr, repeat(), auto-fit et minmax()
Concepts Théoriques
CSS Grid est le système de mise en page le plus puissant du CSS. Là où Flexbox gère une seule direction (ligne ou colonne), Grid gère les deux simultanément — lignes ET colonnes.
Le concept
Grid divise un conteneur en une grille invisible de lignes (rows) et colonnes (columns). Vous placez ensuite les éléments dans cette grille.
Pour activer Grid : display: grid sur le conteneur parent.
grid-template-columns — définir les colonnes
Cette propriété définit le nombre et la taille des colonnes :
- grid-template-columns: 200px 200px 200px — 3 colonnes de 200px chacune
- grid-template-columns: 1fr 1fr 1fr — 3 colonnes de taille égale
- grid-template-columns: 2fr 1fr — 2 colonnes, la première 2x plus large
- grid-template-columns: 300px 1fr — la première 300px fixe, la seconde prend le reste
L'unité fr (fraction)
fr signifie "fraction de l'espace disponible". C'est l'unité native de Grid :
- 1fr 1fr 1fr = 3 colonnes égales (chacune prend 1/3)
- 2fr 1fr = la première prend 2/3, la seconde 1/3
La fonction repeat()
Au lieu d'écrire 1fr 1fr 1fr 1fr, écrivez repeat(4, 1fr).
La formule magique — responsive automatique sans media query
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
Cette ligne crée une grille qui s'adapte automatiquement :
- auto-fit — crée autant de colonnes que possible
- minmax(280px, 1fr) — chaque colonne fait minimum 280px, maximum 1fr
Résultat : sur un écran large vous avez 4 colonnes, sur tablette 2, sur mobile 1 — avec UNE seule ligne CSS et AUCUNE media query.
C'est probablement la ligne CSS la plus utile de tout ce cours.
gap — l'espace entre les cellules
gap: 1.5rem crée 1.5rem d'espace entre chaque cellule, horizontalement et verticalement. Vous pouvez aussi séparer : gap: 2rem 1rem (2rem vertical, 1rem horizontal).
Placer des éléments manuellement
Par défaut, les éléments se placent automatiquement (gauche → droite, haut → bas). Vous pouvez aussi placer un élément sur des cellules spécifiques :
- grid-column: span 2 — l'élément occupe 2 colonnes
- grid-row: span 2 — l'élément occupe 2 lignes
- grid-column: 1 / 3 — de la colonne 1 à la colonne 3
grid-template-areas — nommer les zones
Vous pouvez nommer les zones de votre grille pour un layout lisible :
grid-template-areas: "header header" "sidebar main" "footer footer";
Puis assignez chaque élément à sa zone avec grid-area: header.
Grid vs Flexbox — quand utiliser lequel ?
- Flexbox — composants (navigation, carte, formulaire), alignement dans UNE direction
- Grid — layouts de page, galeries d'images, tout ce qui a lignes ET colonnes
En pratique : Grid pour la grille de projets, Flexbox pour l'intérieur d'une carte.