Generatore CSS Flexbox

Strumento gratuito per provare i layout Flexbox regolando dall'interfaccia flex-direction, justify-content, align-items, flex-wrap e gap, con anteprima in tempo reale. Il codice CSS generato si copia con un clic.

Consigli per l'uso

  • justify-content allinea lungo l'«asse principale», align-items lungo l'«asse trasversale». Con flex-direction: column l'asse principale diventa verticale e l'effetto visivo delle due proprietà si scambia.
  • Il preset «Centrato» combina justify-content: center e align-items: center: è lo schema Flexbox più classico per collocare un elemento al centro esatto.
  • La proprietà gap si applica soltanto allo spazio fra gli elementi e non tocca il margine esterno del contenitore. A differenza di margin, crea uno spazio uniforme solo fra elementi adiacenti.
  • Applicando align-self a un singolo elemento potete ignorare l'align-items del contenitore e allineare diversamente solo quell'elemento: comodo quando ne volete mettere in risalto uno.
  • Attivando flex-wrap: wrap, gli elementi che non entrano nella larghezza del contenitore (o nell'altezza, con column) vanno automaticamente a capo. È lo schema usato di norma per i layout responsivi a schede.

Domande frequenti

justify-content allinea lungo l'«asse principale» del Flexbox, cioè la direzione stabilita da flex-direction (per impostazione predefinita orizzontale), mentre align-items allinea lungo l'«asse trasversale», perpendicolare al primo. Con flex-direction: row l'asse principale è orizzontale, quindi justify-content governa la disposizione in orizzontale e align-items quella in verticale; con flex-direction: column i ruoli si scambiano.

Con column l'asse principale è verticale, quindi per centrare verticalmente si usa justify-content: center, mentre per centrare orizzontalmente (asse trasversale) si usa align-items: center. Combinandoli si collocano gli elementi al centro esatto anche in un layout impilato.

Il supporto di gap in Flexbox è arrivato tardi su Chrome e Safari, fino al 2021 circa, ma oggi è disponibile su tutti i browser principali (Chrome dalla versione 84, Safari dalla 14.1, Firefox dalla 63). Se dovete assolutamente supportare browser molto datati, valutate una soluzione alternativa con margin.

flex-grow indica quanto un elemento debba allargarsi per occupare lo spazio libero del contenitore, flex-shrink quanto debba restringersi quando il contenitore è troppo stretto. Entrambe stabiliscono, a partire dalla dimensione di base dell'elemento (flex-basis), come distribuire l'eccedenza o la carenza di spazio.

In generale Flexbox è adatto ai gruppi di elementi disposti in una sola direzione, riga o colonna, come le barre di navigazione o le schede affiancate. CSS Grid è invece adatto ai layout bidimensionali in cui si controllano insieme righe e colonne, come l'impaginazione complessiva di una pagina. Come regola: Flexbox per le disposizioni semplici, Grid quando serve una griglia articolata.
Tool-kun

A proposito — come Flexbox ha cambiato la storia dei layout CSS

Prima dell'arrivo di CSS Flexbox (nome ufficiale: CSS Flexible Box Layout Module), disporre gli elementi in orizzontale si faceva di norma con la proprietà float. Ma float nasce per far scorrere il testo attorno a un'immagine, e usarla per impaginare richiedeva una lunga serie di rimedi — dal celebre clearfix in poi — contro problemi come le altezze non allineate o il collasso dell'altezza dell'elemento genitore.

Flexbox, la cui prima bozza fu pubblicata dal W3C nel 2009, è stato progettato come modello di layout dedicato alla disposizione «monodimensionale». Allungare o restringere gli elementi lungo l'asse principale, distribuire uniformemente gli spazi, centrare verticalmente in una sola riga: operazioni che con float richiedevano decine di righe di espedienti si risolvono con proprietà dichiarative come justify-content e align-items.

Quando, intorno al 2015, l'implementazione è stata completata su tutti i browser principali, Flexbox si è diffuso rapidamente come strumento standard per gli schemi ricorrenti del design web: barre di navigazione, layout a schede, allineamento dei moduli. «Finalmente si può centrare verticalmente con Flexbox» è ricordato come uno dei cambiamenti più festeggiati nella comunità degli sviluppatori front-end dell'epoca.

Oggi Flexbox e CSS Grid, specializzato nei layout bidimensionali, convivono dividendosi i compiti: il primo per la disposizione interna dei componenti che si allineano in una direzione, il secondo per la griglia complessiva della pagina.