ComparaisonComparaisons

Flexbox vs Grid

Flexbox aligne les éléments sur un axe et s’adapte à leur contenu, alors que Grid organise une grille à deux dimensions, en lignes et colonnes, où vous les placez.

Sur cette page

Comparaison point par point

#
  • Nombre de dimensions

    Flexbox
    Un seul : ligne ou colonne
    Grid
    Deux à la fois : lignes et colonnes
  • Point de départ

    Flexbox
    La taille des éléments détermine la mise en page
    Grid
    La grille détermine où va chaque élément
  • Placement des éléments

    Flexbox
    Dans l’ordre, avec retour à la ligne via flex-wrap
    Grid
    Sur des lignes précises ou dans des zones nommées, même avec chevauchement
  • Espacement entre les éléments

    Grid
    gap (fonctionne de la même façon)
  • Alignement sur les deux axes à la fois

    Flexbox
    Un seul axe à la fois (justify-content, align-items)
    Grid
    place-items, place-content directement sur les deux axes
  • Utilisation typique

    Flexbox
    Menu, liste d’étiquettes, ligne de boutons, centrage
    Grid
    Mise en page de toute la page, grille de cartes aux colonnes régulières

Exemple

#
CSS
.flex-row {
  display: flex;
  gap: 8px;
}

.grid-area {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
}
Aperçu

Définition et utilisation

#

Ces deux technologies ont remplacé les anciennes astuces avec float et les tableaux, mais elles résolvent un problème différent. Flexbox travaille sur un seul axe, une ligne ou une colonne, et répartit les éléments selon leur taille naturelle. Grid pense tout de suite en deux dimensions : vous dessinez d’abord une grille de lignes et de colonnes, puis vous y placez les éléments, même de façon à ce qu’ils se chevauchent.

En pratique, Flexbox fonctionne bien quand le nombre d’éléments est inconnu et qu’ils doivent s’enchaîner les uns après les autres : un menu, une liste d’étiquettes, une ligne de boutons. Grid l’emporte quand vous connaissez la mise en page à l’avance : toute une page avec en-tête, panneau latéral et contenu, ou une grille de cartes aux colonnes et lignes régulières.

Rien n’empêche d’utiliser les deux en même temps. Un schéma fréquent consiste à utiliser Grid pour toute la page et Flexbox à l’intérieur d’une seule carte, là où ne compte qu’une ligne avec une icône et du texte.

Syntaxe

#
Syntaxe
.flex { display: flex; flex-direction: row | column; }
.grid { display: grid; grid-template-columns: ...; grid-template-rows: ...; }

Plus d’exemples

#
Flexbox : une barre d’outils qui revient à la ligne toute seule
CSS
.toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}
Aperçu

Réduisez la largeur de l’aperçu : les éléments passent seuls à la ligne suivante. Avec Grid, il faudrait définir combien de colonnes la grille doit contenir.

Grid : mise en page avec des zones nommées
CSS
.layout {
  display: grid;
  grid-template-columns: 120px 1fr;
  grid-template-areas:
    "header header"
    "menu   content";
  gap: 8px;
}

.layout header { grid-area: header; }
.layout nav { grid-area: menu; }
.layout main { grid-area: content; }
Aperçu

Une telle mise en page à deux dimensions (en-tête pleine largeur, panneau latéral et contenu) demanderait, avec Flexbox, d’imbriquer plusieurs conteneurs.

Bonnes pratiques

#
  • Posez-vous la question : est-ce que je mets en page une seule ligne d’éléments, ou toute une grille à deux dimensions ? La réponse indique le bon outil.
  • Un Grid à une seule colonne (grid-template-columns: 1fr) fonctionne presque comme un Flexbox en colonne. Dans les cas simples, la différence est cosmétique.
  • Combinez les deux technologies : Grid pour la mise en page de la page, Flexbox à l’intérieur d’un composant.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.