CSS Grid est un système de mise en page puissant et moderne conçu pour créer des structures de page complexes de manière simple et intuitive. Contrairement aux approches traditionnelles comme les tableaux HTML ou les frameworks CSS externes, CSS Grid permet de positionner les éléments avec précision en utilisant des lignes et des colonnes.
Caractéristiques clés :
- Disposition bidimensionnelle : CSS Grid permet de gérer les alignements aussi bien horizontalement que verticalement.
- Flexibilité : Idéal pour des conceptions modernes et responsives.
- Support natif : Compatible avec tous les navigateurs modernes (dernières versions).
Pourquoi utiliser CSS Grid pour vos mises en page ?
- Simplicité : CSS Grid réduit la complexité des mises en page complexes en gérant les relations entre les éléments.
- Adaptabilité : Fonctionne parfaitement avec des tailles dynamiques et des écrans de toutes dimensions.
- Alignement précis : Vous pouvez aligner vos éléments de manière centrée, étirée ou personnalisée sans effort supplémentaire.
- Gain de temps : CSS Grid réduit la nécessité d’utiliser des hacks CSS ou du JavaScript pour le positionnement.
Différences entre CSS Grid et Flexbox
| CSS Grid | Flexbox |
|---|---|
| Idéal pour des dispositions 2D (lignes et colonnes). | Optimisé pour des dispositions 1D (ligne ou colonne unique). |
| Gère les espaces entre plusieurs éléments simultanément. | Gère les relations entre éléments adjacents uniquement. |
| Utilise un système basé sur des lignes et colonnes explicites. | Fonctionne avec un système d’alignement fluide et flexible. |
| Exemples : galeries d’images, pages complexes. | Exemples : menus de navigation, boutons. |
Exemple visuel : CSS Grid vs Flexbox
CSS Grid : Organisation en lignes et colonnes.
Bienvenue dans CSS Grid
1
2
3
4
/* CSS Grid pour organiser les éléments */
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
padding: 20px;
background-color: #f4f4f4;
}
.item {
background-color: #ccc;
text-align: center;
padding: 20px;
border: 1px solid #333;
}
Flexbox : Organisation en une seule direction.
1
2
3
.flex-container {
display: flex;
gap: 10px;
}
.item {
background-color: #ccc;
padding: 20px;
text-align: center;
}
CSS Grid est la solution incontournable pour créer des mises en page flexibles et modernes. Bien que Flexbox reste utile pour des alignements simples, CSS Grid s’impose dès qu’une gestion bidimensionnelle est nécessaire.
Tableau comparatif : CSS Grid vs Flexbox
Définition de chaque conteneur :
| CSS Grid (grid-container) | Flexbox (flex-container) |
|---|---|
| Gère une disposition bidimensionnelle (lignes et colonnes). | Gère une disposition unidimensionnelle (ligne ou colonne). |
| Idéal pour des mises en page globales comme des galeries ou tableaux. | Idéal pour aligner des éléments comme des boutons ou menus. |
Disposition :
| CSS Grid | Flexbox |
|---|---|
| Gère les lignes et colonnes simultanément. | Gère une seule direction (ligne ou colonne). |
| Exemple : Grilles de produits, mises en page complexes. | Exemple : Barre de navigation ou alignement horizontal de boutons. |
Positionnement des éléments :
| CSS Grid | Flexbox |
|---|---|
Les éléments peuvent être positionnés explicitement (ex. : grid-column, grid-row). |
Les éléments sont alignés automatiquement selon l’ordre HTML (modifiable avec order). |
| Exemple : Étendre un élément sur plusieurs colonnes ou lignes. | Exemple : Réorganiser l’ordre des éléments dans une barre horizontale. |
Alignement des éléments :
| CSS Grid | Flexbox |
|---|---|
Utilise align-items pour l’alignement vertical et justify-items pour l’alignement horizontal. |
Utilise align-items pour l’alignement croisé et justify-content pour l’alignement principal. |
| Exemple : Centrer les éléments dans une grille de produits. | Exemple : Distribuer uniformément des boutons dans une ligne. |
Concepts de base de CSS Grid
Comprendre la terminologie de CSS Grid
Avant de plonger dans les exemples pratiques, il est essentiel de se familiariser avec le vocabulaire de CSS Grid :
- Grid Container (conteneur de grille) : L’élément parent qui contient tous les éléments de la grille. C’est sur cet élément que vous appliquez les propriétés CSS Grid.
- Grid Items (éléments de grille) : Les enfants directs du conteneur de grille. Ce sont eux qui sont positionnés à l’intérieur de la grille.
- Grid Lines (lignes de grille) : Les lignes qui divisent la grille en colonnes et lignes, numérotées de manière implicite.
- Grid Tracks (pistes de grille) : Les colonnes ou lignes entre deux lignes de grille.
- Grid Cell (cellule de grille) : L’espace occupé par une intersection entre une colonne et une ligne.
- Grid Area (zone de grille) : Un groupe de cellules de grille formant une région rectangulaire.
Voici une représentation visuelle simple :
Mise en place d’un conteneur CSS Grid
Pour commencer à utiliser CSS Grid, définissez un conteneur de grille en utilisant la propriété display: grid.
Exemple :
1
2
3
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 10px;
}
.item {
background-color: #ccc;
text-align: center;
padding: 20px;
}
Les unités dans CSS Grid
CSS Grid introduit des unités spécifiques pour une flexibilité maximale :
fr (fraction) : Unité proportionnelle pour partager l’espace disponible.
grid-template-columns: 1fr 2fr 1fr;
Cela crée une grille où la deuxième colonne est deux fois plus large que les autres.
auto : La taille est calculée en fonction du contenu.
grid-template-columns: 1fr 2fr 1fr;
minmax() : Définit une plage de tailles minimale et maximale.
grid-template-columns: minmax(150px, 1fr);
repeat() : Répète un motif sans avoir à l’écrire plusieurs fois.
grid-template-columns: repeat(3, 1fr);
Exemple pratique : Disposition de base avec CSS Grid
1
2
3
4
.grid-container {
display: grid;
grid-template-columns: repeat(2, 1fr); /* 2 colonnes égales */
grid-template-rows: 100px auto; /* Première ligne 100px, deuxième en fonction du contenu */
gap: 15px; /* Espacement entre les éléments */
}
.item {
background-color: #add8e6;
text-align: center;
padding: 10px;
font-size: 18px;
}
Résumé du chapitre :
- Grid Container : L’élément parent activant CSS Grid.
- Unités importantes :
fr,auto,minmax(),repeat().
Propriétés pour le conteneur de grille
CSS Grid offre des propriétés puissantes pour structurer les grilles. Ces propriétés s’appliquent au conteneur de grille (l’élément parent).
grid-template-columns et grid-template-rows
Ces propriétés définissent le nombre de colonnes et de lignes, ainsi que leurs dimensions.
Syntaxe :
grid-template-columns: ;
grid-template-rows: ;
Exemples :
Trois colonnes de tailles égales :
grid-template-columns: 1fr 1fr 1fr;
Deux colonnes, l’une deux fois plus large :
grid-template-columns: 1fr 2fr;
Colonnes et lignes avec tailles fixes et dynamiques :
grid-template-columns: 100px auto 1fr;
grid-template-rows: 50px 200px auto;
gap, row-gap et column-gap
Ces propriétés gèrent l’espacement entre les éléments de la grille.
gap : Définit l’espace entre les lignes et colonnes.
gap: 20px;
row-gap et column-gap : Spécifient séparément l’espace entre les lignes et les colonnes.
row-gap: 10px;
column-gap: 30px;
Exemple :
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 15px; /* Espacement uniforme */
}
grid-auto-flow
Contrôle l’ordre de remplissage des éléments dans la grille.
row (par défaut) : Les éléments se remplissent ligne par ligne.
grid-auto-flow: row;
column : Les éléments se remplissent colonne par colonne.
grid-auto-flow: column;
dense : Remplit automatiquement les espaces vides.
grid-auto-flow: column;
Exemple pratique : Disposition flexible avec gap et auto-flow
Deux colonnes par ligne avec un espacement de 20px.
1
2
3
4
.grid-container {
display: grid;
grid-template-columns: repeat(2, 1fr); /* 2 colonnes égales */
gap: 20px; /* Espacement entre les éléments */
grid-auto-flow: row; /* Remplit les lignes en priorité */
}
.item {
background-color: #f0a500;
text-align: center;
padding: 20px;
font-size: 18px;
}
Résumé du chapitre :
- grid-template-columns/rows : Pour définir la structure de base des grilles.
- gap : Simplifie la gestion des espaces entre éléments.
- grid-auto-flow : Contrôle la manière dont les éléments se remplissent.
Propriétés pour les éléments de la grille
Les éléments individuels d’une grille (grid items) peuvent être positionnés et dimensionnés de manière précise à l’aide de plusieurs propriétés.
grid-column et grid-row
Ces propriétés définissent la position et l’étendue des éléments sur les colonnes et les lignes.
Syntaxe :
grid-column: start / end;
grid-row: start / end;
start: Numéro de ligne ou de colonne de début.end: Numéro de ligne ou de colonne de fin (non inclus).
Exemples :
Étendre un élément sur 2 colonnes :
grid-column: 1 / 3;
Étendre un élément sur 3 colonnes :
grid-row: 1 / 4;
En pratique :
1
2
3
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 colonnes de taille égale */
grid-template-rows: 100px 100px; /* 2 lignes de 100px */
gap: 10px; /* Espacement entre les éléments */
background-color: #1c1c1c; /* Couleur de fond sombre du conteneur */
padding: 10px;
}
.item {
text-align: center;
color: white; /* Texte en blanc pour contraste */
font-size: 18px;
padding: 20px;
border-radius: 5px;
}
.item1 {
grid-column: 1 / 3; /* Étend sur les colonnes 1 et 2 */
grid-row: 1 / 2; /* Occupe la première ligne */
background-color: #ff5733; /* Couleur rouge foncé */
}
.item2 {
grid-column: 2 / 4; /* Étend sur les colonnes 2 et 3 */
grid-row: 2 / 3; /* Occupe la deuxième ligne */
background-color: #33a1ff; /* Couleur bleue foncée */
}
.item3 {
grid-column: 1 / 2; /* Occupe uniquement la première colonne */
grid-row: 2 / 3; /* Occupe la deuxième ligne */
background-color: #2ecc71; /* Couleur verte foncée */
}
Explication du code :
grid-template-columns: repeat(3, 1fr);- Définit une grille avec 3 colonnes de largeur égale. L’unité
1frsignifie qu’elles partagent également l’espace disponible.
- Définit une grille avec 3 colonnes de largeur égale. L’unité
grid-template-rows: 100px 100px;- Crée deux lignes de hauteur fixe, chacune mesurant 100 pixels.
gap: 10px;- Ajoute un espacement de 10 pixels entre chaque élément de la grille (horizontalement et verticalement).
- .item1 { grid-column: 1 / 3; grid-row: 1 / 2; }
grid-column: 1 / 3: L’élément s’étend de la première colonne à la troisième, couvrant ainsi deux colonnes.grid-row: 1 / 2: L’élément est positionné sur la première ligne.
- .item2 { grid-column: 2 / 4; grid-row: 2 / 3; }
grid-column: 2 / 4: L’élément commence à la deuxième colonne et s’étend jusqu’à la quatrième, couvrant deux colonnes.grid-row: 2 / 3: L’élément est positionné sur la deuxième ligne.
- .item3 { grid-column: 1 / 2; grid-row: 2 / 3; }
grid-column: 1 / 2: L’élément occupe uniquement la première colonne.grid-row: 2 / 3: L’élément est positionné sur la deuxième ligne.
- Couleurs et styles visuels :
- Chaque élément a une couleur de fond distincte (
background-color) pour améliorer la lisibilité : - Rouge foncé pour
item1 - Bleu foncé pour
item2 - Vert foncé pour
item3 - Le texte est en blanc (
color: white) pour offrir un bon contraste avec les couleurs sombres.
grid-area : Utilisation de noms de zones
La propriété grid-area simplifie la création de mises en page complexes en nommant des zones spécifiques dans une grille. Ces noms permettent de positionner des éléments de manière intuitive et visuelle.
Étape 1 : Définir les zones dans le conteneur
Avec la propriété grid-template-areas, vous définissez un modèle de mise en page en attribuant des noms à chaque zone de la grille. Ces noms sont des chaînes de caractères représentant les emplacements des éléments.
.grid-container {
display: grid;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
grid-template-columns: 1fr 3fr;
grid-template-rows: auto auto auto;
}
Étape 2 : Associer des zones aux éléments
Chaque élément de la grille utilise la propriété grid-area pour se placer dans la zone correspondante.
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
Exemple complet : Mise en page simple
Header
Sidebar
Main Content
Footer
.grid-container {
display: grid;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
grid-template-columns: 1fr 3fr;
grid-template-rows: auto auto auto;
gap: 10px;
}
.header {
grid-area: header;
background-color: #ffa500;
text-align: center;
padding: 10px;
}
.sidebar {
grid-area: sidebar;
background-color: #4682b4;
color: white;
padding: 10px;
}
.main {
grid-area: main;
background-color: #32cd32;
padding: 10px;
}
.footer {
grid-area: footer;
background-color: #8a2be2;
color: white;
text-align: center;
padding: 10px;
}
Avantages de l’utilisation de noms de zones
- Lisibilité accrue : Le modèle de la grille est facile à comprendre et à modifier.
- Modularité : Les zones nommées permettent de déplacer ou de réorganiser les éléments sans affecter leur contenu.
- Simplicité des mises à jour : Modifier les noms de zones dans le CSS suffit pour changer toute la mise en page.
Alignement des éléments dans la grille
CSS Grid offre des propriétés puissantes pour aligner les éléments individuellement ou pour toute la grille. Ces propriétés permettent de centrer, aligner ou étirer les éléments horizontalement et verticalement, en fonction des besoins.
align-items : Contrôle l’alignement vertical de tous les éléments dans la grille.
La propriété align-items permet de définir comment tous les éléments de la grille (grid items) sont alignés verticalement dans leurs cellules respectives. Elle agit au niveau du conteneur de la grille (grid container).
Valeurs disponibles :
start: Aligne les éléments en haut.end: Aligne les éléments en bas.center: Centre les éléments verticalement.stretch(par défaut) : Étire les éléments pour remplir la cellule.
.grid-container {
display: grid;
align-items: center; /* Centre verticalement tous les éléments */
}
justify-items : Contrôle l’alignement horizontal de tous les éléments
La propriété justify-items définit l’alignement horizontal de tous les éléments à l’intérieur de leurs cellules dans une grille. Contrairement à justify-content, qui agit sur l’ensemble de la grille, justify-items contrôle l’alignement des éléments individuellement.
Valeurs disponibles :
start: Aligne les éléments à gauche.end: Aligne les éléments à droite.center: Centre les éléments horizontalement.stretch(par défaut) : Étire les éléments pour remplir la cellule
.grid-container {
display: grid;
justify-items: center; /* Centre horizontalement tous les éléments */
}
align-self : Contrôle l’alignement vertical d’un seul élément
La propriété align-self contrôle l’alignement vertical d’un seul élément de grille à l’intérieur de sa cellule. Elle permet de surcharger l’alignement défini globalement avec align-items pour un élément spécifique.
Valeurs disponibles :
start,end,center,stretch.
.item {
align-self: start; /* Aligne un seul élément en haut */
}
justify-self : Contrôle l’alignement horizontal d’un seul élément
La propriété justify-self permet d’aligner un élément unique horizontalement à l’intérieur de sa cellule dans une grille CSS. Elle ne s’applique qu’à un élément spécifique, contrairement à justify-items, qui agit sur tous les éléments de la grille.
Valeurs disponibles :
start,end,center,stretch.
.item {
justify-self: end; /* Aligne un seul élément à droite */
}
align-content : Contrôle l’espacement vertical entre les lignes de la grille
La propriété align-content contrôle comment les lignes de la grille sont réparties verticalement dans le conteneur lorsqu’il y a plus d’espace disponible que nécessaire. Cette propriété agit sur l’ensemble des lignes et est pertinente uniquement si la grille comporte plusieurs lignes.
Valeurs disponibles :
start: Aligne les lignes en haut.end: Aligne les lignes en bas.center: Centre les lignes verticalement.stretch(par défaut) : Étire les lignes pour occuper tout l’espace vertical disponible.space-between: Ajoute un espace uniforme entre les lignes.space-around: Ajoute un espace avec des marges entre les lignes.space-evenly: Distribue les lignes avec un espacement égal.
.grid-container {
display: grid;
align-content: space-between; /* Espacement uniforme entre les lignes */
}
justify-content : Contrôle l’espacement horizontal entre les colonnes de la grille.
La propriété justify-content agit sur l’ensemble de la grille (et non sur les éléments individuels) pour déterminer comment les colonnes sont réparties horizontalement lorsque l’espace disponible dépasse la largeur de la grille.
Valeurs disponibles :
start: Aligne la grille sur le côté gauche du conteneur.end: Aligne la grille sur le côté droit du conteneur.center: Centre la grille horizontalement dans le conteneur..stretch(par défaut) : Étire les colonnes pour remplir tout l’espace horizontal disponible (par défaut).space-between:Ajoute un espace uniforme entre les colonnes, sans marge aux extrémités.space-around:Ajoute un espace égal autour des colonnes, avec des marges égales des deux côtés.space-evenly: Distribue les colonnes avec un espacement égal entre elles et aux extrémités.
.grid-container {
display: grid;
justify-content: center; /* Centre toutes les colonnes horizontalement */
}
Resumé
| Propriété | Portée | Effet |
|---|---|---|
| align-items | Tous les éléments | Aligne verticalement dans la grille |
| justify-items | Tous les éléments | Aligne horizontalement dans la grille |
| align-self | Élément individuel | Aligne verticalement un seul élément |
| justify-self | Élément individuel | Aligne horizontalement un seul élément |
| align-content | Ensemble des lignes | Contrôle l’espacement vertical global |
| justify-content | Ensemble des colonnes | Contrôle l’espacement horizontal global |
Exemple pratique : Alignement des éléments dans une grille
1
2
3
4
.grid-container {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: 100px 100px;
justify-items: center; /* Centre horizontalement tous les éléments */
align-items: center; /* Centre verticalement tous les éléments */
}
.item {
background-color: #ffcccb;
padding: 20px;
border: 1px solid #000;
}
Chaque élément est centré à la fois horizontalement et verticalement.
Création de mises en page complexes avec CSS Grid
CSS Grid simplifie la création de mises en page sophistiquées et responsives. Voici quelques exemples pratiques adaptés à des scénarios réels.
Exemple 1 : Une mise en page de blog
Objectif : Créer une mise en page classique de blog avec un en-tête, une barre latérale, du contenu principal, et un pied de page.
Header
Main Content
.blog-layout {
display: grid;
grid-template-areas:
"header header"
"sidebar content"
"footer footer";
grid-template-columns: 1fr 3fr; /* Barre latérale 1/4, contenu principal 3/4 */
grid-template-rows: auto 1fr auto; /* Hauteur automatique pour l'en-tête et le pied de page */
gap: 20px; /* Espacement entre les sections */
padding: 10px;
background-color: #f0f0f0;
}
.header {
grid-area: header;
background-color: #6b5b95;
color: #fff;
padding: 20px;
text-align: center;
}
.sidebar {
grid-area: sidebar;
background-color: #88b04b;
color: #fff;
padding: 20px;
}
.content {
grid-area: content;
background-color: #f7cac9;
color: #fff;
padding: 20px;
}
.footer {
grid-area: footer;
background-color: #ff6f61;
color: #fff;
padding: 20px;
text-align: center;
}
Résultat :
- En-tête s’étend sur toute la largeur en haut.
- Barre latérale à gauche, prenant 1/4 de la largeur.
- Contenu principal à droite, occupant 3/4 de la largeur.
- Pied de page s’étend sur toute la largeur en bas.
Exemple 2: Une galerie d’images responsive
Objectif : Créer une galerie avec des images de tailles égales qui s’adapte à l’écran.
1
2
3
4
5
6
.gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); /* Colonnes dynamiques */
gap: 10px;
padding: 10px;
background-color: #eaeaea;
}
.item {
background-color: #6b5b95;
color: #fff;
text-align: center;
padding: 40px 0;
font-size: 24px;
border-radius: 5px;
}
Résultat :
- Une galerie avec des colonnes dynamiques.
- Les colonnes s’ajustent pour occuper tout l’espace disponible, chaque cellule ayant une largeur minimale de 150px.
Exemple 3 : Une page produit e-commerce
Objectif : Créer une page produit avec une image, des détails, et une section de recommandations.
Product Image
Product Details
Recommendations
.product-page {
display: grid;
grid-template-columns: 2fr 3fr; /* Image : 2/5, Détails : 3/5 */
grid-template-rows: auto 1fr;
grid-template-areas:
"image details"
"recommendations recommendations";
gap: 20px;
padding: 20px;
background-color: #f4f4f4;
}
.image {
grid-area: image;
background-color: #f7cac9;
padding: 20px;
text-align: center;
}
.details {
grid-area: details;
background-color: #88b04b;
padding: 20px;
text-align: center;
}
.recommendations {
grid-area: recommendations;
background-color: #ff6f61;
padding: 20px;
text-align: center;
}
Résultat :
- Une grille avec :
- L’image du produit à gauche.
- Les détails à droite.
- Une section de recommandations occupant toute la largeur en dessous.
Combiner CSS Grid et Flexbox
Bien que CSS Grid soit idéal pour organiser des mises en page bidimensionnelles, Flexbox reste un excellent choix pour des alignements dans une seule dimension (ligne ou colonne). Les deux codes peuvent être combinées pour tirer parti de leurs forces respectives.
Quand utiliser CSS Grid ou Flexbox ?
| CSS Grid | Flexbox |
|---|---|
| Conception bidimensionnelle. | Conception unidimensionnelle. |
| Idéal pour les mises en page globales (sections d'une page). | Idéal pour l'alignement d'éléments à l'intérieur d'une section. |
| Définit explicitement des lignes et colonnes. | Réagit au contenu pour l'alignement et la flexibilité. |
Exemple pratique : En-tête avec CSS Grid et Flexbox
Dans cet exemple, CSS Grid organise les grandes sections de l’en-tête, tandis que Flexbox aligne les éléments secondaires à l’intérieur de chaque section.
Logo
.header {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* Logo, navigation, actions */
align-items: center;
gap: 20px;
padding: 10px;
background-color: #f0f0f0;
}
.logo {
background-color: #6b5b95;
color: #fff;
text-align: center;
padding: 10px;
}
.nav {
display: flex; /* Utilisation de Flexbox pour la navigation */
justify-content: center; /* Aligne les liens au centre */
gap: 15px;
}
.nav a {
text-decoration: none;
color: #6b5b95;
font-weight: bold;
}
.actions {
display: flex; /* Utilisation de Flexbox pour les boutons */
justify-content: flex-end; /* Aligne les boutons à droite */
gap: 10px;
}
.actions button {
padding: 10px 15px;
border: none;
border-radius: 5px;
background-color: #88b04b;
color: #fff;
cursor: pointer;
}
.actions button:hover {
background-color: #6b5b95;
}
Résultat :
- CSS Grid organise les trois sections principales : le logo, la navigation et les boutons d’action.
- Flexbox aligne les liens de navigation et les boutons à l’intérieur de leurs sections.
Exemple pratique : Mise en page complète avec CSS Grid et Flexbox
Objectif : Créer une page avec :
- Une barre latérale et un contenu principal (CSS Grid).
- Une barre d’outils dans le contenu principal alignée avec Flexbox.
Main Content
.layout {
display: grid;
grid-template-columns: 1fr 3fr; /* Sidebar 1/4, contenu principal 3/4 */
grid-template-rows: auto;
gap: 20px;
padding: 20px;
background-color: #eaeaea;
}
.sidebar {
background-color: #6b5b95;
color: #fff;
padding: 20px;
text-align: center;
}
.main-content {
background-color: #88b04b;
color: #fff;
padding: 20px;
}
.toolbar {
display: flex; /* Flexbox pour aligner les boutons */
justify-content: space-between; /* Espacement uniforme entre les boutons */
margin-bottom: 20px;
}
.toolbar button {
padding: 10px 15px;
border: none;
border-radius: 5px;
background-color: #f7cac9;
color: #fff;
cursor: pointer;
}
.toolbar button:hover {
background-color: #ff6f61;
}
.content {
background-color: #f4f4f4;
color: #000;
padding: 20px;
}
Résultat :
- CSS Grid divise la mise en page en barre latérale et contenu principal.
- Flexbox organise les boutons dans la barre d’outils avec un espacement uniforme.
Grilles CSS avancées
Dans ce chapitre, nous explorons des techniques avancées pour exploiter pleinement la puissance de CSS Grid et créer des mises en page dynamiques et sophistiquées.
Grilles imbriquées (Nested Grids)
Une grille imbriquée est une grille à l’intérieur d’un élément qui est lui-même un élément d’une grille parente. Cela permet de gérer des sous-sections indépendamment.
Pour imbriquer des grilles, on utilise les classes nested-grid et nested-item.
Classe nested-grid
La classe nested-grid est appliquée à l’élément parent d’une sous-grille. Cet élément devient un conteneur de grille, permettant de gérer les lignes et colonnes de cette sous-section.
Caractéristiques principales :
- Transforme un élément (comme une
div) en conteneur de grille en utilisantdisplay: grid. - Définit la structure de la grille (nombre de colonnes, lignes, espacements, etc.).
- Gère les propriétés comme
grid-template-columns,gap, etpaddingpour la sous-grille.
.nested-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); /* Colonnes dynamiques */
gap: 10px; /* Espacement entre les éléments */
background-color: #f4f4f4; /* Couleur de fond de la sous-grille */
padding: 10px; /* Espacement interne pour le conteneur */
}
Détails des propriétés :
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)):- Crée autant de colonnes que l’espace disponible le permet.
- Chaque colonne a une largeur minimale de 100px et maximale de 1 fraction (
1fr) de l’espace disponible.
gap: 10px: Définit l’espace entre les éléments de la sous-grille.padding: 10px: Ajoute de l’espace à l’intérieur des bords du conteneur.
Classe nested-item
La classe nested-item est appliquée aux enfants directs d’une sous-grille. Chaque nested-item représente un élément de la sous-grille.
Caractéristiques principales :
- Donne un style distinct à chaque élément de la sous-grille.
- Peut être utilisé pour positionner ou dimensionner un élément dans la sous-grille.
- Applique des styles visuels comme la couleur de fond, le texte, et le rembourrage.
.nested-item {
background-color: #88b04b; /* Couleur de fond spécifique à l'élément */
color: #fff; /* Couleur du texte */
padding: 10px; /* Espacement interne pour chaque élément */
text-align: center; /* Centrer le texte */
border-radius: 5px; /* Coins arrondis pour un effet esthétique */
}
Détails des propriétés :
background-color: #88b04b: Attribue une couleur distincte pour identifier visuellement chaque élément.padding: 10px: Ajoute de l’espace entre le contenu de l’élément et ses bords.text-align: center: Centre le contenu textuel horizontalement.border-radius: 5px: Ajoute des coins arrondis à l’élément.
Exemple
1.1
1.2
1.3
2
3
.grid-container {
display: grid;
grid-template-columns: 2fr 1fr 1fr; /* Grille principale avec 3 colonnes */
gap: 20px;
padding: 20px;
background-color: #eaeaea;
}
.item {
background-color: #6b5b95; /* Couleur pour distinguer les éléments principaux */
color: #fff;
padding: 20px;
text-align: center;
}
.main {
background-color: #ffcccb;
padding: 10px;
}
.nested-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); /* Colonnes dynamiques */
gap: 10px;
background-color: #f4f4f4;
padding: 10px;
}
.nested-item {
background-color: #88b04b;
color: #fff;
text-align: center;
padding: 10px;
border-radius: 5px;
}
Explication :
- Grille principale :
- La classe
grid-containercrée une grille avec trois colonnes : une large (2fr) et deux étroites (1fr chacune). - La cellule contenant
mainest utilisée pour la sous-grille.
- La classe
- Sous-grille :
- La classe
nested-griddéfinit une sous-grille dynamique où chaque colonne à une largeur minimale de 100px. - La disposition des colonnes s’adapte automatiquement à l’espace disponible.
- La classe
- Éléments de la sous-grille :
- La classe
nested-itemattribue un style individuel à chaque élément, avec des couleurs distinctes, un texte centré, et des coins arrondis.
- La classe
Grilles dynamiques avec auto-fit et auto-fill
Les valeurs auto-fit et auto-fill permettent de créer des grilles qui s’ajustent automatiquement au contenu et à l’espace disponible.
- auto-fill : Remplit autant de colonnes que possible, même si elles sont vides.
- auto-fit : Remplit autant de colonnes que possible et ajuste leur taille si l’espace le permet.
1
2
3
4
.dynamic-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 10px;
padding: 20px;
background-color: #eaeaea;
}
.item {
background-color: #f7cac9;
color: #fff;
text-align: center;
padding: 20px;
border-radius: 5px;
}
Résultat :
- Les colonnes s’ajustent dynamiquement à la largeur de la fenêtre.
minmax(150px, 1fr)garantit une largeur minimale de 150px pour chaque colonne.
Exemple pratique complet : Grilles imbriquées dynamiques
Header
Sidebar 1
Sidebar 2
Content 1
Content 2
Content 3
Footer
.complex-layout {
display: grid;
grid-template-columns: 1fr 3fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header"
"sidebar content"
"footer footer";
gap: 20px;
padding: 20px;
background-color: #f4f4f4;
}
.header, .sidebar, .content, .footer {
background-color: #6b5b95;
color: #fff;
padding: 20px;
text-align: center;
}
.nested-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
gap: 10px;
}
.nested-item {
background-color: #ffcccb;
color: #000;
padding: 10px;
text-align: center;
}
Résultat :
- Une grille principale divisée en header, sidebar, content et footer.
- La sidebar et le content contiennent des sous-grilles dynamiques.
Ressources complémentaires pour aller plus loin
Documentation officielle :
- Documentation officielle :
- Cours et tutoriels :
-
- Grid Garden : Jeu interactif pour apprendre CSS Grid.
-
- Outils de compatibilité :
-
- Can I Use : Vérifiez la prise en charge des fonctionnalités CSS Grid.
-
Pour resumer
Les avantages de CSS Grid
- Disposition bidimensionnelle :
- Gère les alignements aussi bien horizontalement que verticalement, contrairement à Flexbox qui est unidimensionnel.
- Simplicité et flexibilité :
- Permet de concevoir des mises en page complexes avec peu de code.
- Responsivité intégrée :
- Grâce à des unités comme
fr,minmax()et des propriétés commeauto-fitouauto-fill.
- Grâce à des unités comme
- Contrôle précis :
- Avec
grid-template-areaset des propriétés commegrid-columnetgrid-row, chaque élément peut être positionné avec précision.
- Avec
- Support natif :
- CSS Grid est pris en charge par tous les navigateurs modernes.
Conseils pour maîtriser CSS Grid
- Pratiquez avec des exemples concrets :
- Reproduisez des mises en page réelles comme des galeries, des blogs ou des pages produit.
- Utilisez les outils des navigateurs :
- Explorez les outils de développement (comme Chrome DevTools ou Firefox Developer Tools) pour visualiser vos grilles.
- Combinez CSS Grid et Flexbox :
- Utilisez CSS Grid pour la structure globale et Flexbox pour les alignements internes.
Récapitulatif de toutes les classes CSS vue précédemment
| Classe CSS | Description | Propriétés principales |
|---|---|---|
.grid-container |
Définit un conteneur de grille principal. | display: grid; grid-template-columns; grid-template-rows; gap; padding; |
.grid-template-areas |
Organise des zones nommées dans la grille. | grid-template-areas: "header header" "sidebar content" "footer footer"; |
.header |
Section de l’en-tête définie dans grid-template-areas. |
grid-area: header; background-color; padding; text-align; |
.sidebar |
Section de la barre latérale définie dans grid-template-areas. |
grid-area: sidebar; background-color; padding; text-align; |
.content |
Section du contenu principal définie dans grid-template-areas. |
grid-area: content; background-color; padding; |
.footer |
Section du pied de page définie dans grid-template-areas. |
grid-area: footer; background-color; padding; text-align; |
.nested-grid |
Sous-grille imbriquée dans un élément de la grille principale. | display: grid; grid-template-columns; gap; padding; background-color; |
.nested-item |
Élément enfant d’une sous-grille. | background-color; padding; text-align; border-radius; |
.dynamic-grid |
Grille dynamique qui ajuste automatiquement ses colonnes. | grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap; padding; |
.toolbar |
Barre d’outils organisée avec Flexbox dans une grille. | display: flex; justify-content: space-between; gap; margin-bottom; |
Points clés du tableau :
- Les classes
grid-containeretitemdéfinissent la structure de base des grilles. - Les classes
nested-gridetnested-itempermettent de gérer les grilles imbriquées. - Les classes
header,sidebar,content, etfooterillustrent l’utilisation des zones définies pargrid-template-areas. - Les classes comme
dynamic-gridexploitent des propriétés avancées pour des mises en page responsives. - Les classes
toolbaretactionsmontrent comment intégrer Flexbox à CSS Grid pour des alignements spécifiques.
Conclusion
CSS Grid représente une véritable révolution dans le monde de la mise en page web. Plus qu’un simple outil, il est devenu un pilier pour concevoir des sites modernes, flexibles et esthétiques. Sa capacité à organiser les éléments dans un espace bidimensionnel libère les développeurs des contraintes des techniques plus anciennes, souvent laborieuses ou limitées.
Avec CSS Grid, la créativité n’a plus de limites. Il devient possible de traduire des maquettes complexes en code clair et performant, tout en maintenant une structure logique et accessible. Les concepts tels que les grilles dynamiques, les zones nommées ou les grilles imbriquées illustrent à quel point CSS Grid est un système pensé pour s’adapter à des besoins variés, du plus simple au plus sophistiqué.
Mais au-delà de ses capacités techniques, CSS Grid incarne aussi une philosophie : celle d’offrir des expériences utilisateur harmonieuses et responsives sur tous les écrans. En combinant sa puissance avec des outils comme Flexbox ou en suivant des pratiques modernes, les développeurs peuvent s’assurer que leurs créations ne sont pas seulement belles, mais aussi fonctionnelles et inclusives.
Alors que les sites web continuent de s’enrichir et de s’adapter aux besoins d’un monde numérique en constante évolution, maîtriser CSS Grid n’est plus une option, mais une nécessité. Investir du temps pour explorer ses fonctionnalités, expérimenter des mises en page innovantes et apprendre à l’intégrer harmonieusement avec d’autres outils est une démarche qui portera ses fruits à long terme.
En adoptant CSS Grid, vous ne faites pas seulement un pas en avant dans votre parcours de développeur web : vous embrassez l’avenir de la conception web.
