How to create responsive Modal Images with CSS and JavaScript?


A modal is a dialog box/popup window that is displayed on top of the current page.

To create responsive modal images, we use JavaScript to trigger the modal and display the current image inside the when it is clicked on. Also, we are using alt for the image caption text inside the model.

Responsive modal images are images that are enlarged to fit into the window based on their size, device resolution, orientation and page layout. These images are usually enlarged with a mouse click. They can also be downloaded on a click from the web browsers.

In this example, we are creating a webpage displaying the “modal image”.

Example.html

Create an HTML file in which we will define the structure (view) of the page. In this example Using the HTML code we are creating the current page with required the image, a responsive modal image.

<body>
   <h2>Image Modal</h2>
   <img id="myImg" src="https://images.pexels.com/photos/3341110/pexels-photo-3341110.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" alt="Old Home" style="width: 100%; max-width: 300px" />

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

Example.css

Add CSS style to give the size and effect for a look. In this example, we are styling the modal image and adding an effect whenever we click on the image it will be appear in full width and height.

<style>
   body {
      font-family: Arial, Helvetica, sans-serif;
   }

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

   #myImg:hover {
      opacity: 0.7;
   }

   /* The Modal */

   .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>

Example.js

Using JavaScript, we can perform validation and the handle event on the page. In this example, creating the responsive modal image, if we clicked on the image then it will appear in full view. In JavaScript, used the DOM to call the image src and given the style of the image to display the block.

<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>

Complete Example

Following is complete example to create a responsive image modal with the help of CSS, HTML, JavaScript, and Media Query.

<!DOCTYPE html>
<html>
<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 */

   .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>
   <img id="myImg" src="https://images.pexels.com/photos/3341110/pexels-photo-3341110.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" alt="Old Home" style="width: 100%; max-width: 300px" />
   <!-- The Modal -->
   <div id="myModal" class="modal">
      <span class="close">×</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>

Updated on: 19-Dec-2022

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements