cat html-css/gap-column-gap-row-gap.md

Lezione 38 15 min

gap, column-gap, row-gap

Gestire la distanza tra righe e colonne in CSS Grid senza margini manuali.

In CSS Grid, gap definisce lo spazio tra le tracce della griglia: righe e colonne.

È una proprietà del contenitore, non dei singoli elementi. Questo è il suo vantaggio principale: lo spazio appartiene al layout, non alle card.

.griglia {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
}

Con questa regola ottieni 1.5rem tra tutte le colonne e tra tutte le righe.

row-gap e column-gap

Se vuoi controllare separatamente i due assi, puoi usare:

.griglia {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  row-gap: 2rem;
  column-gap: 1rem;
}

row-gap controlla lo spazio tra una riga e l’altra.
column-gap controlla lo spazio tra una colonna e l’altra.

La shorthand equivalente è:

.griglia {
  gap: 2rem 1rem;
}

Il primo valore è il row-gap, il secondo è il column-gap.

Perché non usare margin sulle card

Con i margini sugli elementi figli, devi gestire eccezioni:

.card {
  margin-right: 1rem;
  margin-bottom: 1rem;
}

Poi però l’ultima colonna crea spazio esterno indesiderato, l’ultima riga crea un fondo irregolare e devi aggiungere selettori speciali.

Con gap, il browser mette spazio solo tra le celle, senza aggiungerlo ai bordi esterni della griglia.

Gap e dimensioni delle colonne

In Grid il gap viene sottratto dallo spazio disponibile prima di distribuire le colonne flessibili.

.griglia {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2rem;
}

Il browser prende la larghezza del contenitore, sottrae i due spazi da 2rem tra le tre colonne e divide il resto in tre parti uguali. Questo è uno dei motivi per cui fr e gap funzionano meglio delle vecchie griglie a percentuali.

Esercizio

Crea una griglia di sei card:

.cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
}

Poi cambia in:

.cards {
  row-gap: 2rem;
  column-gap: 0.75rem;
}

Osserva nei DevTools che la dimensione delle card cambia in base allo spazio sottratto dai gap.