Menu

justify-content et align-items en CSS : toutes les valeurs

justify-content place les éléments flex le long de l'axe principal et align-items le long de l'axe secondaire. Voyez toutes les valeurs côte à côte, mesurées, avec une grille d'alignement cliquable, align-self, et les raisons pour lesquelles justify-content ne fait parfois rien.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

justify-content et align-items en une phrase chacun

Dans un conteneur flex, justify-content répartit les éléments le long de l'axe principal (le long de la ligne) et align-items les aligne sur l'axe secondaire (de haut en bas de la ligne). Les deux se placent sur le conteneur :

La boîte est centrée dans les deux sens : à la même distance des bords de début et de fin, et du haut et du bas. Retirez height: 140px et align-items: center n'a plus rien à faire, car le conteneur se réduit à la hauteur de l'élément.

Toutes les valeurs de justify-content, mesurées

Chaque rangée ci-dessous contient les trois mêmes éléments avec un justify-content différent. Les nombres de l'étiquette au-dessus de chaque rangée sont les espaces laissés par le navigateur : avant le premier élément, entre les éléments, et après le dernier.

Le conteneur fait 420px et les éléments en occupent 180, il reste donc 240px d'espace libre. Où il va :

ValeurL'espace libre vaEspaces dans la démo
flex-start (et start)entièrement après les éléments0 / 0 / 0 / 240
centermoitié avant, moitié après120 / 0 / 0 / 120
flex-end (et end)entièrement avant les éléments240 / 0 / 0 / 0
space-betweenseulement entre les éléments0 / 120 / 120 / 0
space-aroundégal des deux côtés de chaque élément, les bords en reçoivent la moitié40 / 80 / 80 / 40
space-evenlytous les espaces égaux, bords compris60 / 60 / 60 / 60

flex-start suit la direction flex et start suit le sens d'écriture. Ils ne diffèrent qu'avec row-reverse ou column-reverse, où flex-start se trouve à l'extrémité inversée.

Toutes les valeurs de align-items

align-items agit en travers de la ligne. Les éléments ci-dessous ont des hauteurs différentes pour que vous voyiez ce que chaque valeur en fait :

ValeurCe qui se passe sur l'axe secondaire
stretch (par défaut)Les éléments sans hauteur définie grandissent pour remplir le conteneur
flex-start (et start)Les éléments sont en haut, à leur propre hauteur
centerLes éléments sont centrés, à leur propre hauteur
flex-end (et end)Les éléments sont en bas
baselineLes éléments se déplacent pour que leurs premières lignes de texte partagent une même ligne de base

Dans la boîte baseline, les trois étiquettes « Ag » sont sur une même ligne alors que la première est plus grande et que la deuxième a du padding au-dessus. C'est la valeur pour une rangée qui mélange un grand titre et un petit texte, ou une étiquette et un champ.

Cliquez pour aligner

Cliquez sur n'importe quelle case de la grille 3 × 3. La boîte s'y déplace, et le CSS qui l'y place s'affiche en dessous :

Les lignes du sélecteur changent align-items et les colonnes changent justify-content. La case du milieu, c'est le classique « centrer une div ».

En colonne, les deux s'inversent

justify-content suit toujours l'axe principal. Avec flex-direction: column, l'axe principal est vertical : justify-content déplace alors les éléments de haut en bas et align-items les déplace en travers :

Si vous les confondez, échangez les deux propriétés plutôt que de réécrire la mise en page.

align-self et marges auto : un seul élément

align-self sur un élément remplace align-items pour cet élément. Il n'existe pas de justify-self en flexbox ; pour déplacer un élément le long de l'axe principal, donnez-lui une marge auto, qui prend tout l'espace libre de ce côté :

L'élément vert descend seul en bas, et l'élément ambre est poussé à l'autre bout de la rangée pendant que les autres restent au début.

Quand il y a plusieurs lignes : align-content

align-items aligne les éléments dans leur ligne. Quand un conteneur passe sur plusieurs lignes, align-content espace les lignes elles-mêmes, et accepte les mêmes valeurs que justify-content. Il ne fait rien dans un conteneur nowrap, dont l'unique ligne remplit toujours la hauteur du conteneur. La page flex-wrap le montre.

Erreurs courantes

  • Confondre les axes. justify-content suit le sens d'écoulement, align-items le traverse. En colonne, le centrage vertical, c'est justify-content: center.
  • Pas d'espace libre. Un élément avec flex: 1 prend tout l'espace, et justify-content n'a rien à répartir. C'est aussi le cas quand le conteneur est inline-flex et exactement aussi large que ses éléments.
  • Pas de hauteur pour align-items. Un conteneur aussi haut que son contenu ne laisse rien à aligner. Définissez une height ou une min-height.
  • Chercher justify-self en flexbox. Il y est ignoré. Utilisez margin-inline-start: auto (ou margin-left: auto) sur l'élément.
  • Un align-items: stretch qui n'étire pas. Un élément qui a sa propre height la garde. Retirez la hauteur (utilisez min-height s'il lui faut un minimum).
  • Placer les propriétés sur les éléments. Les deux vont sur le conteneur flex. Seul align-self se place sur un élément.

Questions fréquentes

Quelle est la différence entre justify-content et align-items ?

justify-content répartit les éléments le long de l'axe principal, la direction dans laquelle ils s'écoulent (horizontale pour flex-direction: row). align-items les positionne le long de l'axe secondaire (vertical pour une ligne). En colonne, les deux s'inversent : justify-content devient vertical.

Quelle est la différence entre space-between, space-around et space-evenly ?

space-between ne met aucun espace avant le premier élément ni après le dernier et répartit le reste entre les éléments. space-around donne à chaque élément le même espace des deux côtés, donc les bords reçoivent un demi-espace. space-evenly rend tous les espaces égaux, bords compris.

Pourquoi justify-content ne fonctionne-t-il pas ?

En général, il n'y a pas d'espace libre à répartir : un élément a flex-grow ou flex: 1, ou le conteneur n'est pas plus large que ses éléments (par exemple display: inline-flex ou un conteneur flottant). Vérifiez aussi que display: flex est sur le parent, pas sur les éléments.

Pourquoi align-items center ne centre-t-il pas verticalement ?

Le conteneur a probablement exactement la hauteur de son contenu, il n'y a donc rien dans quoi centrer. Donnez au conteneur flex une hauteur ou une min-height, et les éléments se placeront en son milieu.

Que fait align-self ?

align-self remplace le align-items du conteneur pour un seul élément. Par exemple, align-self: flex-end sur un enfant ne déplace que cet enfant à la fin de l'axe secondaire, tandis que les autres restent là où align-items les a placés.

Existe-t-il un justify-self en flexbox ?

Non. Flexbox ignore justify-self, car l'axe principal est partagé par tous les éléments. Pour pousser un élément le long de l'axe principal, utilisez une marge auto, comme margin-inline-start: auto. justify-self fonctionne en grid.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER