<div class="flex-container">
<div class="flex-item">Box 1</div>
<div class="flex-item">Box 2</div>
<div class="flex-item">Box 3</div>
</div>
Con i flexbox (o più precisamente CSS Flexible Box Layout) funziona in modo intelligente e dinamico: il layout si adatta in modo flessibile al display utilizzato (Responsive Design). Lo spazio viene riempito o gli elementi vengono accostati tra loro in modo che tutto sia chiaramente visibile. Per fare questo lavoro, senza compromettere il layout desiderato, Flexbox lavora con due assi: l’asse orizzontale e l’asse verticale. Utilizzando questi assi gli elementi possono essere disposti in relazione tra loro all’interno del box. In questo modo vengono dunque ripartiti tutti gli elementi. CSS Flexbox assicura così che lo spazio di questi elementi sia riempito in modo adeguato.
Flexbox si basa su un container (flex container) che a sua volta contiene diversi elementi (flex items).
Il container assegna le sue proprietà agli
elementi ivi contenuti, ciò vuol dire che gli elementi sono i flexbox effettivi.
I due assi hanno ciascuno una direzione: in genere l’asse
orizzontale va da
sinistra a destra, mentre l’asse verticale va dall’alto verso il basso.
Nei flexbox gli elementi possono essere disposti in righe o in colonne. Non è
prevista una combinazione. Per esempio, se si sceglie la disposizione in riga
(che è anche lo standard), CSS Flexbox cercherà di organizzare tutti gli
elementi in una riga.
Vediamo un esempio. Creiamo il contentitore con i 3 elementi con HTML:
<div class="flex-container">
<div class="flex-item">Box 1</div>
<div class="flex-item">Box 2</div>
<div class="flex-item">Box 3</div>
</div>
Utilizzando i CSS distribuiamo i singoli Items lungo l’asse principale orizzontale (flex-direction:row) partendo da sinistra (justify-content:flex-start) verso destra.
<style>
.grigio { background-color: grey; }
.grafica {
background-color: white;
line-height: 100px;
width: 200px;
margin: 10px;
text-align: center;
font-size: 50px;
}
.flex-container {
display: flex;
flex-direction: row;
}
.flex-item { justify-content:flex-start; }
</style>
flex-direction
(https://developer.mozilla.org/en-US/docs/Web/CSS/flex-direction)
Esistono 4 diverse possibilità che possono
essere utilizzate con la proprietà flex-direction:
justify-content
(https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content)
Specifica la distribuzione degli items lungo l'asse
fissato dall'istruzione flex-direction. Qualora nel
container vi sia almeno un box con flex-grow diverso
da zero questa proprietà non comporta alcun effetto. I valori
principali che che possono
essere assegnati all'istruzione justify-content
sono (solo flex-start, flex-end
e center sono supportati da tutti i browser):
flex-wrap
(https://developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap)
Con flex-wrap si possono distribuire gli elementi in
modo ordinato su più linee.
flex-flow
(https://developer.mozilla.org/en-US/docs/Web/CSS/flex-flow)
Il comando flex-flow è un'abbreviazione di flex-direction
e flex-wrap.
Ad esempio flex-flow:row wrap; equivale a: flex-direction:row; flex-wrap:wrap;.
align-content
(https://developer.mozilla.org/en-US/docs/Web/CSS/align-content)
Questa proprietà funziona solo se il wrap è attivo (con flex-wrap:wrap
o flex-wrap:wrap-reverse).
Specifica la distribuzione all'interno del contenitore degli items mandati a
capo per effetto del wrap. I valori
ammessi per la seguente proprietà sono:
align-items
(https://developer.mozilla.org/en-US/docs/Web/CSS/align-items)
Questa proprietà funziona solo se il wrap non è attivo (con flex-wrap:nowrap).
Specifica la posizione della sequenza degli items rispetto all'asse opposto a
quello definito con la proprietà flex-direction . I valori ammessi per la seguente proprietà sono:
order
(https://developer.mozilla.org/en-US/docs/Web/CSS/order)
Il valore predefinito (se non specificato) è 0. Il valore
dell’ordine aggiunge l’oggetto ad un gruppo astratto. Tutti gli elementi che
abbiamo creato finora appartengono allo stesso gruppo perché hanno tutti il
valore 0. Partendo da questo valore è ora possibile spostare singoli oggetti in
avanti (-1) o indietro (1).
Quindi, se si lasciano tutti gli elementi tranne uno sul valore zero e si dà
all’oggetto selezionato il valore 1, questo verrà visualizzato solo dopo gli
altri elementi. Questo procedimento può essere proseguito assegnando anche altri
valori (più alti o più bassi). Si tratta di una rappresentazione puramente
visiva: la sequenza logica secondo il documento HTML non viene modificata.
flex-grow
(https://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow)
Questa proprietà definisce la capacità di un item di espandersi se necessario.
Se tutti gli elementi sono posti a 1 lo spazio libero verrà
distribuito in modo uguale tra tutti gli item che si espanderanno di conseguenza
lungo l'asse indicato da flex-direction. Se un item ha la
proprietà flex-grow pari a 2 mentre tutti i restanti
hanno il valore 1 allora la sua espansione sarà doppia rispetto
agli altri (purchè questo sia possibile!). Il valore 0 lascia
inalterata la dimensione dell'item lungo l'asse fissato da flex-direction.
Non sono ammessi valori negativi.
flex-shrink
(https://developer.mozilla.org/en-US/docs/Web/CSS/flex-shrink)
Questa proprietà definisce se l'item può essere ristretto quando necessario. Se il valore è posto a
0 la dimensione del box lungo l'asse indicato da flex-direction
non potrà essere ridotta e si manterrà ampia come definito nella proprietà
flex-basis. Gli item
che presentano un valore in flex-shrink maggiore
rispetto agli altri verranno ridotti maggiormente rispetto a quegli elementi che
presentano un valore inferiore.
flex-basis
(https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis)
Questa proprietà definisce la dimensione predefinita dell'elemento quando
esiste ancora spazio libero nel contenitore lungo l'asse definito con flex-direction.
Può essere una lunghezza (20%, 120px, etc.) o una parla chiave. Se impostato al
valore auto verrà utilizata la proprietà
height (o width a seconda dell'asse
utilizzato). Se invece viene impostata a content
l'item verrà ridimensionato in base al suo contenuto. Questa parola chiave non è
ancora ben supportata.
flex
(https://developer.mozilla.org/en-US/docs/Web/CSS/flex)
La proprietà flex è un'abbreviazione della
combinazione flex-grow, flex-shrink.
e flex-basis. E' preferibile utilizzare questa
scorciatoia piuttosto che settare le singole proprietà. La proprietà flow
imposta le singole proprietà in modo più intelligente. Il suo default è 1 0 auto
ma è possibile settarlo solo con un singolo valore (esempio 1, 0, etc.)
align-self
(https://developer.mozilla.org/en-US/docs/Web/CSS/align-self)
La proprietà align-self èpermette di posizionare il
singolo item indipendentemente dalle impostazioni definite nel container. I
valori ammessi per la seguente proprietà sono: