如何使用 CSS 和 JavaScript 创建响应式模态图片?


模态框是一个对话框/弹出窗口,显示在当前页面的顶部。

要创建响应式模态图片,我们使用 JavaScript 触发模态框并在点击时在其中显示当前图片。此外,我们还在模态框中使用 alt 属性作为图片标题文本。

响应式模态图片是指根据其大小、设备分辨率、方向和页面布局调整大小以适应窗口的图片。这些图片通常通过鼠标点击放大。它们也可以从网络浏览器中一键下载。

在这个例子中,我们正在创建一个显示“模态图片”的网页。

Example.html

创建一个HTML文件,在其中定义页面的结构(视图)。在这个例子中,我们使用 HTML 代码创建当前页面,其中包含所需的图片和响应式模态图片。

<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

添加CSS样式来设置大小和效果。在这个例子中,我们为模态图片设置样式,并在每次点击图片时添加一个效果,使其以全宽全高显示。

<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

使用JavaScript,我们可以执行验证并在页面上处理事件。在这个例子中,创建响应式模态图片,如果点击图片,则会以全视图显示。在 JavaScript 中,使用 DOM 调用图片 src 并设置图片样式以显示块。

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

完整示例

以下是使用CSS、HTML、JavaScript媒体查询创建响应式图片模态框的完整示例。

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

更新于:2022年12月19日

3K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.