Bonjour à tous,
Je vous sollicite aujourd'hui afin d'obtenir de l'aide sur deux petits problèmes que je n'arrive pas à résoudre sur une galerie d'images gérée en majorité par le CSS. Il y a un peu de JS pour les fonctionnalités d'affichage en plein écran des images et pour la navigation suivant/précédent de la galerie.
Son fonctionnement est simple : on affiche les miniatures de 4 images et au clic sur l'une d'entre elles, on l'affiche en grand format. Des flèches suivant/précédent permettent de visualiser les autres images, on peut fermer le plein écran d'un clic sur la croix.
Afin de ne pas ré-inventer la roue, je me suis basé sur ce que propose le site web W3School, notamment pour le JS, là où j'ai encore des lacunes pour l'instant. Une bonne partie du CSS et du JS n'est donc pas de moi.
Actuellement, ça fonctionne plutôt bien mais mon premier problème se situe au niveau de la taille de l'image en plein écran : sa hauteur ne s'adapte pas à la taille de l'écran. Sur les petits écrans de téléphone ou sur les écrans de 22'' et plus, aucun souci vu que la largeur de mon image s'adapte. Mais pour la hauteur, c'est plus compliqué sur des petits écrans d'ordinateur de 13''. Quand je spécifie à mon conteneur d'image une hauteur de 100%, celui prend évidement 100% de la hauteur de la page, et pas de l'écran. J'ai alors testé avec l'unité vh au lieu de %, mais je n'ai rien obtenu d'interessant (ou alors je m'en sert mal...)
Pouvez-vous me mettre sur la voie ? Je suis sûr qu'il y a une solution simple à mettre en oeuvre du côté du CSS
Mon second problème est plutôt de l'ordre du détail, mais je n'arrive pas à le résoudre non plus. J'aimerais qu'on puisse fermer le plein écran en cliquant en dehors de l'image et pas uniquement sur la croix. Je me suis dit "Facile ! Il suffit simplement d'ajouter du côté HTML un
Mais cela à pour effet de fermer le plein écran même si je clique sur l'un des enfants (l'image, les contrôles suivant/précédent)
J'ai essayé de jouer avec les z-index en pensant résoudre ce comportement, mais malheureusement ça n'a pas fonctionné.
Il existe sûrement un moyen du côté du CSS (ou du JS pour ce cas là ?) pour préciser que le clic ne doit s'effectuer que sur le background de la galerie ou pour ne pas cibler les éléments enfants... Quelqu'un peut m'aider ?
Ci-dessous, vous trouverez quelques explications ainsi que le code source. J'ai effectué des recherches et des tests avant de poster ici, mais n'ayant toujours pas résolu ces petits soucis, je m'en réfère donc à la communauté.
HTML - Affichage des miniatures :
HTML - Affichage de l'image en plein écran (modal box) :
CSS de la galerie :
Javascript - fonctionnalités d'ouverture, de fermeture du plein écran et navigation entre les images :
Merci d'avance à tous ceux qui voudront bien m'aider. Bon dimanche !
Modifié par Loraga (16 Dec 2018 - 11:11)
Je vous sollicite aujourd'hui afin d'obtenir de l'aide sur deux petits problèmes que je n'arrive pas à résoudre sur une galerie d'images gérée en majorité par le CSS. Il y a un peu de JS pour les fonctionnalités d'affichage en plein écran des images et pour la navigation suivant/précédent de la galerie.
Son fonctionnement est simple : on affiche les miniatures de 4 images et au clic sur l'une d'entre elles, on l'affiche en grand format. Des flèches suivant/précédent permettent de visualiser les autres images, on peut fermer le plein écran d'un clic sur la croix.
Afin de ne pas ré-inventer la roue, je me suis basé sur ce que propose le site web W3School, notamment pour le JS, là où j'ai encore des lacunes pour l'instant. Une bonne partie du CSS et du JS n'est donc pas de moi.
Actuellement, ça fonctionne plutôt bien mais mon premier problème se situe au niveau de la taille de l'image en plein écran : sa hauteur ne s'adapte pas à la taille de l'écran. Sur les petits écrans de téléphone ou sur les écrans de 22'' et plus, aucun souci vu que la largeur de mon image s'adapte. Mais pour la hauteur, c'est plus compliqué sur des petits écrans d'ordinateur de 13''. Quand je spécifie à mon conteneur d'image une hauteur de 100%, celui prend évidement 100% de la hauteur de la page, et pas de l'écran. J'ai alors testé avec l'unité vh au lieu de %, mais je n'ai rien obtenu d'interessant (ou alors je m'en sert mal...)
Pouvez-vous me mettre sur la voie ? Je suis sûr qu'il y a une solution simple à mettre en oeuvre du côté du CSS
Mon second problème est plutôt de l'ordre du détail, mais je n'arrive pas à le résoudre non plus. J'aimerais qu'on puisse fermer le plein écran en cliquant en dehors de l'image et pas uniquement sur la croix. Je me suis dit "Facile ! Il suffit simplement d'ajouter du côté HTML un
onclick="closeModal()"
sur mon div de fond !"Mais cela à pour effet de fermer le plein écran même si je clique sur l'un des enfants (l'image, les contrôles suivant/précédent)
J'ai essayé de jouer avec les z-index en pensant résoudre ce comportement, mais malheureusement ça n'a pas fonctionné.
Il existe sûrement un moyen du côté du CSS (ou du JS pour ce cas là ?) pour préciser que le clic ne doit s'effectuer que sur le background de la galerie ou pour ne pas cibler les éléments enfants... Quelqu'un peut m'aider ?
Ci-dessous, vous trouverez quelques explications ainsi que le code source. J'ai effectué des recherches et des tests avant de poster ici, mais n'ayant toujours pas résolu ces petits soucis, je m'en réfère donc à la communauté.
HTML - Affichage des miniatures :
<div class="text-center">
<img class="galerie-mini" src="1.jpg" alt="#" onclick="openModal();currentSlide(1)" />
<img class="galerie-mini" src="2.jpg" alt="#" onclick="openModal();currentSlide(2)" />
<img class="galerie-mini" src="3.jpg" alt="#" onclick="openModal();currentSlide(3)" />
<img class="galerie-mini" src="4.jpg" alt="#" onclick="openModal();currentSlide(4)" />
</div>
HTML - Affichage de l'image en plein écran (modal box) :
<div id="modal" class="modal-background">
<span class="close cursor" onclick="closeModal()">×</span>
<div class="modal-content">
<div class="imgGallery">
<img src="1-big.jpg">
</div>
<div class="imgGallery">
<img src="2-big.jpg">
</div>
<div class="imgGallery">
<img src="3-big.jpg">
</div>
<div class="imgGallery">
<img src="4-big.jpg">
</div>
<a class="prev" onclick="plusSlides(-1)">❮</a>
<a class="next" onclick="plusSlides(1)">❯</a>
</div>
</div>
CSS de la galerie :
/* J'ai volontairement épuré le code en ne gardant que le strict nécessaire. */
/*** Galerie - miniatures ***/
.galerie-mini {
border-radius: 5px;
padding: 3px;
background-color: #eaeaea;
box-shadow: 2px 2px 5px #222;
transition: 0.3s;
}
.galerie-mini:hover {
opacity: 0.8;
cursor: pointer;
background-color: #8f1d25;
transition: 0.3s;
}
/*** Galerie - Plein écran ***/
.modal-background {
display: none;
position: fixed;
z-index: 1;
padding-top: 50px;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.8);
}
.modal-content {
position: relative;
margin: 0 auto;
max-width: 1200px;
height: auto;
}
.modal-content img {
width: 100%;
}
Javascript - fonctionnalités d'ouverture, de fermeture du plein écran et navigation entre les images :
function openModal() {
document.getElementById('modal').style.display = "block";
}
function closeModal() {
document.getElementById('modal').style.display = "none";
}
var galleryIndex = 1;
showPhotos(galleryIndex);
function plusSlides(n) {
showPhotos(galleryIndex += n);
}
function currentSlide(n) {
showPhotos(galleryIndex = n);
}
function showPhotos(n) {
var i;
var slides = document.getElementsByClassName("imgGallery");
var dots = document.getElementsByClassName("demo");
var captionText = document.getElementById("caption");
if (n > slides.length) {galleryIndex = 1}
if (n < 1) {galleryIndex = 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[galleryIndex-1].style.display = "block";
dots[galleryIndex-1].className += " active";
captionText.innerHTML = dots[galleryIndex-1].alt;
}
Merci d'avance à tous ceux qui voudront bien m'aider. Bon dimanche !
Modifié par Loraga (16 Dec 2018 - 11:11)