In questo articolo vedremo come creare una galleria di immagini con i CSS in cui le immagini si adattano all'altezza delle righe della griglia.
Per creare la griglia della galleria utilizzeremo la dichiarazione display: grid
. Seguendo l'approccio mobile first, creiamo prima le regole per i dispositivi mobile.
.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
grid-auto-rows: 200px;
gap: 1rem;
}
La larghezza delle colonne è dinamica grazie alla parola chiave auto-fill
e parte da un minmo di 250 pixel. L'altezza delle righe, definita dalla proprietà grid-auto-rows
, è di 200 pixel. Lo spazio tra le colonne è uguale al valore di base in pixel della dimensione del font della pagina.
Ora sovrascriviamo alcune di queste regole per i dispositivi desktop:
@media screen and (min-width: 768px) {
.gallery {
grid-auto-rows: 350px;
grid-template-columns: repeat(auto-fill, minmax(20%, 1fr));
}
}
Come si può notare, abbiamo incrementato la larghezza delle colonne e l'altezza delle righe per quegli schermi con risoluzioni maggiori.
A questo punto dobbiamo fare in modo che gli elementi della galleria che contengono le immagini si estendano per l'intera larghezza della colonna e per l'intera altezza della riga.
.gallery .gallery-item {
width: 100%;
height: 100%;
}
Per le immagini contenute all'interno degli elementi .gallery-item
dobbiamo fare in modo che coprano l'intero elemento contenitore adattandosi in modo proporzionale. A tale scopo possiamo usare la proprietà object-fit
.
.gallery .gallery-item img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
Ricordiamo che per operare correttamente, questa proprietà necessita di avere un'immagine che si espanda completamente all'interno dell'elemento che la racchiude.
Conclusione
Grazie al modulo Grid dei CSS e alla proprietà object-fit
, è relativamente semplice creare una galleria di immagini il cui layout finale risulta uniformato nonostante la differenza nelle loro dimensioni.