Come creare una galleria di immagini con la griglia CSS (Grid)

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.

Torna su