Le layout 2D pour des interfaces modernes
8h30 — 10h00
1. Créer un layout complet
Avec grid-template-areas
2. Grille responsive
repeat(auto-fill, minmax())
3. Étendre les éléments
span sur plusieurs colonnes/lignes
4. Combiner Grid et Flexbox
Layout + alignement interne
1. Rappel Flexbox vs Grid
1D vs 2D — quand utiliser l'un ou l'autre
2. Grid fondamental
grid-template-columns, rows, gap
3. Le trio magique
fr, repeat(), minmax()
4. Named Grid Areas
Dessiner un layout visuellement
5. Live Coding : Dashboard
Header, sidebar, main, footer en Grid
Flexbox (1D) vs Grid (2D)
Comprendre quand utiliser l'un ou l'autre
"Ai-je besoin de contrĂ´ler
les lignes ET les colonnes ?"
NON
Une seule direction
→ Flexbox suffit
OUI
Lignes ET colonnes
→ CSS Grid
Une seule direction : ligne OU colonne
justify-content, align-items
Parfait pour :
Pas idéal pour :
Lignes ET colonnes simultanément
grid-template-columns, grid-template-rows
Parfait pour :
Avantage clé :
GRID
Structure
+
FLEXBOX
Contenu
Grid pour le layout global
Flexbox pour l'alignement interne
Grid fondamental
Les propriétés de base pour créer une grille
grid-template-columns
Nombre et taille des colonnes
200px 200px 200px
grid-template-rows
Nombre et taille des lignes
100px auto 100px
gap
Espacement entre cellules
20px ou 1rem
.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 100px 100px;
gap: 1rem;
}
Contrôler séparément l'espacement horizontal et vertical
.container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: 80px 80px;
row-gap: 20px;
column-gap: 10px;
}
↑ row-gap: 20px, column-gap: 10px
Le trio magique
fr + repeat() + minmax()
Une part de l'espace disponible
grid-template-columns: 1fr 1fr 1fr;
3 colonnes égales
grid-template-columns: 2fr 1fr 1fr;
Colonne 1 = 2x les autres
Attention : N'écrivez pas "1" mais "1fr" !
Sans repeat() (fastidieux)
grid-template-columns:
1fr 1fr 1fr 1fr 1fr
1fr 1fr 1fr 1fr 1fr;
Avec repeat() (clever)
grid-template-columns:
repeat(10, 1fr);
Démo : 6 colonnes
Définir les bornes d'une cellule
grid-template-columns: minmax(100px, 200px) 1fr 1fr;
minmax(100px, 200px)
Entre 100px et 200px
minmax(0, 1fr)
Min 0, max illimité
minmax(auto, auto)
Selon le contenu
repeat(auto-fill, minmax(300px, 1fr))
"Crée autant de colonnes que possible, mais pas plus étroites que 300px"
.cards {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1rem;
}
Redimensionnez la fenĂŞtre pour voir les colonnes s'adapter
Named Grid Areas
Dessiner un layout visuellement dans le CSS
Donner un nom Ă chaque zone du layout
.container {
display: grid;
grid-template-areas:
"header header header"
"sidebar main main"
"sidebar footer footer";
}
Règles importantes :
.container {
grid-template-areas:
"header header header"
"nav main aside"
". footer footer";
}
/* La zone ". " est vide */
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
Puis dans le HTML :
LISIBLE
On "dessine" le layout, on le visualise directement dans le CSS
FLEXIBLE
Changer le layout = changer les guillemets, pas le HTML
SÉMANTIQUE
Le code reflète clairement la structure de la page
MAINTAINABLE
Plus facile Ă comprendre et modifier pour les autres
Live Coding : Dashboard
Header + Sidebar + Main + Footer
.dashboard {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-rows: 60px 1fr 50px;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
@media (max-width: 768px) {
.dashboard {
grid-template-columns: 1fr;
grid-template-rows: 60px auto 1fr auto 50px;
grid-template-areas:
"header"
"sidebar"
"main"
"footer";
}
}
Grid pour le layout, Flexbox pour l'alignement interne
CSS (Grid + Flexbox)
.card {
display: grid;
place-content: start;
}
.card-content {
display: flex;
align-items: center;
}
Résultat :
âś— ERREUR
grid-column: 1fr 1fr;
grid-column, c'est pour PLACER un élément, pas pour définir la grille
âś“ CORRECT
grid-template-columns: 1fr 1fr;
grid-template-*, c'est pour DÉFINIR la grille
âś— ERREUR
grid-template-columns: 1 1 1;
"1" = 1px fixe !
âś“ CORRECT
grid-template-columns: 1fr 1fr 1fr;
"fr" = fraction flexible
âś— ERREURS
grid-template-areas:
header header header
sidebar main main
Manque les guillemets!
âś“ CORRECT
grid-template-areas:
"header header header"
"sidebar main main";
Guillemets + mĂŞme nb de colonnes
Grid = 2D
Lignes ET colonnes
Flexbox = 1D
Ligne OU colonne
Pattern responsive
repeat(auto-fill, minmax(300px, 1fr))
Game-changer
Named grid areas
Vous savez maintenant créer des layouts avec CSS Grid
Questions ?