Bonjour à toutes et à tous , je souhaite pouvoir appliquer à plusieurs images de mon site la fonction Modal image.(ouvrir une image plus grande en cliquant sur l'image)
Je ne trouve pas qu'elle ligne de code je dois modifier pour que cela soit possible.
Actuellement cela fonctionne pour la photo Snow, mais pas pour la photo Rain. (dans l'exemple de code ci-dessous)
<!DOCTYPE html>
<html lang="fr">

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body {
            font-family: Arial, Helvetica, sans-serif;
        }

        #myImg {
            border-radius: 5px;
            cursor: pointer;
            transition: 0.3s;
        }

            #myImg:hover {
                opacity: 0.7;
            }

        /* The Modal (background) */
        .modal {
            display: none; /* Hidden by default */
            position: fixed; /* Stay in place */
            z-index: 1; /* Sit on top */
            padding-top: 100px; /* Location of the box */
            left: 0;
            top: 0;
            width: 100%; /* Full width */
            height: 100%; /* Full height */
            overflow: auto; /* Enable scroll if needed */
            background-color: rgb(0,0,0); /* Fallback color */
            background-color: rgba(0,0,0,0.9); /* Black w/ opacity */
        }

        /* Modal Content (image) */
        .modal-content {
            margin: auto;
            display: block;
            width: 80%;
            max-width: 700px;
        }

        /* Caption of Modal Image */
        #caption {
            margin: auto;
            display: block;
            width: 80%;
            max-width: 700px;
            text-align: center;
            color: #ccc;
            padding: 10px 0;
            height: 150px;
        }

        /* Add Animation */
        .modal-content, #caption {
            -webkit-animation-name: zoom;
            -webkit-animation-duration: 0.6s;
            animation-name: zoom;
            animation-duration: 0.6s;
        }

        @-webkit-keyframes zoom {
            from {
                -webkit-transform: scale(0)
            }

            to {
                -webkit-transform: scale(1)
            }
        }

        @keyframes zoom {
            from {
                transform: scale(0)
            }

            to {
                transform: scale(1)
            }
        }

        /* The Close Button */
        .close {
            position: absolute;
            top: 15px;
            right: 35px;
            color: #f1f1f1;
            font-size: 40px;
            font-weight: bold;
            transition: 0.3s;
        }

            .close:hover,
            .close:focus {
                color: #bbb;
                text-decoration: none;
                cursor: pointer;
            }

        /* 100% Image Width on Smaller Screens */
        @media only screen and (max-width: 700px) {
            .modal-content {
                width: 100%;
            }
        }
    </style>
</head>
<body>

    <h2>Image Modal</h2>
    <p>In this example, we use CSS to create a modal (dialog box) that is hidden by default.</p>
    <p>We use JavaScript to trigger the modal and to display the current image inside the modal when it is clicked on. Also note that we use the value from the image's "alt" attribute as an image caption text inside the modal.</p>

    <img id="myImg" src="img_snow.jpg" alt="Snow" style="width:100%;max-width:300px">

    <!-- The Modal -->
    <div id="myModal" class="modal">
        <span class="close">&times;</span>
        <img class="modal-content" id="img01">
        <div id="caption"></div>
    </div>

    <h2>Image Modal</h2>
    <p>In this example, we use CSS to create a modal (dialog box) that is hidden by default.</p>
    <p>We use JavaScript to trigger the modal and to display the current image inside the modal when it is clicked on. Also note that we use the value from the image's "alt" attribute as an image caption text inside the modal.</p>

    <img id="myImg" src="img_rain.jpg" alt="rain" style="width:100%;max-width:300px">

    <!-- The Modal -->
    <div id="myModal" class="modal">
        <span class="close">&times;</span>
        <img class="modal-content" id="img01">
        <div id="caption"></div>
    </div>

    <script>
// Get the modal
var modal = document.getElementById("myModal");

// Get the image and insert it inside the modal - use its "alt" text as a caption
var img = document.getElementById("myImg");
var modalImg = document.getElementById("img01");
var captionText = document.getElementById("caption");
img.onclick = function(){
  modal.style.display = "block";
  modalImg.src = this.src;
  captionText.innerHTML = this.alt;
}

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
  modal.style.display = "none";
}
    </script>

</body>
</html>

D'avance merci de votre aide et de votre savoir.
Bonsoir, un id est unique dans le document HTML. Vous ne pouvez avoir plusieurs éléments qui ont la même valeur pour l'attribut id. Donc un seul et unique id="myImg" , id="myModal", id="caption".

La balise <img> à deux attribut obligatoire, l'attribut src et alt. Le premier sert à indiquer le chemin de l'image, le second un texte alternatif décrivant le contenu de l'image, cela à destination des moteurs de recherches mais plus particulièrement aux personnes qui ne vois pas les images, celles qui utilisent un lecteur d'écran.

