Flexbox: disporre elementi su una riga o colonna
Flexbox è oggi lo strumento più usato per allineare e distribuire elementi lungo una sola dimensione (una barra di navigazione, una riga di card).
.contenitore {
display: flex;
justify-content: space-between; /* distribuzione lungo l'asse principale */
align-items: center; /* allineamento lungo l'asse secondario */
gap: 20px; /* spazio tra gli elementi */
}
flex-direction: row | column— orizzontale o verticalejustify-content: flex-start | center | flex-end | space-between | space-aroundalign-items: flex-start | center | flex-end | stretchflex-wrap: wrap— permette agli elementi di andare su più righe se non c’entrano
<div class="contenitore">
<div class="card">1</div>
<div class="card">2</div>
<div class="card">3</div>
</div>
Grid: layout a griglia bidimensionale
Dove Flexbox lavora su una dimensione, CSS Grid lavora su righe e colonne insieme — ideale per l’impaginazione generale di una pagina.
.griglia {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* tre colonne: la centrale doppia rispetto alle laterali */
gap: 15px;
}
fr (fraction) distribuisce lo spazio in proporzione — molto più semplice che calcolare percentuali a mano.
Quando usare cosa: Flexbox per una barra di navigazione o una riga di elementi; Grid per la struttura generale della pagina (header, sidebar, contenuto, footer). Spesso si usano insieme.
Media query: adattarsi a schermi diversi
Prerequisito obbligatorio, già visto nella Lezione 5: il tag viewport nel <head>.
<meta name="viewport" content="width=device-width, initial-scale=1">
Le media query applicano regole CSS solo entro certe condizioni, tipicamente una larghezza di schermo:
.contenitore {
display: flex;
flex-direction: row;
}
@media (max-width: 768px) {
.contenitore {
flex-direction: column; /* su schermi stretti, gli elementi si impilano */
}
}
Approccio mobile-first (consigliato): scrivi prima lo stile base per mobile, poi usi min-width per aggiungere stili man mano che lo schermo si allarga.
/* stile base, pensato per mobile */
.contenitore {
flex-direction: column;
}
/* da tablet in su */
@media (min-width: 768px) {
.contenitore {
flex-direction: row;
}
}
Esercitazione pratica
Costruisci una barra di navigazione con Flexbox (logo a sinistra, menu a destra). Poi costruisci una griglia a 3 colonne con Grid per una sezione “servizi”. Infine aggiungi una media query che, sotto i 768px, trasformi entrambe in layout verticale a colonna singola.