Menu

CSS justify-content e align-items: tutti i valori

justify-content posiziona gli elementi flex lungo l'asse principale e align-items lungo l'asse trasversale. Guarda tutti i valori fianco a fianco, misurati, con una griglia di allineamento cliccabile, align-self e i motivi per cui justify-content a volte non fa niente.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

justify-content e align-items in una frase ciascuno

In un contenitore flex, justify-content distribuisce gli elementi lungo l'asse principale (lungo la riga) e align-items li allinea sull'asse trasversale (in alto e in basso nella riga). Entrambe vanno sul contenitore:

Il riquadro è centrato in entrambe le direzioni: stessa distanza dal bordo iniziale e da quello finale, e dall'alto e dal basso. Togli height: 140px e align-items: center non ha più niente da fare, perché il contenitore si restringe all'altezza dell'elemento.

Tutti i valori di justify-content, misurati

Ogni riga qui sotto contiene gli stessi tre elementi con un justify-content diverso. I numeri nell'etichetta sopra ogni riga sono gli spazi lasciati dal browser: prima del primo elemento, tra gli elementi e dopo l'ultimo.

Il contenitore è di 420px e gli elementi occupano 180px, quindi ci sono 240px di spazio libero. Dove va a finire:

ValoreLo spazio libero vaSpazi nella demo
flex-start (e start)tutto dopo gli elementi0 / 0 / 0 / 240
centermetà prima, metà dopo120 / 0 / 0 / 120
flex-end (e end)tutto prima degli elementi240 / 0 / 0 / 0
space-betweensolo tra gli elementi0 / 120 / 120 / 0
space-arounduguale su entrambi i lati di ogni elemento, quindi i bordi ne ricevono metà40 / 80 / 80 / 40
space-evenlytutti gli spazi uguali, bordi compresi60 / 60 / 60 / 60

flex-start segue la direzione flex e start segue la direzione di scrittura. Differiscono solo con row-reverse o column-reverse, dove flex-start sta all'estremità invertita.

Tutti i valori di align-items

align-items agisce trasversalmente alla riga. Gli elementi qui sotto hanno altezze diverse, così puoi vedere cosa fa ogni valore:

ValoreCosa succede sull'asse trasversale
stretch (il predefinito)Gli elementi senza un'altezza impostata crescono fino a riempire il contenitore
flex-start (e start)Gli elementi stanno in alto, con la loro altezza
centerGli elementi sono centrati, con la loro altezza
flex-end (e end)Gli elementi stanno in basso
baselineGli elementi si spostano in modo che le prime righe di testo condividano la stessa linea di base

Nel riquadro baseline le tre etichette "Ag" stanno sulla stessa linea anche se la prima è più grande e la seconda ha del padding sopra. È il valore giusto per una riga che mescola un titolo grande con testo piccolo, o un'etichetta con un input.

Clicca per allineare

Fai clic su una cella qualsiasi della griglia 3 per 3. Il riquadro si sposta lì, e sotto viene stampato il CSS che lo mette in quella posizione:

Le righe del selettore cambiano align-items e le colonne cambiano justify-content. La cella centrale è il classico "centrare un div".

In una colonna i due si scambiano

justify-content segue sempre l'asse principale. Con flex-direction: column l'asse principale è verticale, quindi justify-content sposta gli elementi in alto e in basso e align-items li sposta in orizzontale:

Se li confondi, scambia le due proprietà invece di riscrivere il layout.

align-self e margini auto: un solo elemento

align-self su un elemento sovrascrive align-items per quell'elemento. In flexbox non esiste justify-self; per spostare un elemento lungo l'asse principale, dagli un margine auto, che prende tutto lo spazio libero da quel lato:

L'elemento verde scende da solo in basso, e quello ambra viene spinto all'estremità opposta della riga mentre gli altri restano all'inizio.

Quando ci sono più linee: align-content

align-items allinea gli elementi dentro la loro linea. Quando un contenitore va a capo su più linee, align-content distribuisce le linee stesse e accetta gli stessi valori di justify-content. Non fa niente in un contenitore nowrap, la cui unica linea riempie sempre l'altezza del contenitore. La pagina su flex-wrap lo mostra.

Errori comuni

  • Confondere gli assi. justify-content è la direzione del flusso, align-items è quella trasversale. In una colonna, il centraggio verticale è justify-content: center.
  • Niente spazio libero. Un elemento con flex: 1 prende tutto lo spazio, quindi justify-content non ha niente da distribuire. Lo stesso succede quando il contenitore è inline-flex e largo esattamente quanto i suoi elementi.
  • Nessuna altezza per align-items. Un contenitore alto quanto il suo contenuto non lascia niente da allineare. Imposta un height o un min-height.
  • Cercare justify-self in flexbox. Lì viene ignorato. Usa margin-inline-start: auto (o margin-left: auto) sull'elemento.
  • align-items: stretch che non allunga. Un elemento con un suo height lo mantiene. Togli l'altezza (usa min-height se serve un minimo).
  • Mettere le proprietà sugli elementi. Entrambe vanno sul contenitore flex. Solo align-self va su un elemento.

Domande frequenti

Qual è la differenza tra justify-content e align-items?

justify-content distribuisce gli elementi lungo l'asse principale, la direzione in cui scorrono (orizzontale con flex-direction: row). align-items li posiziona lungo l'asse trasversale (verticale per una riga). In una colonna i due si scambiano: justify-content diventa verticale.

Qual è la differenza tra space-between, space-around e space-evenly?

space-between non mette spazio prima del primo elemento né dopo l'ultimo e divide il resto tra gli elementi. space-around dà a ogni elemento lo stesso spazio su entrambi i lati, quindi ai bordi arriva mezzo spazio. space-evenly rende uguali tutti gli spazi, bordi compresi.

Perché justify-content non funziona?

Di solito non c'è spazio libero da distribuire: un elemento ha flex-grow o flex: 1, oppure il contenitore è largo solo quanto i suoi elementi (per esempio con display: inline-flex o un contenitore flottante). Controlla anche che display: flex sia sul genitore, non sugli elementi.

Perché align-items center non centra verticalmente?

Probabilmente il contenitore è alto esattamente quanto il suo contenuto, quindi non c'è niente in cui centrare. Dai al contenitore flex un'altezza o un min-height, e gli elementi si sposteranno al centro.

Cosa fa align-self?

align-self sovrascrive l'align-items del contenitore per un solo elemento. Per esempio align-self: flex-end su un figlio sposta solo quel figlio alla fine dell'asse trasversale, mentre gli altri restano dove li ha messi align-items.

Esiste justify-self in flexbox?

No. Flexbox ignora justify-self, perché l'asse principale è condiviso da tutti gli elementi. Per spingere un elemento lungo l'asse principale, usa un margine auto, come margin-inline-start: auto. justify-self funziona in grid.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA