Galerie CSS Grid Réactive
Comment implémenter une galerie d'images réactive grâce à auto-fit et minmax, sans avoir recours aux requêtes multimédias.
HTMLCSS
En combinant display: grid et grid-template-columns: repeat(auto-fit, minmax(..., 1fr)), il est possible de créer une galerie d’images parfaitement réactive. Le nombre de colonnes s’ajuste automatiquement à la largeur de l’écran, sans même avoir besoin d’écrire la moindre requête multimédia (@media).
Aperçu






Cas d’utilisation et caractéristiques
- Portfolios et galeries photo : Idéal pour mettre en valeur des images de manière élégante et structurée.
- Grilles de produits e-commerce : Parfaitement adapté pour aligner des cartes de présentation d’articles.
- Zéro media query : L’utilisation judicieuse de
auto-fitetminmaxallège considérablement le code, facilitant ainsi sa maintenance.
Points clés de l’UX/UI
- Format d’image fixe : En associant
aspect-ratio: 1 / 1àobject-fit: cover, on garantit une grille de carrés uniforme et harmonieuse, peu importe les proportions des images d’origine. - Effets de survol (Hover) : Une légère animation de soulèvement (
transform: translateYetscale) assortie d’une ombre renforcée lors du passage de la souris indique clairement à l’utilisateur que l’élément est interactif. - Transitions fluides : L’utilisation de
cubic-bezierpermet d’obtenir des animations douces et naturelles.
Guide de personnalisation
- Ajuster la largeur minimale : En modifiant la valeur
200pxdansminmax(200px, 1fr), vous changez la taille minimale de chaque élément. L’augmenter réduira d’autant le nombre de colonnes affichées côte à côte. - Modifier le format d’image : Passez simplement à
16 / 9(format paysage) ou3 / 4(format portrait) pour adapter la disposition à vos besoins.
Code
index.html
<div class="gallery">
<img src="/gallery/1.png" alt="Gallery image 1" class="gallery-item" />
<img src="/gallery/2.png" alt="Gallery image 2" class="gallery-item" />
<img src="/gallery/3.png" alt="Gallery image 3" class="gallery-item" />
<img src="/gallery/4.png" alt="Gallery image 4" class="gallery-item" />
<img src="/gallery/5.png" alt="Gallery image 5" class="gallery-item" />
<img src="/gallery/6.png" alt="Gallery image 6" class="gallery-item" />
</div> styles.css
.gallery {
display: grid;
/* Ajuste automatiquement le nombre de colonnes pour remplir le conteneur, sans descendre en dessous de 200px */
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 16px;
padding: 16px;
width: 100%;
box-sizing: border-box;
}
.gallery-item {
width: 100%;
/* Garde toujours une forme carrée */
aspect-ratio: 1 / 1;
/* Recadre pour ne pas déformer les proportions de l'image */
object-fit: cover;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
box-shadow 0.3s cubic-bezier(0.4, 0, 0.2, 1);
cursor: pointer;
}
.gallery-item:hover {
/* Effet de léger soulèvement au survol */
transform: translateY(-4px) scale(1.02);
box-shadow: 0 12px 20px rgba(0, 0, 0, 0.1);
z-index: 10;
} Compatibilité des navigateurs
- `display: grid
et \aspect-ratio` sont pleinement supportés par tous les navigateurs modernes (Chrome, Firefox, Safari, Edge). - Ces propriétés n’étant pas compatibles avec les anciens navigateurs (comme IE11), prévoyez une solution de repli (fallback) si nécessaire.