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

Flexbox: i Flex item in CSS

I Flex item sono gli elementi figli diretti di un Flex container. Una volta che un contenitore viene definito come display:flex, i suoi figli diventano automaticamente dei Flex item e possono essere modificati e disposti utilizzando diverse proprietà specifiche.

Nella lezione precedente, abbiamo visto le proprietà del Flex container.

In questa lezione, vediamo le sei proprietà per i Flex item:

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

La proprietà order

La proprietà order controlla l'ordine di visualizzazione dei Flex item all'interno del Flex container.

La proprietà order accetta numeri interi positivi o negativi. Gli elementi con un valore order inferiore vengono visualizzati prima di quelli con un valore superiore. Gli elementi con lo stesso valore di order mantengono l'ordine che avrebbero senza order.

1
2
3

<div class="flex-container">
  <div class="box1">1</div>
  <div class="box2">2</div>
  <div class="box3">3</div>
</div>

<style>
.flex-container {
  display: flex;
}
.box1 { order: 2; } /* Secondo posto */
.box2 { order: 1; } /* Primo posto */
.box3 { order: 3; } /* Terzo posto */
</style>

La proprietà flex-grow

La proprietà flex-grow determina quanto un Flex item si deve espandere rispetto agli altri Flex item all'interno dell'elemento che li contiene.

La proprietà flex-grow accetta un numero intero o decimale positivo senza unità, che indica lo spazio che deve occupare l'elemento. Un valore di 0 significa che l'elemento non si espanderà. Un valore di 1 significa che l'elemento si espanderà per riempire lo spazio disponibile, in proporzione agli altri elementi con un valore di flex-grow diverso da zero.

Nota: lo spazio viene calcolato automaticamente in base agli elementi presenti.

Ad esempio, se tutti gli elementi hanno un valore flex-grow:1, occuperanno tutto lo spazio:

1
2
3

.flex-container {
  display: flex;
}
.flex-container > div {
  flex-grow: 1;
}

Ora, invece, assegniamo dei valori diversi per ogni elemento:

flex-grow:0
flex-grow:3
flex-grow:2

<div class="flex-container">
  <div class="box1">flex-grow:0</div>
  <div class="box2">flex-grow:3</div>
  <div class="box3">flex-grow:2</div>
</div>

<style>
.flex-container {
  display: flex;
}
.flex-container > div {
  border: 1px solid black;
}
.box1 { flex-grow: 0; } /* Occupa solo lo spazio indispensabile */
.box2 { flex-grow: 3; }
.box3 { flex-grow: 2; }
</style>

Nell'esempio, ogni elemento ha un valore flex-grow diverso: il primo ha flex-grow:0, ciò significa che utilizzerà soltanto lo spazio necessario per il testo all'interno del <div>, il secondo ha flex-grow:3 e il terzo flex-grow:2, quindi utilizzeranno degli spazi differenti in proporzione al valore e allo spazio rimasto.

Nell'esempio, abbiamo anche utilizzato un selettore combinato (flex-container>div) per aggiungere un bordo agli elementi e rendere visibile la differenza di flex-grow.

La proprietà flex-shrink

La proprietà flex-shrink specifica quanto un Flex item deve ridursi rispetto agli altri elementi quando lo spazio disponibile diminuisce.

La proprietà flex-shrink accetta un numero intero o decimale positivo senza unità, che indica il fattore di riduzione dell'elemento. Un valore di 0 significa che l'elemento non si ridurrà mai, mentre un valore di 1 o superiore specifica la proporzione di riduzione rispetto agli altri elementi. Di default, tutti gli elementi hanno un valore di flex-shrink pari a 1.

flex-shrink:1
flex-shrink:2
flex-shrink:1
flex-shrink:1

<div class="flex-container">
  <div class="box1">flex-shrink:1</div>
  <div class="box2">flex-shrink:2</div>
  <div class="box3">flex-shrink:1</div>
  <div class="box4">flex-shrink:1</div>
</div>

<style>
.flex-container {
  display: flex;
}
.flex-container > div {
  border: 1px solid black;
  width: 100%;
}
.box1 { flex-shrink: 1; }
.box2 { flex-shrink: 2; }
.box3 { flex-shrink: 1; }
.box4 { flex-shrink: 1; }
</style>

La proprietà flex-basis

La proprietà flex-basis definisce la dimensione iniziale di un Flex item, prima che vengano applicate le proprietà flex-grow e flex-shrink.

Di default, la proprietà flex-basis è auto, quindi viene utilizzato il valore di height e width specificato per la dimensione dell'elemento.

La proprietà flex-basis accetta un qualsiasi valore che abbia un'unità di misura della lunghezza, come px o em.

1
2
flex-basis:200px
4

<div class="flex-container">
  <div class="box1">1</div>
  <div class="box2">2</div>
  <div class="box3">flex-basis:200px</div>
  <div class="box4">4</div>
</div>

<style>
.flex-container {
  display: flex;
}
.flex-container > div {
  border: 1px solid black;
}
.box3 { flex-basis:200px; }
</style>

La proprietà flex

La proprietà flex è una proprietà che combina flex-grow, flex-shrink e flex-basis in un'unica dichiarazione.

La sintassi è: flex: flex-grow flex-shrink flex-basis

Vediamo qualche esempio:

/* flex-grow: 0, flex-shrink: 1, flex-basis: 200px */
flex: 0 1 200px;

/* flex-grow: 1, flex-shrink: 2, flex-basis: auto */
flex: 1 2 auto;

Puoi scegliere alcuni valori predefiniti:

  • none: equivale a 0 0 auto, disabilitando la flessibilità dell'elemento.
  • auto: equivale a 1 1 auto, facendo sì che l'elemento cresca e si riduca in base allo spazio disponibile.

.flex-container {
  display: flex;
}
.flex-container > div {
  flex: none; /* Gli elementi non sono flessibili */
}

La proprietà align-self

La proprietà align-self consente di modificare l'allineamento di un singolo Flex item lungo l'asse trasversale (ovvero in verticale se gli elementi sono ordinati in orizzontale, oppure in orizzontale se gli elementi sono in verticale), indipendentemente dal valore di align-items impostato sul Flex container, di cui abbiamo parlato nella lezione precedente.

L'elemento accetta cinque valori:

  • stretch: l'elemento si allunga per riempire il contenitore. È il valore di default.
1
2
3

.flex-container {
  display: flex;
}
.box1 {
  align-self: stretch;
}

  • flex-start: l'elemento è allineato all'inizio dell'asse trasversale.
1
2
3

.flex-container {
  display: flex;
}
.box2 {
  align-self: flex-start;
}

  • flex-end: l'elemento è allineato alla fine dell'asse trasversale.
1
2
3

.flex-container {
  display: flex;
}
.box2 {
  align-self: flex-end;
}

  • center: l'elemento è centrato lungo l'asse trasversale.
1
2
3

.flex-container {
  display: flex;
}
.box2 {
  align-self: center;
}

  • baseline: l'elemento è allineato secondo la linea di base del testo. La linea di base del testo è la linea su cui appoggiano le lettere del testo.
1
2
3

.flex-container {
  display: flex;
}
.box2 {
  align-self: baseline;
}

Prova!Completa gli spazi vuoti con il testo appropriato.
/* Ordina l'elemento nel Flexbox, spostando il primo in seconda posizione */
.flex-container {
  display:flex;
}
.box1 {
  : 2;
}

Prova!Scegli l'opzione corretta tra quelle elencate.
/* Definisci la dimensione iniziale dell'elemento nel Flexbox */
.box1 {
  __________: 150px;
}