CSS Grid : Comprendre les Grilles Simplement
Colonnes, lignes, template-areas, responsive sans media queries — le layout 2D maîtrisé
Le principe de CSS Grid
Comme Flexbox, Grid fonctionne avec un conteneur (parent) et des items (enfants directs). La différence : Grid crée une grille invisible avec des lignes et des colonnes, et tu peux placer tes éléments n'importe où sur cette grille.
Cet exemple crée une grille avec une sidebar gauche (200px), un contenu central (flexible), et une sidebar droite (200px).
Définir des colonnes et des lignes
grid-template-columns: 100px 200px 100px;
/* Colonnes flexibles */
grid-template-columns: 1fr 2fr 1fr; /* ratio 1:2:1 */
/* Mélange fixe + flexible */
grid-template-columns: 250px 1fr; /* sidebar fixe + contenu flex */
/* Lignes */
grid-template-rows: 80px 1fr 60px; /* header + contenu + footer */
| Valeur | Signification |
|---|---|
| 200px | Taille fixe en pixels |
| 1fr | Une fraction de l'espace disponible |
| auto | S'adapte au contenu |
| min-content | Aussi petit que possible sans overflow |
| max-content | Aussi grand que le contenu le demande |
| minmax(200px, 1fr) | Entre 200px minimum et 1fr maximum |
L'unité fr et repeat()
grid-template-columns: 1fr 1fr 1fr;
/* Raccourci avec repeat() */
grid-template-columns: repeat(3, 1fr);
/* 12 colonnes (comme Bootstrap) */
grid-template-columns: repeat(12, 1fr);
/* 4 colonnes de 200px */
grid-template-columns: repeat(4, 200px);
repeat() est un raccourci indispensable — tu l'utiliseras constamment.
Gap : espacement entre cellules
gap ne met de l'espace qu'entre les cellules, jamais sur les bords. Plus propre que les marges.
Placer des éléments sur la grille
Par défaut, les items remplissent la grille dans l'ordre du HTML. Tu peux aussi les placer explicitement :
.header
/* Placement ligne + colonne */
.sidebar
| Propriété | Rôle |
|---|---|
| grid-column: 1 / 3 | De la ligne de colonne 1 à 3 |
| grid-column: span 2 | Occupe 2 colonnes depuis la position actuelle |
| grid-column: 1 / -1 | Toute la largeur (-1 = dernière ligne) |
| grid-row: 2 / 4 | De la ligne 2 à 4 |
grid-template-areas : le layout visuel
C'est la fonctionnalité la plus élégante de Grid — tu « dessines » ton layout :
.header
.sidebar
.content
.footer
Chaque mot dans grid-template-areas correspond à une cellule. Les mots identiques fusionnent les cellules. Utilise un . pour une cellule vide.
Responsive sans media queries
Comment ça marche :
- auto-fit = crée autant de colonnes que possible
- minmax(280px, 1fr) = chaque colonne fait au minimum 280px, au maximum une fraction égale
- Résultat : 4 colonnes sur grand écran, 2 sur tablette, 1 sur mobile — sans aucune media query
| Propriété | Quand il y a trop d'espace |
|---|---|
| auto-fit | Colonnes vides supprimées, items grandissent |
| auto-fill | Colonnes vides conservées, items gardent leur taille |
Dans 99% des cas, auto-fit est ce que tu veux.
Alignement dans la grille
| Propriété | S'applique à | Axe |
|---|---|---|
| justify-items | Tous les items | Horizontal (dans leur cellule) |
| align-items | Tous les items | Vertical (dans leur cellule) |
| place-items | Tous les items | Raccourci : align + justify |
| justify-content | La grille entière | Horizontal |
| align-content | La grille entière | Vertical |
| justify-self | Un item spécifique | Horizontal |
| align-self | Un item spécifique | Vertical |
.grille
5 patterns Grid à connaître
| Pattern | Code CSS | Usage |
|---|---|---|
| Layout page | grid-template-areas + zones nommées | Sites header/sidebar/footer |
| Cartes responsive | repeat(auto-fit, minmax(280px, 1fr)) | Listing produits, portfolio |
| 12 colonnes | repeat(12, 1fr) + grid-column: span N | Remplacer Bootstrap |
| Masonry (quasi) | grid-template-rows: masonry (expérimental) | Galleries photos |
| Dashboard | Template areas + zones de tailles variées | Panneaux d'administration |
Grid vs Flexbox : résumé
| Critère | Flexbox | Grid |
|---|---|---|
| Dimension | 1D (une direction) | 2D (lignes + colonnes) |
| Contenu dicte la taille | Oui | Non, la grille impose |
| Idéal pour | Composants (navbar, boutons) | Layouts de page, galleries |
| Placement libre | Non (ordre du DOM) | Oui (n'importe quelle cellule) |
En pratique : Grid pour le layout global, Flexbox à l'intérieur des composants. Les deux se combinent parfaitement. Voir notre fiche Flexbox.
Questions fréquentes
💪 Flexbox
🎯 Centrer un élément
📱 Media queries
📌 Position CSS
🎨 Cours HTML & CSS
🏠 Hub Programmation
CSS Grid — Comprendre les grilles en CSS simplement
Référence : MDN CSS Grid
