<!-- Sliderを包むコンテナ要素 -->
<div class="swiper">
  <!-- スライド要素を包む要素 -->
  <div class="swiper-wrapper">
    <!-- 各スライド -->
    <div class="swiper-slide slide1">
      <p>slide1</p>
    </div>
    <div class="swiper-slide slide2">
      <p>slide2</p>
    </div>
    <div class="swiper-slide slide3">
      <p>slide3</p>
    </div>
  </div>
  <div class="swiper-button-prev"></div>
  <div class="swiper-button-next"></div>
  <div class="swiper-pagination"></div>
</div>
.swiper {
  /*スライダーの幅と高さを調整*/
  width: 100%;
  height: 200px;
}

.swiper-slide {
  /*スライド要素の幅と高さを調整*/
  width: 100%;
  height: 100%;

  /*テキストの位置調整*/
  display: flex;
  justify-content: center;
  align-items: center;

  /*テキストの色と太さを指定*/
  color: #fff;
  font-weight: bold;
}

/*各スライドの背景色の設定*/
.slide1 {
  background-color: #88acbd;
}

.slide2 {
  background-color: #99cb1f;
}

.slide3 {
  background-color: #e43a47;
}

/*スライドが非アクティブのときは矢印ボタンを非表示にする*/
.swiper:not(.swiper-initialized) .swiper-button-prev,
.swiper:not(.swiper-initialized) .swiper-button-next {
  display: none;
}

/*スライドが非アクティブのとき,スライドをgridレイアウトに変更*/
.swiper:not(.swiper-initialized) .swiper-wrapper {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
}
const mediaQueryList = window.matchMedia("(max-width: 599px)");
let swiper = null;
const initSwiper = () => {
  if (mediaQueryList.matches) {
    swiper = new Swiper(".swiper", {
      navigation: {
        nextEl: ".swiper-button-next",
        prevEl: ".swiper-button-prev"
      },
      pagination: {
        el: ".swiper-pagination",
        type: "bullets",
        clickable: "clickable"
      },
      loop: true,
      autoplay: true
    });
  } else {
    if (swiper) {
      swiper.destroy(false, true);
    }
  }
};

mediaQueryList.addEventListener("change", initSwiper);
initSwiper();

External CSS

  1. https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css

External JavaScript

  1. https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js