Search code examples
javascriptslideroverlapswiper.jswebflow

Swiper Js Slider - Images overlapping in fixed height slider


Desire output: enter image description here I am trying to implement a slider with a fixed height and auto width. The images should be adjusted to e.g. height: 800px and the width should be true to the image resolution.

My Implementation: https://playground-f2831f.webflow.io/model-images/provident-at-sunt-incidunt How it is supposed to be: https://artworld.agency/artists/sarah-bassett

My slider param:

<script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script> 
<script>
$(".swiper").append(`<div class="swiper-scrollbar"></div>`);
$(".swiper").append(`<div class="swiper-pagination"></div>`);
$(".swiper").append(`<div class="swiper-arrow button-prev"></div>`);
$(".swiper").append(`<div class="swiper-arrow button-next"></div>`);

const swiper1 = new Swiper(".swiper", {
  // Optional parameters
  slidesPerView: 'auto',
  centeredSlides: false,
  speed: 1500,
  loop: false,
  simulateTouch : true,
  loopFillGroupWithBlank: false,
  grabCursor: true,
  direction: "horizontal",
  // Responsive breakpoints
  breakpoints: {
    // when window width is >= 480px
    480: {
      slidesPerView: 1
    },
    // when window width is >= 768px
    768: {
      slidesPerView: 2
    },
    // when window width is >= 992px
    992: {
      slidesPerView: 2
    }
  },

  // If we need pagination
  pagination: {
    el: ".swiper-pagination",
    clickable: true
  },

  // Navigation arrows
  navigation: {
    nextEl: ".button-next",
    prevEl: ".button-prev"
  },

  // And if we need scrollbar
  scrollbar: {
    el: ".swiper-scrollbar",
    draggable: true
  }
});



</script>

Solution

  • ![enter image description here

    1 of 2:

    Set slidesPerView: "auto".

    Docs demo: https://swiperjs.com/demos#slides-per-view-auto

    In your case the slide width adapt the currently width of the slide content (The <img> inside). Related: boxmodel

    2 of 2:

    Set the image height to some value and width to auto.

    /* css */
    .swiper-slide img {
        width: auto;
        height: 200px;
    }
    

    *** The width will be proportional to the height

    DEMO

    var swiper = new Swiper(".mySwiper", {
        slidesPerView: "auto",
    
        loop: true,
    
        autoplay: {
          delay: 5000,
        },
    
        slideToClickedSlide: true,
        spaceBetween: 10,
        pagination: {
          el: ".swiper-pagination",
          clickable: true,
        },
      });
    .swiper-slide img {
        cursor: pointer;
        width: auto;
        height: 200px;
        border-radius: 10px;
        object-fit: contain;
      }
    
      .gallery-thumbs .swiper-slide {
        width: auto;
        border-radius: 10px;
      }
    <!-- begin snippet: js hide: false console: true babel: false -->
    
    <!-- Link Swiper's CSS -->
    <link rel="stylesheet" href="https://unpkg.com/swiper@8.4.4/swiper-bundle.min.css" />
    
    
    
    <h1>Swiper 8</h1>
    <!-- Swiper -->
    <div class="swiper mySwiper gallery-thumbs">
      <div class="swiper-wrapper">
        <div class="swiper-slide">
          <img src="https://picsum.photos/id/301/1000/900" />
        </div>
        <div class="swiper-slide">
          <img src="https://picsum.photos/id/89/800/1600" />
        </div>
        <div class="swiper-slide">
          <img src="https://picsum.photos/id/24/1500/800" />
        </div>
        <div class="swiper-slide">
          <img src="https://picsum.photos/id/225/1100/500" />
        </div>
      </div>
      <div class="swiper-pagination"></div>
    
    </div>
    
    <!-- Swiper JS -->
    <script src="https://unpkg.com/swiper@8.4.4/swiper-bundle.min.js"></script>