Utilisez le validateur pour voir et corriger les erreurs de syntaxe dans votre code => https://validator.w3.org/#validate_by_input
casper2 a écrit :
Bonsoir, un id est unique dans le document HTML. Vous ne pouvez avoir plusieurs éléments qui ont la même valeur pour l'attribut id. Donc un seul et unique id="myImg" , id="myModal", id="caption".


D'accord casper2, mais existe t'il quand même un solution ?
Merci.
BruChri a écrit :

D'accord casper2, mais existe t'il quand même un solution ?
Merci.

Oui bien sur, corriger les erreurs détectées par le validateur et modifier le JS en fonction.
Je vous propose ceci :

<!DOCTYPE html>
<html lang="fr">

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Image en modale</title>
    <style>
        body {
            font-family: Arial, Helvetica, sans-serif;
        }

        .img {
            border-radius: 5px;
            cursor: pointer;
            transition: 0.3s;
        }

        #myImg:hover {
            opacity: 0.7;
        }

        /* The Modal (background) */
        .modal {
            display: none;
            /* Hidden by default */
            position: fixed;
            /* Stay in place */
            z-index: 1;
            /* Sit on top */
            padding-top: 100px;
            /* Location of the box */
            left: 0;
            top: 0;
            width: 100%;
            /* Full width */
            height: 100%;
            /* Full height */
            overflow: auto;
            /* Enable scroll if needed */
            background-color: rgb(0, 0, 0);
            /* Fallback color */
            background-color: rgba(0, 0, 0, 0.9);
            /* Black w/ opacity */
        }

        /* Modal Content (image) */
        .modal-content {
            margin: auto;
            display: block;
            width: 80%;
            max-width: 700px;
        }

        /* Caption of Modal Image */
        #caption {
            margin: auto;
            display: block;
            width: 80%;
            max-width: 700px;
            text-align: center;
            color: #ccc;
            padding: 10px 0;
            height: 150px;
        }

        /* Add Animation */
        .modal-content,
        #caption {
            -webkit-animation-name: zoom;
            -webkit-animation-duration: 0.6s;
            animation-name: zoom;
            animation-duration: 0.6s;
        }

        @-webkit-keyframes zoom {
            from {
                -webkit-transform: scale(0)
            }

            to {
                -webkit-transform: scale(1)
            }
        }

        @keyframes zoom {
            from {
                transform: scale(0)
            }

            to {
                transform: scale(1)
            }
        }

        /* The Close Button */
        .close {
            position: absolute;
            top: 15px;
            right: 35px;
            color: #f1f1f1;
            font-size: 40px;
            font-weight: bold;
            transition: 0.3s;
        }

        .close:hover,
        .close:focus {
            color: #bbb;
            text-decoration: none;
            cursor: pointer;
        }

        /* 100% Image Width on Smaller Screens */
        @media only screen and (max-width: 700px) {
            .modal-content {
                width: 100%;
            }
        }
    </style>
</head>

<body>

    <h2>Image Modal</h2>
    <p>In this example, we use CSS to create a modal (dialog box) that is hidden by default.</p>
    <p>We use JavaScript to trigger the modal and to display the current image inside the modal when it is clicked on.
        Also note that we use the value from the image's "alt" attribute as an image caption text inside the modal.</p>

    <img id="myImg" class="img" src="https://www.lefayresorts.com/magazine/wp-content/uploads/2021/02/neve-terapia.jpg"
        alt="Snow" style="width:100%;max-width:300px">

    <!-- The Modal -->
    <div id="myModal" class="modal">
        <span class="close">&times;</span>
        <img class="modal-content" id="img01" src="image.png" alt="">
        <div id="caption"></div>
    </div>

    <h2>Image Modal</h2>
    <p>In this example, we use CSS to create a modal (dialog box) that is hidden by default.</p>
    <p>We use JavaScript to trigger the modal and to display the current image inside the modal when it is clicked on.
        Also note that we use the value from the image's "alt" attribute as an image caption text inside the modal.</p>

    <img id="myImg2" class="img"
        src="https://as2.ftcdn.net/v2/jpg/03/66/90/39/1000_F_366903907_RzCXMYTOdWnfEmm8wZ3fKnfEOLE2Qhmh.jpg" alt="rain"
        style="width:100%;max-width:300px">

    <script>
        // Get the modal
        const modal = document.getElementById("myModal");

        // Get the image and insert it inside the modal - use its "alt" text as a caption
        const img = document.querySelectorAll(".img");
        const modalImg = document.getElementById("img01");
        const captionText = document.getElementById("caption");

        img.forEach(function (element) {
            element.addEventListener("click", function () {
                modal.style.display = "block";
                modalImg.src = this.src;
                captionText.innerText = this.alt;
            });
        });


        // Get the <span> element that closes the modal
        const span = document.getElementsByClassName("close")[0];

        // When the user clicks on <span> (x), close the modal
        span.onclick = function () {
            modal.style.display = "none";
        }
    </script>

</body>

</html>

Modifié par casper2 (25 Sep 2025 - 20:01)