À propos de cet outil
Ce générateur permet de construire et de comprendre une mise en page CSS avec Flexbox ou Grid. Réglez le conteneur (direction, retour à la ligne, alignements, espacements, colonnes, rangées, zones nommées), cliquez sur une case de l'aperçu pour régler ses propriétés propres (order, flex-grow, étendue de colonnes ou de rangées…) et réduisez la largeur de l'aperçu pour voir le comportement sur un écran étroit. Le code CSS et le HTML correspondants sont générés en direct, avec seulement les valeurs utiles ou, si vous le souhaitez, toutes les valeurs par défaut.
Comment utiliser cet outil
- Choisissez Flexbox (une seule direction) ou Grid (lignes et colonnes), ou partez d'un exemple : centrage, barre de navigation, étiquettes, colonnes égales, grille de cartes réactive, page en zones nommées.
- Réglez le conteneur avec les listes et les curseurs : l'aperçu se met à jour instantanément.
- Cliquez sur une case de l'aperçu pour régler ses propriétés individuelles (ordre, croissance, étendue, alignement propre).
- Réduisez la largeur de l'aperçu pour tester le comportement sur petit écran, puis copiez le code CSS et le HTML.
Flexbox ou Grid : lequel choisir ?
Flexbox et Grid sont les deux systèmes de mise en page modernes de CSS. Ils ne se concurrencent pas : ils résolvent deux problèmes différents, et on les combine tous les jours.
| Critère | Flexbox | Grid |
|---|---|---|
| Dimension | Une seule : une ligne ou une colonne à la fois. | Deux : lignes et colonnes ensemble. |
| Qui décide de la taille ? | Le contenu des éléments (la mise en page « part du contenu »). | La grille définie à l'avance (la mise en page « part de la structure »). |
| Cas d'usage typiques | Barre de navigation, rangée de boutons, centrage, étiquettes, carte dont le pied reste en bas. | Structure d'une page, grille de cartes, galerie, formulaire en colonnes alignées. |
| Alignement des éléments entre eux | Limité à la ligne en cours : deux lignes d'éléments sont indépendantes. | Les colonnes et rangées sont partagées par toute la grille. |
Une règle pratique : si vous alignez des éléments le long d'une direction, pensez Flexbox ; si vous placez des éléments dans un tableau de cellules, pensez Grid. Une page type utilise une grille pour sa structure (en-tête, contenu, colonne latérale, pied de page), et Flexbox à l'intérieur de chaque zone.
Comprendre Flexbox : l'axe principal et l'axe transversal
Tout Flexbox repose sur deux axes. L'axe principal est celui de la direction du conteneur (flex-direction) : horizontal pour row, vertical pour column. L'axe transversal lui est perpendiculaire. Les propriétés d'alignement suivent ces axes, et non « horizontal » et « vertical » : c'est la source de la plupart des confusions.
| Propriété | Rôle |
|---|---|
flex-direction | Choisit l'axe principal (row, column) et son sens (-reverse). |
flex-wrap | Autorise les éléments à passer à la ligne suivante (wrap) au lieu de rester sur une seule ligne (nowrap, valeur par défaut). |
justify-content | Répartit les éléments le long de l'axe principal (début, centre, fin, espacement égal…). |
align-items | Aligne les éléments sur l'axe transversal. Par défaut, stretch étire chaque élément à la hauteur de la ligne. |
align-content | Répartit les lignes entre elles, quand il y en a plusieurs (avec wrap) et de la place libre sur l'axe transversal. |
gap | Espace entre les éléments, sans marges à compenser sur le premier ou le dernier. |
Chaque élément peut aussi surcharger le comportement du conteneur : align-self (alignement propre), order (position visuelle) et surtout flex-grow, flex-shrink et flex-basis, qui décident comment il partage l'espace. Leurs valeurs initiales sont 0 1 auto : l'élément ne grandit pas, peut rétrécir et part de la taille de son contenu. La notation flex: 1 est un raccourci de flex: 1 1 0% : tous les éléments concernés se partagent l'espace disponible à parts égales. Par défaut, un élément flex ne rétrécit pas en dessous de la taille minimale de son contenu, d'où les débordements avec un long mot ou une image : ajoutez min-width: 0 à l'élément pour l'autoriser à rétrécir.
Comprendre Grid : colonnes, rangées, zones
Avec Grid, on décrit d'abord la grille sur le conteneur, puis les éléments s'y placent d'eux-mêmes, ou à l'endroit qu'on leur indique.
grid-template-columnsetgrid-template-rowsdéfinissent les pistes. L'unitéfr(« fraction ») répartit l'espace restant :200px 1fr 2frdonne une colonne fixe, puis deux colonnes qui se partagent le reste dans un rapport de 1 à 2. La fonctionrepeat(3, 1fr)évite de répéter une valeur, etminmax(160px, 1fr)fixe une largeur minimale.- Les grilles réactives sans media query.
repeat(auto-fit, minmax(160px, 1fr))demande au navigateur de placer autant de colonnes de 160 px minimum que la largeur le permet. Les mots-clésauto-fitetauto-fillne diffèrent que lorsqu'il y a moins d'éléments que de colonnes possibles :auto-fillconserve les colonnes vides,auto-fitles réduit à zéro et laisse les éléments s'étirer pour occuper la place. - Les zones nommées.
grid-template-areasdessine la mise en page avec des noms de zones, une chaîne par rangée. Il suffit ensuite d'écriregrid-area: mainsur un élément pour qu'il occupe la zone « main ». Les zones doivent former des rectangles. - L'étendue.
grid-column: span 2fait occuper deux colonnes à un élément ;grid-row: span 2, deux rangées. - La grille implicite. Les éléments en trop créent automatiquement de nouvelles rangées (ou colonnes avec
grid-auto-flow: column) dont la taille se règle avecgrid-auto-rows.
Quatre recettes à connaître
1. Centrer un élément dans son parent (horizontalement et verticalement) :
.container {
display: grid;
place-items: center;
min-height: 240px;
}
2. Pousser le dernier élément à droite dans une barre de navigation flex : une marge automatique absorbe tout l'espace libre.
.nav { display: flex; gap: 16px; }
.nav .compte { margin-left: auto; }
3. Une page dont le pied reste en bas, même quand le contenu est court :
body {
display: grid;
grid-template-rows: auto 1fr auto;
min-height: 100vh;
}
4. Une grille de cartes réactive, qui s'adapte à toute largeur sans media query :
.cartes {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr));
gap: 16px;
}
Ces quatre cas se reproduisent avec l'outil : choisissez l'exemple correspondant, ajustez-le, et utilisez le curseur de largeur de l'aperçu pour vérifier son comportement.
Les pièges classiques (et comment les éviter)
- Un élément qui déborde au lieu de rétrécir. Un élément flex ou une colonne
1frne descend pas sous la taille minimale de son contenu. Un texte long sans espace, une URL ou un tableau peut alors faire déborder la page. Remèdes :min-width: 0sur l'élément flex,minmax(0, 1fr)à la place de1frpour une colonne de grille, etoverflow-wrap: anywherepour le texte. - Un alignement qui ne fait rien.
justify-contentn'a d'effet que s'il reste de la place sur l'axe principal ;align-items: centerne se voit que si le conteneur est plus haut que ses éléments (donnez-lui une hauteur) ;align-contentexige plusieurs lignes (flex-wrap: wrap). - Un
align-items: stretchsans effet. L'étirement ne s'applique qu'aux éléments dont la hauteur est automatique : une hauteur fixée l'emporte. - Un ordre visuel qui diffère de l'ordre du code.
order, les valeurs-reverseet le placement dans une grille ne changent que l'affichage, pas l'ordre de lecture des lecteurs d'écran ni l'ordre de tabulation. Pour la spécification, ils ne doivent pas servir à remplacer un ordre correct dans le code : un utilisateur du clavier verrait son focus sauter d'un endroit à l'autre de l'écran. Écrivez le HTML dans l'ordre logique et réservez l'orderaux ajustements purement visuels. - Des pourcentages et des marges mal combinés. Préférez la propriété
gapaux marges entre éléments : elle ne produit pas d'espace superflu aux extrémités, et fonctionne aujourd'hui avec Flexbox dans tous les navigateurs courants.
Pour la couleur des cases et des fonds de votre mise en page, essayez le générateur de palettes ; pour les arrondis et les ombres, le générateur de border-radius et le générateur d'ombres.
Questions fréquentes
Quand utiliser Flexbox plutôt que Grid ?
Flexbox organise des éléments dans une seule direction (une ligne ou une colonne) et laisse le contenu dicter les tailles : idéal pour une barre de navigation, une rangée de boutons, un centrage. Grid organise un espace à deux dimensions avec des lignes et des colonnes définies à l'avance : idéal pour la structure d'une page ou une grille de cartes. Les deux se combinent : une grille de page dont chaque cellule contient une disposition flex.
Comment centrer un élément horizontalement et verticalement ?
Sur le conteneur, appliquez display: flex avec justify-content: center et align-items: center, et donnez-lui une hauteur (min-height: 240px, par exemple). L'exemple « Centrer un élément » de l'outil produit exactement ce code. Avec Grid, display: grid et place-items: center donnent le même résultat.
Quelle différence entre justify-content et align-items ?
justify-content répartit les éléments le long de l'axe principal (horizontal pour une ligne) ; align-items les aligne sur l'axe transversal (vertical pour une ligne). Si vous passez à flex-direction: column, les rôles s'échangent : les axes suivent la direction.
Comment faire une grille de cartes qui s'adapte à l'écran sans media query ?
Avec grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)) : le navigateur place autant de colonnes de 160 px minimum que la largeur le permet, et les répartit à parts égales. Essayez-le avec l'exemple « Grille de cartes réactive » et le curseur de largeur de l'aperçu.
Mes réglages sont-ils enregistrés ?
Non, tout est calculé dans votre navigateur et rien n'est conservé : copiez le code pour le garder.
Sources et références
- MDN — Concepts de base de Flexbox
- MDN — Disposition en grille (CSS Grid) : concepts de base
- MDN — Réordonner les éléments flex et accessibilité
- MDN — La propriété flex
- MDN — La fonction repeat() (auto-fit et auto-fill)
- MDN — grid-template-areas
- MDN — Grid et les autres méthodes de mise en page
- web.dev — Apprendre le CSS : Flexbox
- web.dev — Apprendre le CSS : Grid