Flexbox
Prima del flexbox, centrare un riquadro in verticale richiedeva dei trucchi. Con display: flex bastano due dichiarazioni: justify-content e align-items.
Una riga o una colonna
Il flexbox, il modulo CSS Flexible Box Layout, dispone un gruppo di riquadri lungo una linea. Metti display: flex su un contenitore e i suoi figli diretti, gli elementi flex, si mettono in fila uno accanto all'altro invece di impilarsi. Quell'unica dichiarazione basta per una barra di menu, una fila di pulsanti o una scheda il cui piè di pagina deve restare in fondo. Il flexbox lavora in una dimensione alla volta: o una riga o una colonna. Quando ti servono righe e colonne insieme, la griglia, nella prossima unità, di solito è lo strumento migliore.
Due assi
Nel flexbox tutto si descrive in base a due assi. L'asse principale è la direzione in cui scorrono gli elementi, impostata da flex-direction: row (il valore predefinito) o column. L'asse trasversale è perpendicolare a esso. justify-content distribuisce gli elementi lungo l'asse principale: flex-start, center, flex-end, space-between (primo e ultimo elemento ai bordi, spazi uguali in mezzo) o space-around. align-items li posiziona sull'asse trasversale: stretch (il valore predefinito, tutti alti quanto il più alto), flex-start, center o flex-end. Quindi un riquadro si centra in entrambe le direzioni con justify-content: center e align-items: center.
.bar {
display: flex;
justify-content: space-between; /* logo left, menu right */
align-items: center; /* vertically centred */
gap: 16px; /* space between items */
}
.cards { display: flex; flex-wrap: wrap; gap: 12px; }
.card { flex: 1 1 200px; } /* grow, shrink, start at 200px */Spazi e ritorno a capo
gap mette spazio tra gli elementi senza aggiungerne ai bordi esterni, che di solito è proprio ciò che vuoi e che con i margini è scomodo. Per impostazione predefinita gli elementi flex restano su una riga e si restringono per starci, anche a costo di schiacciarsi. flex-wrap: wrap permette loro di passare a una nuova riga quando non c'è abbastanza spazio, così una fila di quattro schede su un portatile può diventare due file da due su un tablet e una sola colonna su un telefono, senza media query.
Come gli elementi crescono e si restringono
La forma abbreviata flex su un elemento accetta tre valori. flex-grow dice quanto dello spazio avanzato prende l'elemento rispetto ai fratelli; flex-shrink dice quanto volentieri si restringe quando lo spazio finisce; flex-basis è la dimensione di partenza prima di crescere o restringersi. flex: 1 1 200px significa partire da 200 pixel, poi dividere in parti uguali lo spazio in più con gli altri elementi che hanno anch'essi grow 1. flex: 1 da solo abbrevia 1 1 0%, che rende tutti gli elementi larghi uguali. Dai a un elemento flex-grow: 2 e agli altri 1, e prenderà il doppio della loro parte di spazio avanzato.
Ordine visivo e ordine reale
Il flexbox può cambiare l'ordine in cui compaiono gli elementi, con flex-direction: row-reverse o con la proprietà order, senza toccare l'HTML. Usalo con cautela. Il focus da tastiera e i lettori di schermo seguono comunque l'ordine dell'HTML, quindi se lo schermo mostra Contact prima di Home ma il tasto Tab visita prima Home, chi usa la tastiera si perde. Quando l'ordine conta per il significato, cambialo nell'HTML.
| contenitore flex | Il genitore con display: flex |
| elemento flex | Un figlio diretto di un contenitore flex |
| asse principale | Direzione di scorrimento; impostata da flex-direction |
| justify-content | Distribuisce gli elementi lungo l'asse principale |
| align-items | Posiziona gli elementi sull'asse trasversale |
| gap | Spazio tra gli elementi, non ai bordi |
| flex: 1 1 200px | grow 1, shrink 1, base 200px |
- Quale dichiarazione trasforma un elemento in un contenitore flex?
- display: flex
- flex: 1
- position: flex
- In una riga, quale proprietà distribuisce gli elementi in orizzontale?
- justify-content
- align-items
- flex-wrap
- Con flex-direction: column, che cosa controlla justify-content?
- La distribuzione verticale
- La distribuzione orizzontale
- La dimensione del carattere
- Quale valore mette il primo e l'ultimo elemento ai bordi con spazi uguali in mezzo?
- space-between
- space-around
- center
- Qual è il valore predefinito di align-items?
- stretch
- center
- flex-start
- Quattro elementi hanno flex: 1 in un contenitore di 400px senza spazi. Quanto è largo ciascuno?
- Tre elementi con flex-basis 0 si dividono 400px. Uno ha flex-grow 2, gli altri 1. Quanto è largo quello grande?
- Che cosa permette flex-wrap: wrap?
- Gli elementi passano a una nuova riga quando non c'è spazio
- Il testo va a capo dentro gli elementi
- Gli elementi si sovrappongono
- La proprietà order mette Contact per primo sullo schermo, ma nell'HTML è l'ultimo. Che cosa lo visita ancora per ultimo?
- Il focus da tastiera e i lettori di schermo
- Il puntatore del mouse
- Niente
- In quante dimensioni alla volta impagina il flexbox?
- display: flex mette in fila i figli diretti lungo l'asse principale.
- justify-content sull'asse principale, align-items su quello trasversale, gap in mezzo.
- flex: grow shrink basis; flex-wrap: wrap per righe che si ridispongono; tieni l'ordine visivo uguale a quello dell'HTML.
Fonti di questo corso (6)
- W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
- MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
- W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
- W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
- 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
- every code exercise checked with a Playwright probe against a reference solution.
Consultato il: 2026-10-17