Comprendre les bases de CSS Grid
Avant de parler de responsive design, il est essentiel de comprendre que CSS Grid est un système de mise en page bidimensionnel. Il permet de contrôler simultanément les lignes et les colonnes d’une interface. À la différence de Flexbox, qui est principalement conçu pour organiser des éléments selon un seul axe à la fois, Grid est particulièrement adapté à la construction de structures de pages complètes.
Pour activer CSS Grid, il suffit d’appliquer display: grid ou display: inline-grid sur l’élément parent. Celui-ci devient alors le grid container, tandis que ses enfants directs deviennent des grid items. Vous pouvez ensuite définir les colonnes, les lignes, les espacements et le positionnement des différents éléments.
L’un des principaux avantages de CSS Grid est de dissocier la structure visuelle du contenu HTML. Un élément peut être positionné dans une zone précise de la grille sans nécessairement modifier l’ordre des éléments dans le HTML. Il faut toutefois conserver un ordre logique dans le HTML afin de préserver une bonne expérience pour les utilisateurs de technologies d’assistance et de maintenir une structure cohérente pour le référencement.
Maîtriser les unités et la définition des colonnes
Pour construire une grille, vous devez commencer par définir ses colonnes et, si nécessaire, ses lignes. La propriété grid-template-columns permet notamment de déterminer la largeur de chaque colonne.
Vous pouvez utiliser différentes unités comme les pixels (px), les pourcentages (%), les unités relatives ou encore l’unité fr. Cette dernière est particulièrement intéressante pour créer des mises en page flexibles.
L’unité fr, pour fraction, représente une fraction de l’espace disponible dans le conteneur. Par exemple, grid-template-columns: 1fr 2fr 1fr; crée trois colonnes dont les proportions sont respectivement de 1, 2 et 1. La colonne centrale occupe donc deux fois plus d’espace que chacune des colonnes latérales.
.grid-container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
gap: 20px;
}La propriété gap permet ici de gérer directement l’espace entre les colonnes et les lignes. L’utilisation de fr avec gap permet de construire des grilles flexibles sans avoir à calculer manuellement la largeur disponible.
La fonction repeat() permet également de simplifier l’écriture. Au lieu de répéter plusieurs fois la même valeur, vous pouvez écrire repeat(3, 1fr) plutôt que 1fr 1fr 1fr. Cette fonction devient particulièrement intéressante lorsqu’elle est combinée avec auto-fit, auto-fill et minmax().
Créer un layout responsive sans multiplier les media queries
C’est ici que CSS Grid devient particulièrement intéressant pour le responsive design. Les media queries restent parfaitement utiles, notamment lorsqu’une interface doit changer radicalement de structure selon la largeur de l’écran. Cependant, certaines grilles peuvent s’adapter automatiquement à l’espace disponible grâce à auto-fit, auto-fill et minmax().
La fonction minmax(minimum, maximum) permet de définir une taille minimale et maximale pour une colonne. Associée à repeat() et auto-fit, elle permet au navigateur de déterminer automatiquement le nombre de colonnes pouvant tenir dans l’espace disponible.
.responsive-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1.5rem;
}Dans cet exemple, chaque colonne peut mesurer au minimum 250px. Le navigateur crée autant de colonnes que possible tout en respectant cette contrainte. Lorsque l’espace disponible diminue, certaines colonnes passent automatiquement à la ligne suivante.
Cette technique est particulièrement adaptée aux cartes, aux listes de produits, aux galeries d’images ou encore aux blocs de contenu. Elle permet de gérer une grande partie de la responsivité directement avec le système de grille, sans avoir besoin de définir un breakpoint pour chaque largeur d’écran.
À retenir : auto-fit et auto-fill ont un comportement proche, mais leur gestion des pistes vides diffère. auto-fit peut réduire les pistes vides et permettre aux éléments existants de s’étendre pour occuper l’espace disponible. auto-fill, lui, conserve les pistes créées même lorsqu’elles sont vides. Cette différence devient surtout visible lorsque le conteneur dispose de suffisamment d’espace pour accueillir davantage de colonnes que d’éléments.
Organiser une page avec grid-template-areas
Pour des layouts plus complexes, par exemple une page composée d’un header, d’une navigation, d’un contenu principal et d’un footer, la propriété grid-template-areas offre une syntaxe particulièrement lisible.
Le principe consiste à attribuer un nom à chaque zone avec grid-area, puis à représenter leur position directement dans la définition de la grille. On peut ainsi visualiser la structure de la page directement dans le CSS.
<header class="main-header">
Header
</header>
<nav class="main-nav">
Navigation
</nav>
<main class="main-content">
Contenu principal
</main>
<footer class="main-footer">
Footer
</footer>.site-layout {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
min-height: 100vh;
}
.main-header {
grid-area: header;
}
.main-nav {
grid-area: sidebar;
}
.main-content {
grid-area: main;
}
.main-footer {
grid-area: footer;
}Le principal avantage de cette approche est sa lisibilité. En regardant simplement la propriété grid-template-areas, on comprend immédiatement la structure de la page.
Cette technique est également très pratique pour le responsive design. Si la structure doit changer sur mobile, une media query peut redéfinir les zones afin de transformer la disposition en une seule colonne :
@media (max-width: 768px) {
.site-layout {
grid-template-columns: 1fr;
grid-template-areas:
"header"
"main"
"sidebar"
"footer";
}
}Le HTML reste ainsi identique tandis que la disposition visuelle de la grille évolue en fonction de la largeur disponible.
Ajuster les espacements et l’alignement
Un layout responsive ne se limite pas au nombre de colonnes. Les espacements et l’alignement jouent également un rôle essentiel dans la lisibilité de l’interface.
La propriété gap permet de définir l’espace entre les lignes et les colonnes d’une grille. Elle évite notamment de devoir appliquer des marges individuelles sur chaque élément.
.grid-container {
display: grid;
gap: 1.5rem;
}CSS Grid propose également plusieurs propriétés pour contrôler l’alignement. Il est important de distinguer l’alignement des items dans leurs cellules de l’alignement de la grille elle-même dans son conteneur.
| Propriété | Portée | Rôle |
|---|---|---|
| justify-items | Items | Aligne les éléments horizontalement dans leur cellule |
| align-items | Items | Aligne les éléments verticalement dans leur cellule |
| justify-content | Grille | Positionne la grille horizontalement dans son conteneur |
| align-content | Grille | Positionne la grille verticalement dans son conteneur |
Par exemple, justify-items: center; centre les éléments à l’intérieur de leurs cellules, tandis que justify-content: center; centre l’ensemble de la grille lorsque celle-ci n’occupe pas toute la largeur disponible.
La combinaison de gap, fr, minmax() et des propriétés d’alignement permet ainsi de construire des interfaces à la fois flexibles, lisibles et faciles à maintenir.
Conclusion
CSS Grid offre une approche puissante pour construire des interfaces web modernes et responsives. Plutôt que de raisonner uniquement en termes de blocs ou de colonnes fixes, vous pouvez définir une véritable structure bidimensionnelle capable de s’adapter à l’espace disponible.
L’unité fr permet de répartir intelligemment l’espace disponible, tandis que minmax(), auto-fit et auto-fill permettent de créer des grilles capables de s’adapter automatiquement à différentes largeurs d’écran.
Pour les structures plus complexes, grid-template-areas apporte une syntaxe particulièrement lisible et facilite la modification du layout selon les différents contextes d’affichage.
Il ne faut toutefois pas chercher à supprimer systématiquement les media queries. Le véritable intérêt du CSS moderne est de combiner les différentes techniques : utiliser Grid pour gérer la structure, les fonctions intrinsèquement responsives lorsque cela est pertinent, et les media queries lorsque le design nécessite un changement explicite de comportement.
Pour progresser, essayez de reprendre une page existante et de reconstruire sa structure avec CSS Grid. Commencez par définir les colonnes avec fr, expérimentez avec minmax() et auto-fit, puis utilisez grid-template-areas pour organiser les différentes zones de la page.


