CSS - Galerie d'images
Bienvenue, aspirants designers web ! Aujourd'hui, nous plongeons dans le monde passionnant des galeries d'images CSS. En tant que votre enseignant de quartier bienveillant, je suis ravi de vous guider dans cette aventure. Transformons ces images statiques ennuyeuses en galeries attrayantes et interactives qui rendront vos sites web éclatants !
Galerie d'images simple
Commençons par les bases. Une galerie d'images simple est comme disposer de photos sur votre mur - il s'agit de la présentation. Voici comment nous pouvons en créer une en utilisant CSS :
<div class="gallery">
<img src="image1.jpg" alt="Image 1">
<img src="image2.jpg" alt="Image 2">
<img src="image3.jpg" alt="Image 3">
</div>
.gallery {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.gallery img {
width: 200px;
height: 200px;
margin: 10px;
object-fit: cover;
}
Dans cet exemple, nous utilisons Flexbox pour créer un layout responsive. La propriété flex-wrap: wrap
garantit que nos images s'enrouleront sur la ligne suivante si il n'y a pas assez d'espace. justify-content: center
centre nos images horizontalement.
Galerie d'images avec un effet de survol
Maintenant, ajoutons un peu d'interactivité ! Les effets de survol peuvent rendre votre galerie plus engageante. C'est comme ajouter un message secret qui n'apparaît que lorsque vous regardez de plus près.
<div class="gallery">
<div class="image-container">
<img src="image1.jpg" alt="Image 1">
<div class="overlay">
<div class="text">Bonjour le monde</div>
</div>
</div>
<!-- Répétez pour les autres images -->
</div>
.image-container {
position: relative;
width: 200px;
height: 200px;
}
.overlay {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
height: 100%;
width: 100%;
opacity: 0;
transition: 0.5s ease;
background-color: rgba(0,0,0,0.5);
}
.image-container:hover .overlay {
opacity: 1;
}
.text {
color: white;
font-size: 20px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
}
Ce CSS crée une superposition qui apparaît lorsque vous survolez une image. La propriété transition
lui donne un effet de fondu en douceur.
Galerie d'images responsive utilisant Media Query
Dans le monde multi-appareils d'aujourd'hui, la réactivité est la clé. Faisons en sorte que notre galerie s'adapte à différentes tailles d'écran :
.gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 10px;
}
@media screen and (max-width: 600px) {
.gallery {
grid-template-columns: repeat(2, 1fr);
}
}
@media screen and (max-width: 400px) {
.gallery {
grid-template-columns: 1fr;
}
}
Ce CSS utilise CSS Grid pour créer un layout responsive. La fonction minmax
garantit que nos images sont au moins de 200px de large, mais peuvent grandir si de l'espace est disponible. Les requêtes média ajustent le layout pour les écrans plus petits.
Syntaxe
Prenez un moment pour comprendre la syntaxe que nous avons utilisée. Les propriétés CSS suivent cette structure :
selecteur {
propriété: valeur;
}
Voici un tableau des propriétés CSS couramment utilisées dans les galeries d'images :
Propriété | Description | Exemple |
---|---|---|
display | Spécifie le comportement d'affichage | display: flex; |
width | Définit la largeur d'un élément | width: 200px; |
height | Définit la hauteur d'un élément | height: 200px; |
margin | Définit les marges d'un élément | margin: 10px; |
object-fit | Spécifie comment une image doit être redimensionnée | object-fit: cover; |
position | Spécifie la méthode de positionnement utilisée | position: relative; |
opacity | Définit le niveau d'opacité pour un élément | opacity: 0; |
transition | Spécifie l'effet de transition | transition: 0.5s ease; |
Galerie d'images avec défilement horizontal
Parfois, vous souhaitez que votre galerie défile horizontalement. C'est comme un tambour de photos que vous pouvez faire défiler :
<div class="gallery-container">
<div class="gallery-scroll">
<img src="image1.jpg" alt="Image 1">
<img src="image2.jpg" alt="Image 2">
<!-- Ajoutez plus d'images selon behov |
</div>
</div>
.gallery-container {
width: 100%;
overflow-x: auto;
}
.gallery-scroll {
display: flex;
width: max-content;
}
.gallery-scroll img {
width: 200px;
height: 200px;
margin-right: 10px;
object-fit: cover;
}
Ce CSS crée une galerie défilante horizontalement. La propriété overflow-x: auto
ajoute une barre de défilement horizontale lorsque nécessaire.
Galerie d'images avec défilement vertical
Les galeries défilantes verticales sont excellentes pour montrer un grand nombre d'images dans un espace compact :
<div class="gallery-vertical">
<img src="image1.jpg" alt="Image 1">
<img src="image2.jpg" alt="Image 2">
<!-- Ajoutez plus d'images selon behov |
</div>
.gallery-vertical {
height: 400px;
overflow-y: scroll;
display: flex;
flex-direction: column;
align-items: center;
}
.gallery-vertical img {
width: 200px;
height: 200px;
margin-bottom: 10px;
object-fit: cover;
}
Ce CSS crée une galerie défilante verticalement. La propriété overflow-y: scroll
ajoute une barre de défilement verticale.
Galerie d'images avec CSS Grid
CSS Grid est un outil puissant pour créer des layouts complexes. Utilisons-le pour créer une galerie dynamique :
<div class="grid-gallery">
<img src="image1.jpg" alt="Image 1">
<img src="image2.jpg" alt="Image 2">
<img src="image3.jpg" alt="Image 3">
<img src="image4.jpg" alt="Image 4">
<img src="image5.jpg" alt="Image 5">
</div>
.grid-gallery {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-gap: 10px;
}
.grid-gallery img {
width: 100%;
height: 200px;
object-fit: cover;
}
.grid-gallery img:nth-child(4) {
grid-column: span 2;
}
.grid-gallery img:nth-child(5) {
grid-row: span 2;
}
Ce CSS crée un layout en grille où certaines images s'étendent sur plusieurs colonnes ou rangées, créant un layout plus dynamique.
Galerie d'images avec onglets
Les galeries avec onglets sont un excellent moyen d'organiser différents ensembles d'images :
<div class="tab">
<button class="tablinks" onclick="openTab(event, 'Nature')">Nature</button>
<button class="tablinks" onclick="openTab(event, 'City')">Ville</button>
</div>
<div id="Nature" class="tabcontent">
<img src="nature1.jpg" alt="Nature 1">
<img src="nature2.jpg" alt="Nature 2">
</div>
<div id="City" class="tabcontent">
<img src="city1.jpg" alt="Ville 1">
<img src="city2.jpg" alt="Ville 2">
</div>
.tab {
overflow: hidden;
border: 1px solid #ccc;
background-color: #f1f1f1;
}
.tab button {
background-color: inherit;
float: left;
border: none;
outline: none;
cursor: pointer;
padding: 14px 16px;
transition: 0.3s;
}
.tab button:hover {
background-color: #ddd;
}
.tab button.active {
background-color: #ccc;
}
.tabcontent {
display: none;
padding: 6px 12px;
border: 1px solid #ccc;
border-top: none;
}
Ce CSS crée une interface avec onglets. Vous aurez besoin de JavaScript pour le rendre fonctionnel :
function openTab(evt, tabName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tablinks.length; i++) {
tablinks[i].className = tablinks[i].className.replace(" active", "");
}
document.getElementById(tabName).style.display = "block";
evt.currentTarget.className += " active";
}
Diaporama CSS
Créons un diaporama simple :
<div class="slideshow-container">
<div class="mySlides fade">
<img src="img1.jpg" style="width:100%">
</div>
<div class="mySlides fade">
<img src="img2.jpg" style="width:100%">
</div>
<div class="mySlides fade">
<img src="img3.jpg" style="width:100%">
</div>
</div>
.slideshow-container {
max-width: 1000px;
position: relative;
margin: auto;
}
.mySlides {
display: none;
}
.fade {
animation-name: fade;
animation-duration: 1.5s;
}
@keyframes fade {
from {opacity: 0.4}
to {opacity: 1}
}
Vous aurez besoin de JavaScript pour contrôler le diaporama :
var slideIndex = 0;
showSlides();
function showSlides() {
var i;
var slides = document.getElementsByClassName("mySlides");
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
if (slideIndex > slides.length) {slideIndex = 1}
slides[slideIndex-1].style.display = "block";
setTimeout(showSlides, 2000); // Changez l'image toutes les 2 secondes
}
Galerie de diaporama CSS
Enfin, combinons notre diaporama avec des vignettes pour une expérience plus interactive :
<div class="slideshow-container">
<div class="mySlides fade">
<img src="img1.jpg" style="width:100%">
</div>
<div class="mySlides fade">
<img src="img2.jpg" style="width:100%">
</div>
<div class="mySlides fade">
<img src="img3.jpg" style="width:100%">
</div>
</div>
<div class="row">
<div class="column">
<img class="demo cursor" src="img1.jpg" style="width:100%" onclick="currentSlide(1)">
</div>
<div class="column">
<img class="demo cursor" src="img2.jpg" style="width:100%" onclick="currentSlide(2)">
</div>
<div class="column">
<img class="demo cursor" src="img3.jpg" style="width:100%" onclick="currentSlide(3)">
</div>
</div>
.row {
display: flex;
}
.column {
flex: 33.33%;
padding: 5px;
}
.demo {
opacity: 0.6;
}
.active,
.demo:hover {
opacity: 1;
}
Vous devrez modifier le JavaScript pour gérer les clics sur les vignettes :
function currentSlide(n) {
showSlides(slideIndex = n);
}
function showSlides(n) {
var i;
var slides = document.getElementsByClassName("mySlides");
var dots = document.getElementsByClassName("demo");
if (n > slides.length) {slideIndex = 1}
if (n < 1) {slideIndex = slides.length}
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
for (i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace(" active", "");
}
slides[slideIndex-1].style.display = "block";
dots[slideIndex-1].className += " active";
}
Et voilà ! Nous avons couvert une large gamme de techniques de galeries d'images CSS. Souvenez-vous, la pratique fait toujours parfait. Essayez de combiner ces techniques pour créer vos propres galeries uniques. Bonne programmation !
Credits: Image by storyset