grid-auto-flow en CSS : ce que devient un élément qu'on n'a pas placé

grid-auto-flow décide comment une grille CSS place automatiquement les éléments sans position, en ligne, en colonne ou en dense.
4 min de lecture
Believemy logo

Toute grille ne place pas nécessairement chaque élément à la main : dès qu'un enfant n'a pas de position explicite avec grid-column ou grid-row, la grille doit décider elle-même où le placer. grid-auto-flow contrôle exactement cette logique de placement automatique, celle qui s'applique par défaut à tous les éléments d'une grille simple.

Par défaut, cette logique remplit ligne par ligne, mais grid-auto-flow permet de la changer pour remplir colonne par colonne, ou pour combler les trous laissés par des éléments déjà positionnés à la main.


Définition

grid-auto-flow définit le sens dans lequel CSS Grid place automatiquement les éléments qui n'ont pas de position explicite, ainsi que le comportement de comblement des cases vides. Elle se pose sur le conteneur, pas sur les enfants, et n'a aucun effet sur les éléments positionnés explicitement avec grid-column et grid-row, qui gardent toujours la priorité sur le placement automatique.


Les valeurs disponibles

ValeurComportement
row (défaut)Remplit une ligne entière avant de passer à la suivante
columnRemplit une colonne entière avant de passer à la suivante
denseComble les cases vides laissées en arrière, quitte à changer l'ordre visuel
CSS
.grille {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-flow: column;
}

Avec grid-auto-flow: column, les éléments sans position explicite se rangent colonne par colonne au lieu de ligne par ligne, ce qui change complètement la lecture visuelle d'une grille identique par ailleurs. C'est utile pour des mises en page qui doivent se lire de haut en bas avant de gauche à droite, comme un calendrier ou une liste organisée par catégories verticales.


Les pistes implicites : grid-auto-rows et grid-auto-columns

Quand un élément déborde des lignes ou colonnes explicitement définies, la grille crée des pistes implicites pour l'accueillir. grid-auto-rows et grid-auto-columns fixent la taille de ces pistes créées automatiquement, exactement comme grid-template-columns fixe la taille des colonnes explicites.

CSS
.grille {
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 120px;
}

Sans grid-auto-rows, une ligne implicite prend une hauteur qui s'ajuste à son contenu, ce qui peut créer des lignes de hauteurs très inégales. La fixer à 120px, par exemple, garde une grille visuellement régulière même quand elle grandit au-delà de ce qui était prévu au départ.


Un exemple concret avec dense

CSS
.galerie {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-flow: dense;
}
.grande-vignette {
  grid-column: span 2;
  grid-row: span 2;
}

Dans une galerie où certaines vignettes occupent deux colonnes et deux lignes, le placement par défaut laisse souvent des cases vides après une grande vignette, le temps que la grille atteigne une nouvelle ligne complète. Avec grid-auto-flow: dense, les vignettes suivantes, plus petites, viennent combler ces trous au lieu d'attendre leur tour dans l'ordre strict du HTML, ce qui donne une mosaïque visuellement plus compacte.


Le piège de dense sur l'ordre visuel

La valeur dense réorganise visuellement les éléments pour combler les trous laissés par des éléments de tailles différentes, ce qui donne une grille plus compacte à l'œil. Mais cette réorganisation change uniquement l'affichage, jamais l'ordre du code HTML.

Bon à savoirUn utilisateur qui navigue au clavier avec la touche Tab suit toujours l'ordre du HTML, pas l'ordre visuel réarrangé par dense. Sur une grille où l'ordre de lecture compte, comme un fil d'actualité ou une liste d'étapes, dense peut créer un décalage gênant entre ce qu'on voit et ce que le clavier parcourt.


Questions fréquentes

Questiongrid-auto-flow s'applique-t-il aux éléments positionnés avec grid-column ?

Non, un élément positionné explicitement garde toujours sa position telle quelle. grid-auto-flow ne concerne que les éléments qui n'ont reçu aucune position, en décidant où les insérer parmi les cases restées libres.

QuestionQuelle est la différence entre grid-auto-flow: row dense et grid-auto-flow: column dense ?

Les deux comblent les trous, mais dans des directions différentes : row dense cherche des trous en avançant ligne par ligne, tandis que column dense les cherche en avançant colonne par colonne. Le résultat visuel dépend donc du sens choisi, autant que de la valeur dense elle-même.

Questiongrid-auto-flow remplace-t-il la propriété order utilisée en Flexbox ?

Non, ce sont deux mécanismes différents. order change l'ordre visuel d'un élément précis, en Flexbox comme en Grid, alors que grid-auto-flow change uniquement la logique de placement automatique appliquée aux éléments sans position définie. Les deux peuvent d'ailleurs se combiner sur une même grille.

Termes connexes

Découvrez notre glossaire HTML et CSS

Parcourez les termes et définitions les plus couramment utilisés dans le domaine du développement HTML et CSS.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.