logo Dove iniziare Linguaggi Aiuto Blog
Home Dove iniziare Linguaggi Aiuto e Supporto Info e Blog

Flexbox: il Flex container in CSS

Il Flex container è un elemento HTML a cui viene applicato display:flex. Questo trasforma i suoi elementi figli diretti in Flex item, che possono essere disposti e allineati con precisione utilizzando diverse proprietà.

Abbiamo parlato della differenza tra Flex container e Flex item nella lezione sul Flexbox.

In questa lezione, vediamo quali sono e come funzionano le seguenti proprietà CSS per i Flex container:

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content
  • row-gap, column-gap e gap

La proprietà flex-direction

Questa proprietà definisce la direzione principale lungo cui i Flex item si dispongono all'interno del Flex container.

I valori possibili sono quattro:

  • row (default): gli elementi sono disposti in fila, da sinistra a destra.
1
2
3
4

.flex-container {
  display: flex;
  flex-direction: row;
}

  • row-reverse: gli elementi sono disposti in fila, ma da destra a sinistra.
1
2
3
4

.flex-container {
  display: flex;
  flex-direction: row-reverse;
}

  • column: gli elementi sono disposti in colonna, dall'alto verso il basso
1
2
3

.flex-container {
  display: flex;
  flex-direction: column;
}

  • column-reverse: gli elementi sono disposti in colonna, ma dal basso verso l'alto.
1
2
3

.flex-container {
  display: flex;
  flex-direction: column-reverse;
}

La proprietà flex-wrap

La proprietà flex-wrap specifica se gli elementi devono restare su una sola linea o se possono andare a capo se lo spazio non è sufficiente.

I valori possibili sono tre:

  • nowrap (default): tutti gli elementi rimangono su una sola riga.
1
2
3
4
5
6
7
8
9
10
11

.flex-container {
  display: flex;
  flex-wrap: nowrap;
  overflow: auto; /* Permette lo scorrimento */
}

  • wrap: gli elementi vanno a capo se necessario.
1
2
3
4
5
6
7
8
9
10
11

.flex-container {
  display: flex;
  flex-wrap: wrap;
}

  • wrap-reverse: gli elementi vanno a capo, ma invertendo l'ordine delle righe o delle colonne.
1
2
3
4
5
6
7
8
9
10
11

.flex-container {
  display: flex;
  flex-wrap: wrap-reverse;
}

La proprietà flex-flow

La proprietà flex-flow è un'abbreviazione che combina flex-direction e flex-wrap. Permette di impostare entrambe le proprietà con un'unica dichiarazione.

La sintassi è: flex-flow: direction wrap. Usa i valori di flex-direction per il parametro direction e usa i valori di flex-wrap per il parametro wrap.

Ecco un esempio che unisce flex-direction:row e flex-wrap:wrap:

.flex-container {
  display: flex;
  flex-flow: row wrap;
}

La proprietà justify-content

La proprietà justify-content allinea i Flex item lungo l'asse principale (definito da flex-direction). Ad esempio, permette di allineare tutti gli elementi al centro della riga, a destra o a sinistra.

La proprietà justify-content accetta sei valori:

  • flex-start (default): gli elementi sono allineati all'inizio del contenitore.
1
2
3

.flex-container {
  display: flex;
  justify-content: flex-start;
}

  • flex-end: gli elementi sono allineati alla fine del contenitore.
1
2
3

.flex-container {
  display: flex;
  justify-content: flex-end;
}

  • center: gli elementi sono centrati nel contenitore.
1
2
3

.flex-container {
  display: flex;
  justify-content: center;
}

  • space-between: gli elementi sono distribuiti equamente, con dello spazio tra di loro.
1
2
3

.flex-container {
  display: flex;
  justify-content: space-between;
}

  • space-around: gli elementi sono distribuiti equamente, con spazio uguale intorno a ciascun elemento.
1
2
3

.flex-container {
  display: flex;
  justify-content: space-around;
}

  • space-evenly: gli elementi sono distribuiti con spazi uguali tra loro e ai bordi del contenitore.
1
2
3

.flex-container {
  display: flex;
  justify-content: space-evenly;
}

La proprietà align-items

La proprietà align-items allinea i Flex item in verticale se è stato impostato flex-direction:row o in orizzontale se è stato impostato flex-direction:column. Possiamo chiamare l'asse di riferimento asse trasversale (perpendicolare all'asse principale), in quanto non la conosciamo a priori.

La proprietà align-items accetta cinque valori (in questi esempi, il Flex container avrà un'altezza di 150px per vedere la differenza nei valori):

  • stretch (default): gli elementi si allungano per riempire il contenitore (se non hanno un'altezza specificata).
1
2
3

.flex-container {
  display: flex;
  height: 150px;
  align-items: stretch;
}

  • flex-start: gli elementi sono allineati all'inizio dell'asse trasversale.
1
2
3

.flex-container {
  display: flex;
  height: 150px;
  align-items: flex-start;
}

  • flex-end: gli elementi sono allineati alla fine dell'asse trasversale.
1
2
3

.flex-container {
  display: flex;
  height: 150px;
  align-items: flex-end;
}

  • center: gli elementi sono centrati lungo l'asse trasversale.
1
2
3

.flex-container {
  display: flex;
  height: 150px;
  align-items: center;
}

  • baseline: gli elementi sono allineati in base alla loro linea di base del testo. La linea di base del testo è la linea su cui appoggiano le lettere del testo. Nell'esempio, abbiamo scelto tre diverse dimensioni del testo per evidenziare come i Flex item sono allineati in base alla linea di testo.
1
2
3

.flex-container {
  display: flex;
  height: 150px;
  align-items: baseline;
}

La proprietà align-content

La proprietà align-content allinea le righe del Flex container quando ci sono più righe di elementi, quindi quando è impostato flex-wrap:wrap.

Per provare come funzionano i valori di questa proprietà, consigliamo un Flex container che abbia queste proprietà CSS (per l'altezza, che deve essere consistente, non possiamo inserire qui gli esempi per ogni valore):

.flex-container {
  display: flex;
  height: 1000px;
  background-color: lightgreen;
  flex-wrap: wrap;
}

I valori accettati da align-content sono sei:

  • stretch (default): le righe si allungano (se possibile) per riempire lo spazio disponibile. Se non possibile, rimane lo spazio alla fine delle righe.

.flex-container {
  display: flex;
  flex-wrap: wrap;
  align-content: stretch;
}

  • flex-start: le righe sono allineate all'inizio del contenitore.

.flex-container {
  display: flex;
  flex-wrap: wrap;
  align-content: flex-start;
}

  • flex-end: le righe sono allineate alla fine del contenitore.

.flex-container {
  display: flex;
  flex-wrap: wrap;
  align-content: flex-end;
}

  • center: le righe sono centrate all'interno del contenitore.

.flex-container {
  display: flex;
  flex-wrap: wrap;
  align-content: center;
}

  • space-between: le righe sono distribuite equamente, con spazio tra di loro.

.flex-container {
  display: flex;
  flex-wrap: wrap;
  align-content: space-between;
}

  • space-around: le righe sono distribuite equamente, con spazio intorno a ciascuna riga.

.flex-container {
  display: flex;
  flex-wrap: wrap;
  align-content: space-around;
}

Le proprietà gap, row-gap, column-gap

Le proprietà gap, row-gap, column-gap definiscono lo spazio tra i Flex item all'interno del contenitore. Lo spazio è soltanto tra i Flex item, non tra gli elementi e il bordo del Flex container.

  • gap: definisce lo spazio sia tra le righe che tra le colonne.
  • row-gap: definisce lo spazio tra le righe.
  • column-gap: definisce lo spazio tra le colonne.

Tutte queste tre proprietà accettano qualsiasi unità di misura, come i px, em, ecc.

Ad esempio, in questo caso aggiungiamo gap:30px tra gli elementi:

1
2
3

.flex-container {
  display: flex;
  gap: 30px;
}

Allineare un elemento al centro con Flexbox

Per allineare un elemento al centro di un altro elemento, possiamo utilizzare le proprietà CSS di Flexbox che abbiamo appena visto. Oltre a Flexbox, comunque, esistono altri metodi che abbiamo visto nella lezione su come allineare gli elementi.

Per allineare un elemento al centro, sia in orizzontale che in verticale, abbiamo bisogno di due proprietà:

Centrato

.flex-container {
  display: flex;
  height: 150px;
  justify-content: center;
  align-items: center;
}

Prova!Completa gli spazi vuoti con il testo appropriato.
/* Centra l'elemento (in verticale e orizzontale) con Flexbox */
div {
  display: ;
  height: 150px;
  justify-content: center;
  : center;
}

Prova!Scegli l'opzione corretta tra quelle elencate.
/* Aggiungi spazio tra le colonne degli elementi Flexbox */
div {
  display: flex;
  _________: 20px;
}