CSS Grid vs Flexbox: le differenze e quando usare quale

CSS Grid vs Flexbox: le differenze e quando usare quale

CSS Grid e Flexbox sono due metodi di layout in CSS che permettono di costruire design complessi e flessibili per il web. In parte si sovrappongono, ma ognuno ha caratteristiche proprie e casi d’uso ideali diversi. In questo confronto CSS Grid vs Flexbox vediamo i punti di forza e i limiti di ciascuno, e quando conviene usare l’uno piuttosto che l’altro.

Display Grid

Display Grid è un sistema di layout pensato per i design a griglia. Ti permette di definire righe e colonne sulla pagina e di collocare gli elementi dentro quelle righe e colonne. Vuol dire che puoi allineare senza fatica e organizzare gli elementi della pagina in modo coerente e strutturato.

Ecco un esempio di codice HTML/CSS che usa CSS Grid per creare una griglia di 3 colonne e 3 righe:

1
2
3
4
5
6
7
8
9

Codice HTML Grid

html
<div class="grid-container">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
  <div class="grid-item">4</div>
  <div class="grid-item">5</div>
  <div class="grid-item">6</div>
  <div class="grid-item">7</div>
  <div class="grid-item">8</div>
  <div class="grid-item">9</div>
</div>

Codice CSS Grid

css
.grid-container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: repeat(3, 1fr);
    gap: 1rem;
    border: 1px dashed #000;
    padding: 5px;
}

.grid-item {
    background: #e74c3c;
    padding: .5rem;
    color: white;
    text-align: center;
}

Display Flex

Flexbox è un sistema di layout pensato per costruire layout flessibili capaci di adattarsi a dimensioni di schermo e di contenitore variabili. Ti permette di definire dimensioni relative per gli elementi del layout e di allinearli con precisione.

Un altro esempio di codice HTML/CSS, questa volta con Flexbox per allineare:

Logo
Menu
Champ de Recherche

Codice HTML Flex

html
<div class="flex-container">
  <div class="flex-item">Logo</div>
  <div class="flex-item">Menu</div>
  <div class="flex-item">Champ de Recherche</div>
</div>

Codice CSS Flex

html
.flex-container {
  display: flex;
  justify-content: center;
  gap: 1rem;
  border: 1px dashed #000;
  padding: 5px;
}

.flex-item {
    border: 1px dashed #e74c3c;
    padding: 10px;
}

Flexbox e Grid a confronto

CSS Grid vs Flexbox: lo stesso markup, questa volta con Grid. La differenza sulla dimensione relativa degli elementi si vede subito.

Logo
Menu
Champ de Recherche

Codice HTML Grid vs Flex

html
<div class="grid-container">
  <div class="grid-item">Logo</div>
  <div class="grid-item">Menu</div>
  <div class="grid-item">Champ de Recherche</div>
</div>
Attenzione

Il grande spazio vuoto tra l’esempio e il codice HTML non è un bug del tuo browser. Abbiamo detto alla griglia di usare 3 colonne e 3 righe, e la griglia rispetta quella struttura qualunque cosa succeda. Display Grid segue alla lettera la struttura dichiarata in CSS, anche quando non c’è nessun figlio .grid-item!

CSS Grid o Flexbox: quando usare l’uno o l’altro?

Capire i punti di forza e i limiti di ciascuno strumento è quello che ti permette di scegliere il più adatto al tuo progetto. In generale, CSS Grid è ideale per i design a griglia, come i portfolio e le gallerie di immagini, mentre Flexbox è ideale per i design flessibili e responsive, come i menu flex e le barre degli strumenti.

Ecco un esempio per chiarire. Immagina di dover costruire il layout della home page di un sito e-commerce. Quel layout deve contenere le immagini dei prodotti in evidenza, le sezioni delle categorie di prodotto, una barra di navigazione e un form di ricerca. In questo caso, potresti usare CSS Grid per disporre in griglia le immagini dei prodotti in evidenza, e Flexbox per allineare in modo efficace le sezioni delle categorie, la barra di navigazione e il form di ricerca.

i due strumenti si possono anche usare insieme per costruire design ancora più avanzati. Potresti usare CSS Grid per creare una griglia di righe e colonne, poi Flexbox per allineare gli elementi dentro ogni cella di quella griglia. Così combini i vantaggi di entrambi in design più potenti e più flessibili.

In sintesi, CSS Grid è lo strumento giusto per i design a griglia, come i portfolio e le gallerie di immagini, mentre Flexbox è lo strumento giusto per i design flessibili e responsive, come i menu flexbox e le barre degli strumenti. Usandoli insieme puoi costruire design ancora più avanzati, su misura per quello che chiede il tuo progetto.

CSSHTML

Damien Flandrin Sviluppatore web dal 2010, creatore di Gekkode e di Email Impact. Ogni articolo è testato su un progetto reale prima della pubblicazione. Contatti
Newsletter

I nuovi test, tutorial e progetti, via e-mail.

Test riproducibili, codice versionato, risultati datati. Mai spam.