CSS – گالری تصاویر (Image Gallery)

یک گالری تصاویر CSS مجموعه‌ای از تصاویر است که با استفاده از CSS نمایش داده می‌شود. CSS می‌تواند برای کنترل طرح‌بندی تصاویر، اندازه آن‌ها، فضای میانی و سایر ویژگی‌های بصری استفاده شود.

گالری تصاویر CSS به طور معمول بر روی وب‌سایت‌ها برای نمایش محصولات، نمونه‌کارها یا سایر محتواهای بصری به شیوه‌ای جذاب استفاده می‌شود.

برای ایجاد یک گالری تصاویر ساده، می‌توانید این مراحل را دنبال کنید:

  1. از یک عنصر ظرف HTML استفاده کنید، مانند <div>.

  2. تصاویر را به عنصر ظرف اضافه کنید. می‌توانید از تگ <img> برای نمایش تصاویر استفاده کنید.

  3. هر تصویر باید درون یک تگ <a> قرار گیرد تا قابلیت کلیک شدن را داشته باشند.

  4. ویژگی display: flex را به عنصر ظرف div اضافه کنید.

  5. ویژگی flex-flow: row wrap را برای تنظیم جهت ظرف flex به روی row اضافه کنید.

Simple Image Gallery

این قسمت یک نمونه از طرح یک گالری تصاویر ساده را نشان می‌دهد که به صورت یک ردیف نمایش داده می‌شود.

<html>
<head>
<style>
   .image-gallery {
      display: flex;
      flex-flow: row wrap;
      justify-content: space-between;
      align-items: center;
   }
   .image-gallery img {
      width: 25%;
      height: 250px;
   }
</style>
</head>
<body>
   <div class="image-gallery">
      <img src="images/red-flower.jpg" alt="Red Flower">
      <img src="images/white-flower.jpg" alt="White Flower">
      <img src="images/orange-flower.jpg" alt="Orange Flower">
   </div>   
</body>
</html>

در این کد، ما یک عنصر div با کلاس .image-gallery داریم که حاوی تصاویر است. با استفاده از ویژگی display: flex، این تصاویر در یک ردیف قرار می‌گیرند. ویژگی flex-flow: row wrap تنظیم می‌کند که موارد در یک ردیف نمایش داده شوند و در صورتی که فضا کافی نباشد، به خط بعدی بروند. ویژگی justify-content: space-between فضای خالی بین تصاویر را به صورت یکسان تقسیم می‌کند. و در نهایت، تصاویر با ویژگی‌های width: 25% و height: 250px اندازه داده شده‌اند تا در هر ردیف چهار تصویر قرار بگیرد و ارتفاع آن‌ها ثابت باشد.

Image Gallery With a Hover Effect

در این بخش، یک نمونه از گالری تصاویر با افکت هاور ارائه شده است. وقتی کاربر روی یک تصویر موس کند، آن تصویر بزرگتر می‌شود و یک حاشیه قرمز به آن اضافه می‌شود.

<html>
<head>
<style>
   .image-gallery {
      display: flex;
      flex-flow: row wrap;
      justify-content: space-between;
      align-items: center;
   }
   .image-gallery .image-item {
      width: 30%; 
      text-align: center; 
   }
   .image-gallery img {
      width: 100%; 
      height: 220px; 
      transition: transform 0.2s;
   }
   .image-gallery .image-item:hover {
      transform: scale(1.1);
      border: 3px solid red;
   }
   .image-description {
      margin-top: 10px; 
   }
</style>
</head>
<body>
<h3>Hover over the images to see the effect</h3>
   <div class="image-gallery">
      <div class="image-item">
         <img src="images/red-flower.jpg" alt="Red Flower">
         <div class="image-description">Red Flower</div>
      </div>
      <div class="image-item">
         <img src="images/see.jpg" alt="White Flower">
         <div class="image-description">See</div>
      </div>
      <div class="image-item">
         <img src="images/orange-flower.jpg" alt="Orange Flower">
         <div class="image-description">Orange Flower</div>
      </div>
   </div>   
</body>
</html>

در این کد، ما از ویژگی transform: scale(1.1) برای بزرگ‌تر شدن تصاویر و border: 3px solid red برای اضافه کردن حاشیه قرمز در حالت هوور استفاده کرده‌ایم. همچنین، با استفاده از ویژگی transition: transform 0.2s افکت انتقالی برای تغییر اندازه تصاویر اعمال شده است.

Responsive Image Gallery Using Media Query

در این بخش، یک نمونه از گالری تصاویر واکنش‌گرا با استفاده از رزولوشن رسانه CSS برای ایجاد تجربه نمایش بهینه بر روی دستگاه‌ها و اندازه‌های صفحه مختلف ارائه شده است. در صفحات با اندازه کوچکتر، تصاویر بزرگ‌تر و با فاصله بیشتری نمایش داده می‌شوند.

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
   .image-gallery {
      display: flex;
      flex-flow: row wrap;
      justify-content: space-between;
      align-items: center;
   }
   .image-gallery .image-item {
      width: 30%;
      text-align: center;
   }
   .image-gallery img {
      width: 100%;
      height: 220px;
      transition: transform 0.2s;
   }
   .image-gallery .image-item:hover {
      transform: scale(1.1);
      border: 3px solid red;
   }
   .image-description {
      margin-top: 10px;
   }
   @media only screen and (max-width: 800px) {
      .image-gallery .image-item {
         width: 40%; 
         margin: 20px;
      }
   }
   @media only screen and (max-width: 300px) {
      .image-gallery .image-item {
         width: 100%; 
         margin: 20px;
      }
   }
</style>
</head>
<body>
<h3>Resize the browser window to see the effect.</h3>
   <div class="image-gallery">
      <div class="image-item">
         <img src="images/red-flower.jpg" alt="Red Flower">
         <div class="image-description">Red Flower</div>
      </div>
      <div class="image-item">
         <img src="images/see.jpg" alt="White Flower">
         <div class="image-description">See</div>
      </div>
      <div class="image-item">
         <img src="images/orange-flower.jpg" alt="Orange Flower">
         <div class="image-description">Orange Flower</div>
      </div>
      <div class="image-item">
         <img src="images/red-flower.jpg" alt="Red Flower">
         <div class="image-description">Red Flower</div>
      </div>
      <div class="image-item">
         <img src="images/see.jpg" alt="White Flower">
         <div class="image-description">See</div>
      </div>
      <div class="image-item">
         <img src="images/orange-flower.jpg" alt="Orange Flower">
         <div class="image-description">Orange Flower</div>
      </div>
   </div>   
</body>
</html>

در این کد، ما از رزولوشن رسانه CSS برای تغییر اندازه تصاویر و فاصله‌بندی آن‌ها بر اساس عرض صفحه استفاده کرده‌ایم. به طور مشخص، وقتی عرض صفحه بیشتر از 800 پیکسل باشد، عرض تصاویر به 40% تغییر می‌کند و مارجین 20 پیکسلی به آن اضافه می‌شود. همچنین، وقتی عرض صفحه کمتر از 300 پیکسل باشد، عرض تصاویر به 100% تغییر می‌کند.

CSS Image Gallery With Horizontal Scroll

در این بخش، یک نمونه از گالری تصاویر با چیدمان افقی قابل اسکرول با استفاده از ویژگی overflow نشان داده شده است. در این گالری، تصاویر به صورت افقی قابل اسکرول هستند.

<html>
<head>
<style>
   .image-gallery {
      overflow: auto;
      white-space: nowrap;
      padding: 5px;
      background-color: #78e756;
   }
   .image-gallery img {
      width: 25%;
      height: 250px;
      margin: 10px;
   }
