Salta al contenuto
CSS Pubblicato il · ~12 min

Panoramica

Flexbox e CSS Grid sono i due sistemi di layout moderni del web. Flexbox eccelle nella distribuzione e nell’allineamento lungo una sola dimensione (riga o colonna), mentre Grid è progettato per layout bidimensionali con righe e colonne. In questa guida capirai quando scegliere l’uno o l’altra, con esempi pratici e pattern riutilizzabili.

Quando usare Flexbox o Grid

Usa Flexbox quando devi:

  • Allineare elementi in una dimensione (es. navbar, toolbar, chip)
  • Distribuire spazio con gap, justify-content, align-items
  • Gestire il wrapping orizzontale di card con larghezze flessibili

Usa Grid quando ti serve:

  • Un layout bidimensionale con righe e colonne esplicite
  • Allineare aree con grid-template-areas o creare griglie responsive con minmax() e auto-fit
  • Controllo preciso su spaziature e allineamenti sia orizzontali che verticali

Esempio Flexbox (righe di card)

.cards { display:flex; flex-wrap:wrap; gap:1rem; }
.card { flex:1 1 260px; /* crescita, riduzione, base */ }

Esempio Grid (gallery responsive)

.gallery { display:grid; gap:1rem;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}

Pattern comuni

  • Navbar/Toolbar: Flexbox per allineare logo, menu e CTA; usa gap e justify-content: space-between.
  • Card grid: Grid per griglie responsive regolari; Flexbox per liste con larghezze fluide non allineate a colonne fisse.
  • Media object (immagine + testo): Flexbox con align-items e gestione del wrapping.
  • Layout di pagina: Grid per header, sidebar, main, footer con grid-template-areas.
  • Allineamenti verticali complessi: Grid con align-content/justify-content a livello di griglia.
/* Layout base di pagina con Grid */
.page { display:grid; min-height:100dvh; gap:1rem;
  grid-template-columns: 240px 1fr;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
}
header{ grid-area:header } .sidebar{ grid-area:sidebar }
main{ grid-area:main } footer{ grid-area:footer }

/* Media object con Flexbox */
.media { display:flex; gap:1rem; align-items:flex-start }
.media img { width:120px; flex:0 0 auto; }
.media .content { flex:1 1 auto }

Performance e accessibilità

Entrambi i moduli sono performanti nei browser moderni. Evita annidamenti profondi, preferisci gap agli spaziatori e mantieni l’ordine logico del DOM: usare order (Flexbox) o posizionamenti complessi (Grid) che alterano il flusso può disorientare chi usa tecnologie assistive.

  • Responsive: combina Grid/Flex con container queries o media queries.
  • Compatibilità: fallback semplici (es. una colonna) se servono browser datati.
  • Mantenibilità: usa variabili CSS, classi utilitarie e limita le eccezioni per componente.

Checklist rapida

  • Il layout è mono‑dimensionale? Usa Flexbox; altrimenti valuta Grid.
  • Serve una griglia regolare e allineata? Grid con repeat() + minmax().
  • Allineamenti e distribuzione su una riga/colonna? Flexbox con gap.
  • Ordine DOM coerente con la lettura, evita riordinamenti artificiali.
  • Testa i breakpoints e l’adattamento dei contenuti reali.

FAQ

Meglio Flexbox o Grid per layout a colonne variabili?

Se il layout è bidimensionale e le colonne devono allinearsi a righe coerenti, Grid è preferibile. Per righe di card fluide senza righe allineate, Flexbox basta.

Posso combinarli nello stesso componente?

Sì: ad esempio una card list in Grid, e l’interno di ogni card in Flexbox per centrare e distribuire elementi.

Subgrid è supportato?

Il supporto a subgrid è ormai diffuso nei browser moderni e aiuta ad allineare elementi figli alla griglia del contenitore. Valuta un fallback semplice se necessario.


Commenti

I commenti sono moderati tramite Cusdis e hanno il solo scopo di arricchire l’articolo: resta in tema e aggiungi valore. Grazie!
  • Categoria: CSS
  • Aggiornato: