Flexbox Layout in CSS
Il FlexBox Layout, rende più semplice progettare strutture flessibili e responsive per il layout senza utilizzare float o posizionamenti strani.
Elemento Genitore (Container)
L’elemento diventa un flexbox container flessibile impostando la proprietà di display su flex:
.container {
display: flex;
}
Da questo momento possiamo lavorare all’interno con elementi flessibili.
Le proprietà dei flex container sono:
- flex-direction
- flex-wrap
- flex-flow
- justify-content
- align-items
- align-content
La Proprietà flex-direction
La proprietà flex-direction
definisce in quale direzione il contenitore vuole impilare gli elementi flessibili (items).
Il valore column impila gli items verticalmente (dall’alto al basso), mentre row in orizzontale. Ci sono poi le versioni inverse:
.container {
display: flex;
flex-direction: column | column-reverse | row | row-reverse;
}
La Proprietà flex-wrap
La proprietà flex-wrap
specifica se gli elementi si devono adattare allo spazio disponibile e andare a capo o meno.
Il valore wrap specifica che gli elementi flessibili verranno rigirati se necessario:
.container {
display: flex;
flex-wrap: wrap | nowrap | wrap-reverse;
}
La Proprietà flex-flow
La proprietà flex-flow
è una proprietà abbreviata per impostare insieme sia le proprietà flex-direction che flex-wrap.
.container {
display: flex;
flex-flow: row wrap;
}
La Proprietà justify-content
La proprietà justify-content
è utilizzata per allineare gli elementi sull’asse principale:
.container {
display: flex;
justify-content: center | flex-start | flex-end | space-around | space-between
| space-evenly;
}
La Proprietà align-items
La proprietà align-items
è utilizzata per allineare gli elementi sull’asse secondario.
In questi esempi utilizziamo un contenitore di altezza 200 pixel, per mostrare meglio la proprietà align-items:
Il valore center allinea gli elementi flessibili al centro del contenitore:
.container {
display: flex;
height: 200px;
align-items: center | flex-start | flex-end | stretch | baseline;
}
La Proprietà align-content
La proprietà align-content
è utilizzata per allineare le linee tra gli elementi.
.container {
display: flex;
height: 600px;
flex-wrap: wrap;
align-content: center | flex-start | flex-end | space-around | space-between |
space-evenly;
}
Centrare Elementi
Per centrare gli elementi sia verticalmente che orizzontalmente bisogna usare sia la proprietà justify-content
che align-items
su center:
.container {
display: flex;
height: 300px;
justify-content: center;
align-items: center;
}
Elementi Figlio (Items)
Gli elementi diretti figlio di un contenitore flessibile diventano automaticamente elementi flessibili (items flessibili).
L’elemento sopra rappresenta quattro elementi flessibili blu all’interno di un contenitore flessibile grigio.
<div class="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
Le proprietà degli elementi all’interno di un flex container sono:
- order
- flex-grow
- flex-shrink
- flex-basis
- flex
- align-self
La Proprietà order
La proprietà order
specifica l’ordine degli elementi.
Il primo elemento flessibile nel codice non deve necessariamente apparire come il primo elemento nel layout.
Il valore order deve essere un numero, il valore predefinito è 0.
<div class="container">
<div style="order: 3">1</div>
<div style="order: 2">2</div>
<div style="order: 4">3</div>
<div style="order: 1">4</div>
</div>
La Proprietà flex-grow
La proprietà flex-grow specifica quanto un elemento flessibile crescerà rispetto agli altri elementi flessibili.
Il valore deve essere un numero, il valore predefinito è 0.
Fai sì che il terzo elemento flessibile cresca otto volte più velocemente degli altri elementi flessibili:
<div class="container">
<div style="flex-grow: 1">1</div>
<div style="flex-grow: 1">2</div>
<div style="flex-grow: 8">3</div>
</div>
La Proprietà flex-shrink
La proprietà flex-shrink
specifica quanto un elemento si restringerà rispetto agli altri elementi.
Il valore deve essere un numero, il valore predefinito è 1.
<div class="container">
<div>1</div>
<div>2</div>
<div style="flex-shrink: 0">3</div>
<div>4</div>
</div>
La Proprietà flex-basis
La proprietà flex-basis
specifica la lunghezza iniziale di un elemento flessibile.
Impostiamo la lunghezza iniziale del terzo elemento flessibile a 200 pixel:
<div class="container">
<div>1</div>
<div>2</div>
<div style="flex-basis: 200px">3</div>
<div>4</div>
</div>
La Proprietà flex
La proprietà flex
è una proprietà abbreviata per le proprietà flex-grow
, flex-shrink
e flex-basis
insieme.
<div class="container">
<div>1</div>
<div>2</div>
<div style="flex: 0 0 200px">3</div>
<div>4</div>
</div>
La Proprietà align-self
La proprietà align-self
specifica l’allineamento per l’elemento selezionato all’interno del contenitore.
La proprietà align-self sovrascrive l’allineamento predefinito impostato dalla proprietà align-items del contenitore.
<div class="container">
<div>1</div>
<div>2</div>
<div style="align-self: center">3</div>
<div>4</div>
</div>
Flexbox e Responsive Design
É possibile utilizzare flexbox insieme alle media query per creare layout responsive. Un classico esempio è la necessità di vedere gli elementi in orizzontale su Desktop, ma impilati verticalmente da mobile. Vediamo come fare:
.container {
display: flex;
flex-direction: column;
}
/* Con schermi larghi minimo 800px mettiamo gli elementi in orizzontale */
@media (min-width: 800px) {
.container {
flex-direction: row;
flex-wrap: wrap;
}
}