</style>
</head>
<body>
   <div class="image-gallery">
      <img src="images/red-flower.jpg" alt="Red Flower">
      <img src="images/white-flower.jpg" alt="White Flower">
      <img src="images/orange-flower.jpg" alt="Orange Flower">
      <img src="images/red-flower.jpg" alt="Red Flower">
      <img src="images/white-flower.jpg" alt="White Flower">
      <img src="images/orange-flower.jpg" alt="Orange Flower">
   </div>   
</body>
</html>

در این کد، ما از ویژگی overflow: auto برای فعال کردن اسکرول افقی استفاده کرده‌ایم. همچنین، با استفاده از white-space: nowrap، مطمئن شویم که تصاویر در یک خط قرار گرفته و به خط بعدی نمی‌روند.

CSS Image Gallery With Vertical Scroll

در این بخش، یک نمونه از گالری تصاویر با چیدمان عمودی قابل اسکرول با استفاده از ویژگی overflow نشان داده شده است. در این گالری، تصاویر به صورت عمودی قابل اسکرول هستند.

<html>
<head>
<style>
   .image-gallery {
      overflow: auto;
      padding: 5px;
      background-color: #78e756;
   }
   .image-gallery img {
      width: 30%;
      height: 250px;
      margin: 10px;   
   }
</style>
</head>
<body>
   <div class="image-gallery">
      <img src="images/red-flower.jpg" alt="Red Flower">
      <img src="images/white-flower.jpg" alt="White Flower">
      <img src="images/orange-flower.jpg" alt="Orange Flower">
      <img src="images/red-flower.jpg" alt="Red Flower">
      <img src="images/white-flower.jpg" alt="White Flower">
      <img src="images/orange-flower.jpg" alt="Orange Flower">
   </div>   
</body>
</html>

در این کد، ما از ویژگی overflow: auto برای فعال کردن اسکرول عمودی استفاده کرده‌ایم. این ویژگی اجازه می‌دهد تا اگر تعداد تصاویر بیشتر از فضای موجود درون دیو می‌شود، یک نوار اسکرول عمودی نمایش داده شود تا کاربر بتواند به سادگی از تصاویر به طرف بالا یا پایین صفحه حرکت کند.

CSS Grid Image Gallery

این بخش یک نمونه از گالری تصاویر با استفاده از Grid CSS نشان می‌دهد که سه نمای مختلف دارد: سه تصویر، دو تصویر یا عرض کامل.

وقتی روی یکی از دکمه‌ها کلیک می‌کنید، گالری به چیدمان متناظر تغییر می‌کند.

<html>
<head>
<style>
   .image-gallery {
      display: flex;
      justify-content: space-between;
      align-items: center;
      flex-wrap: wrap;
   }
   .image-container {
      width: 30%;
      height: 250px;
      margin: 10px;
      display: flex;
      justify-content: center;
      align-items: center;
   }
   .image-container img {
      width: 100%;
      height: 100%;
      margin: 10px;
   }
   .two-columns .image-container {
      width: 45%;
      margin: 10px;
   }
   .full-width .image-container {
      width: 100%;
      margin: 20px;
   }
   .button-container {
      text-align: center;
   }
   .button-container button {
      background-color: #7dfa2a;
      border: none;
      padding: 10px 20px;  
      margin: 15px;
   }
</style>
</head>
<body>
   <div class="button-container">
      <button onclick="showFourImages()">Three Images</button>
      <button onclick="showTwoImages()">Two Images</button>
      <button onclick="showFullWidth()">Full Width</button>
   </div>

   <div class="image-gallery">
      <div class="image-container">
         <img src="images/red-flower.jpg" alt="Red Flower">
      </div>
      <div class="image-container">
         <img src="images/white-flower.jpg" alt="White Flower">
      </div>
      <div class="image-container">
         <img src="images/orange-flower.jpg" alt="Orange Flower">
      </div>
         <div class="image-container">
         <img src="images/red-flower.jpg" alt="Red Flower">
      </div>
      <div class="image-container">
         <img src="images/white-flower.jpg" alt="White Flower">
      </div>
      <div class="image-container">
         <img src="images/orange-flower.jpg" alt="Orange Flower">
      </div>
   </div>

   <script>
      function showFourImages() {
         document.querySelector(".image-gallery").className = "image-gallery";
      }

      function showTwoImages() {
         document.querySelector(".image-gallery").className = "image-gallery two-columns";
      }

      function showFullWidth() {
         document.querySelector(".image-gallery").className = "image-gallery full-width";
      }
   </script>
</body>
</html>

در این کد، ما از CSS Grid برای چیدمان گالری استفاده کرده‌ایم. دکمه‌هایی نیز برای تغییر نمایش گالری به تعداد مورد نظر اضافه شده‌اند. هر دکمه باعث اضافه کردن یک کلاس به عنصر گالری می‌شود که موجب تغییر چیدمان آن می‌شود.

CSS Tabbed Image Gallery

در این بخش، یک مثال از گالری تصاویر با زبانه‌های کلیکی CSS نشان داده شده است. وقتی روی یک تصویر کوچک کلیک می‌کنید، یک نسخه بزرگتر از همان تصویر باز می‌شود.

<html>
<head>
<style>
   .image-gallery {
      display: flex;
      justify-content: space-between;
      float: center;
   }
   .image-container { 
      display: flex;
      justify-content: center;
      align-items: center;
      width: 25%;
      height: 250px;
      left: 0;
      top: 0;
   }
   .image-container img {
      width: 200px;
      height: 150px;
      cursor: pointer; 
   }
   .gallery-tab {
      display: none;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
   }
   .tab-content {
      margin: auto;
      display: block;
      width: 80%;
      height: 80%;
   }
   .tab-content img {
      width: 100%;
      height: auto;
   }
</style>
</head>
<body>
   <div class="image-gallery">
      <div class="image-container" onclick="opentab('red')">
         <img src="images/red-flower.jpg" alt="Red Flower" id="red">
      </div>
      <div class="image-container" onclick="opentab('white')">
         <img src="images/white-flower.jpg" alt="White Flower" id="white">
      </div>
      <div class="image-container" onclick="opentab('orange')">
         <img src="images/orange-flower.jpg" alt="Orange Flower" id="orange">
      </div>
   </div>

   <div id="tab" class="gallery-tab">
      <img class="tab-content" id="tabImg">
   </div>

   <script>
      function opentab(imageId) {
         var tab = document.getElementById("tab");
         var tabImg = document.getElementById("tabImg");
   
         tab.style.display = "block";
         tabImg.src = document.getElementById(imageId).src;
      }
   </script>
</body>
</html>

در این کد، هر div با کلاس .image-container یک تصویر را نمایش می‌دهد. وقتی روی هر تصویر کلیک می‌کنید، تابع opentab فراخوانی می‌شود و تصویر مربوطه به زبانه با کلاس .tab-content انتقال داده می‌شود و در نتیجه آن زبانه با کلاس .gallery-tab نمایش داده می‌شود.

CSS slideshow

این کد یک اسلایدشو ساده با تصاویر و دکمه‌های ناوبری و نقطه‌ها برای نمایش اسلاید فعلی را نشان می‌دهد.

  • slideshow-container: یک کانتینر برای نگهداری اسلایدها است. این کانتینر overflow را مخفی می‌کند تا هر تصویر که خارج از محیط ظاهر نشود.
  • image-gallery: یک فضای نمایش برای تصاویر است که از flexbox برای چینش افقی آنها استفاده می‌کند.
  • .image-container: هر تصویر را در یک محیط مشخص می‌کند. این محیط تصویرها را در داخل کانتینر مربوطه قرار می‌دهد.
  • .prev-img و .next-img: دکمه‌های قبلی و بعدی هستند که کاربر را قادر می‌سازند بین تصاویر حرکت کند.
  • .dot-container: محلی است که نقطه‌هایی برای هر تصویر در اسلایدشو نشان داده می‌شود.
  • .custom-dot: هر نقطه معرفی شده به عنوان یک مؤشر برای یک تصویر خاص است.
  • index: یک متغیر برای نگهداری ایندکس تصویر فعلی است.

سه تابع (slides(), activeSlides(), displaySlides()) برای کنترل و نمایش تصاویر و نقاط اسلایدشو وجود دارد. این توابع با کلیک کردن بر دکمه‌ها و نقاط فعال می‌شوند و تصاویر را به صورت متناسب نمایش می‌دهند.

<html>
<head>
<style>
   .slideshow-container {
      position: relative;
      width: 100%;
      overflow: hidden;
   }
   .image-gallery {
      display: flex;
      transition: transform 0.5s ease-in-out;
   }
   .image-container {
      width: 100%;
      height: 100%;
   }
   .image-container img {
      width: 100%;
      height: 100%;
   }
   .prev-img, .next-img {
      cursor: pointer;
      position: absolute;
      top: 50%;
      width: auto;
      padding: 16px;
      margin-top: -22px;
      background-color: rgba(0, 0, 0, 0.5);
      color: white;
      font-weight: bold;
      font-size: 18px;
      transition: 0.6s ease;
   }
   .next-img {
      right: 0;
   }
   .prev-img:hover, .next-img:hover {
      background-color: rgba(0, 0, 0, 0.8);
   }
   .dot-container {
      text-align: center;
      margin-top: 20px;
   }
   .custom-dot {
      height: 10px;
      width: 10px;
      margin: 0 5px;
      background-color: #e98a8a;
      border-radius: 50%;
      display: inline-block;
      cursor: pointer;
   }
   .active-dot {
      background-color: #706868;
   }
</style>
</head>
<body>
   <div class="slideshow-container">
      <div class="image-gallery">
         <div class="image-container">
            <img src="images/scenery.jpg" alt="Red Flower">
         </div>
         <div class="image-container">
            <img src="images/scenery3.jpg" alt="White Flower">
         </div>
         <div class="image-container">
            <img src="images/scenery4.jpg" alt="Orange Flower">
         </div>
      </div>
      <a class="prev-img" onclick="slides(-1)">❮</a>
      <a class="next-img" onclick="slides(1)">❯</a>
   </div>
   
   <div class="dot-container">
      <span class="custom-dot" onclick="activeSlides(1)"></span>
      <span class="custom-dot" onclick="activeSlides(2)"></span>
      <span class="custom-dot" onclick="activeSlides(3)"></span>
   </div>

<script>
   var index = 1;
   displaySlides(index);

   function slides(n) {
      displaySlides(index += n);
   }

   function activeSlides(n) {
      displaySlides(index = n);
   }

   function displaySlides(n) {
      var i;
      var allSlides = document.getElementsByClassName("image-container");
      var allDots = document.getElementsByClassName("custom-dot");

      if (n > allSlides.length) {
         index = 1;
      }
      if (n < 1) {
         index = allSlides.length;
      }
      for (i = 0; i < allSlides.length; i++) {
         allSlides[i].style.display = "none";
      }
      for (i = 0; i < allDots.length; i++) {
         allDots[i].className = allDots[i].className.replace(" active-dot", "");
      }
      allSlides[index - 1].style.display = "block";
      allDots[index - 1].className += "active-dot";
   }
</script>
</body>
</html>

CSS Slideshow Gallery

این کد یک گالری اسلایدشو ساده را نشان می‌دهد. این گالری شامل تعدادی تصویر است و تنها یک تصویر در هر زمان نمایش داده می‌شود.

کاربران می‌توانند بر روی پیکان‌های چپ و راست کلیک کرده و از تصاویر عبور کنند.

در اینجا یک توضیح از بخش‌های مهم این کد آمده است:

  • slideshow-container: یک کانتینر برای نگهداری اسلایدها است. این کانتینر overflow را مخفی می‌کند تا هر تصویر که خارج از محیط ظاهر نشود.
  • image-gallery: یک فضای نمایش برای تصاویر است که از flexbox برای چینش افقی آنها استفاده می‌کند.
  • .image-container: هر تصویر را در یک محیط مشخص می‌کند. این محیط تصویرها را در داخل کانتینر مربوطه قرار می‌دهد.
  • .prev-img و .next-img: دکمه‌های قبلی و بعدی هستند که کاربر را قادر می‌سازند بین تصاویر حرکت کند.
  • .bottom-img-container: محلی است که تصاویر کوچکی از تصاویر اصلی نشان داده می‌شود.
  • .bottom-img: هر تصویر کوچک معرفی شده به عنوان یک مؤشر برای یک تصویر خاص است.
  • index: یک متغیر برای نگهداری ایندکس تصویر فعلی است.

سه تابع (slides(), activeSlides(), displaySlides()) برای کنترل و نمایش تصاویر و نقاط اسلایدشو وجود دارد. این توابع با کلیک کردن بر دکمه‌ها و تصاویر کوچک، تصاویر را به صورت متناسب نمایش می‌دهند.

<html>
<head>
<style>
   .slideshow-container {
      position: relative;
      width: 100%;
      overflow: hidden;
   }
   .image-gallery {
      display: flex;
      transition: transform 0.5s ease-in-out;
   }
   .image-container {
      width: 100%;
      height: 100%;
   }
   .image-container img {
      width: 100%;
      height: 100%;
   }
   .prev-img, .next-img {
      cursor: pointer;
      position: absolute;
      top: 50%;
      width: auto;
      padding: 16px;
      margin-top: -22px;
      background-color: rgba(0, 0, 0, 0.5);
      color: white;
      font-weight: bold;
      font-size: 18px;
      transition: 0.6s ease;
   }
   .next-img {
      right: 0;
   }
   .prev-img:hover, .next-img:hover {
      background-color: rgba(0, 0, 0, 0.8);
   }
   .bottom-img-container {
      text-align: center;
      margin-top: 20px;
   }
   .bottom-img {
      height: 80px; 
      width: 80px; 
      margin: 0 10px; 
      cursor: pointer;
      opacity: 0.5; 
   }
   .bottom-img.current-bottom-img {
      opacity: 1; 
   }
</style>
</head>
<body>
   <div class="slideshow-container">
      <div class="image-gallery">
         <div class="image-container">
            <img src="images/scenery.jpg" alt="Red Flower">
         </div>
         <div class="image-container">
            <img src="images/scenery3.jpg" alt="White Flower">
         </div>
         <div class="image-container">
            <img src="images/scenery4.jpg" alt="Orange Flower">
         </div>
         
      </div>
      <a class="prev-img" onclick="slides(-1)">❮</a>
      <a class="next-img" onclick="slides(1)">❯</a>
   </div>
   
   <div class="bottom-img-container">
      <img class="bottom-img current-bottom-img" src="images/scenery.jpg" onclick="activeSlides(1)">
      <img class="bottom-img" src="images/scenery3.jpg" onclick="activeSlides(2)">
      <img class="bottom-img" src="images/scenery4.jpg" onclick="activeSlides(3)">
   </div>

   <script>
      var index = 1;
      displaySlides(index);

      function slides(n) {
         displaySlides(index += n);
      }

      function activeSlides(n) {
         displaySlides(index = n);
      }

      function displaySlides(n) {
         var i;
         var allSlides = document.getElementsByClassName("image-container");
         var allThumbnails = document.getElementsByClassName("bottom-img");

         if (n > allSlides.length) {
            index = 1;
         }
         if (n < 1) {
            index = allSlides.length;
         }
         for (i = 0; i < allSlides.length; i++) {
            allSlides[i].style.display = "none";
         }
         for (i = 0; i < allThumbnails.length; i++) {
            allThumbnails[i].className = allThumbnails[i].className.replace(" current-bottom-img", "");
            allThumbnails[i].style.filter = "brightness(50%)";
         }
         allSlides[index - 1].style.display = "block";
         allThumbnails[index - 1].className += " current-bottom-img";
         allThumbnails[index - 1].style.filter = "brightness(100%)";
      }
   </script>
</body>
</html>

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.