swiper.jsのオプションbreakpointsで表示スライド数を切り替えます。
htmlのコードは以下の通りです。クラス名swiper-wrapperはulタグ、クラス名swiper-slideはliタグに付与しています。画像はspanタグの背景画像です。ナビゲーションボタンはbuttonタグに独自のクラス名を付与して装飾します。また、ナビゲーションボタンはスライダーの両外側に配置するため、クラス名swiper-containerのdivタグの外側に記述しています。
<div class="container">
<div class="swiper-container js-slider">
<ul class="swiper-wrapper">
<li class="swiper-slide">
<a href="#" class="c-slider-item-link js-match-item">
<figure class="c-slider-item-photo">
<span class="c-photo-bg" style="background-image:url(images/swiper01.jpg)"></span>
</figure>
<h3 class="c-slider-list-ttl js-match-ttl">タイトル01<br>タイトル01</h3>
<p class="c-slider-list-desc">ダミーテキストダミーテキストダミーテキスト</p>
</a>
</li>
<li class="swiper-slide">
<a href="#" class="c-slider-item-link js-match-item">
<figure class="c-slider-item-photo">
<span class="c-photo-bg" style="background-image:url(images/swiper02.jpg)"></span>
</figure>
<h3 class="c-slider-list-ttl js-match-ttl">タイトル02</h3>
<p class="c-slider-list-desc">ダミーテキストダミーテキストダミーテキスト</p>
</a>
</li>
<li class="swiper-slide">
<a href="#" class="c-slider-item-link js-match-item">
<figure class="c-slider-item-photo">
<span class="c-photo-bg" style="background-image:url(images/swiper03.jpg)"></span>
</figure>
<h3 class="c-slider-list-ttl js-match-ttl">タイトル03</h3>
<p class="c-slider-list-desc">ダミーテキストダミーテキストダミーテキスト</p>
</a>
</li>
</ul>
</div>
<div class="c-slider-controler">
<button class="c-slider-button-prev js-swiper-button-prev"></button>
<button class="c-slider-button-next js-swiper-button-next"></button>
</div>
</div>
CSSのコードです。主にレスポンシブのコンテンツ幅設定やナビゲーションボタンの装飾・位置調整です。ナビゲーションボタンはFont Awesomeを利用しています。
.container {
position: relative;
z-index: 5;
width: 72.5vw;
margin: 0 auto;
}
@media screen and (max-width: 1365px) {
.container {
width: 80vw;
}
}
@media screen and (max-width: 767px) {
.container {
width: calc(100% - 64px);
}
}
.c-slider-item-link {
display: block;
padding: 20px;
border: 1px solid #ddd;
transition: border-color .2s linear;
}
@media screen and (min-width: 1199px) {
.c-slider-item-link:hover {
border: 1px solid #3bbbff;
}
}
.c-slider-item-photo {
position: relative;
overflow: hidden;
margin-bottom: 20px;
padding-bottom: 60%;
}
.c-photo-bg {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-position: center;
background-size: cover;
}
.c-slider-list-ttl {
margin-bottom: 20px;
font-size: 1.8rem;
font-weight: 800;
line-height: 1.5;
color: #3bbbff;
}
.c-slider-list-desc {
line-height: 1.6;
}
.c-slider-controler {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.c-slider-button-prev {
position: absolute;
top: 50%;
left: -30px;
transition: transform 0.5s cubic-bezier(0.075, 0.82, 0.165, 1);
transform: translateX(-100%) translateY(-50%);
}
.c-slider-button-prev:after {
font-family: "Font Awesome 5 Free";
font-size: 3rem;
font-weight: 900;
color: #3bbbff;
content: "\f053";
transition: color 0.5s cubic-bezier(0.075, 0.82, 0.165, 1);
}
.c-slider-button-next {
position: absolute;
top: 50%;
right: -30px;
transition: transform 0.5s cubic-bezier(0.075, 0.82, 0.165, 1);
transform: translateX(100%) translateY(-50%);
}
.c-slider-button-next:after {
font-family: "Font Awesome 5 Free";
font-size: 3rem;
font-weight: 900;
color: #3bbbff;
content: "\f054";
transition: color 0.5s cubic-bezier(0.075, 0.82, 0.165, 1);
}
@media screen and (max-width: 767px) {
.c-slider-button-prev {
transform: translateX(25%) translateY(-50%);
}
.c-slider-button-next {
transform: translateX(-25%) translateY(-50%);
}
}
@media screen and (min-width: 1365px) {
.c-slider-button-prev:hover {
transform: translateX(-100%) translateY(-50%) scale(1.2);
}
.c-slider-button-next:hover {
transform: translateX(100%) translateY(-50%) scale(1.2);
}
.c-slider-button-prev:hover:after, .c-slider-button-next:hover:after {
color: #ffb500;
}
}
JavaScriptのコードです。オプションでbreakpointsを指定します。ブラウザ幅が1361px以上の時はslidesPerView: 3、768px以上の時はslidesPerView: 2、767px以下の時はslidesPerView: 1を指定して、レスポンシブで表示スライド数を切り替えます。
var swiper01 = new Swiper('.js-slider', {
loop: true,
slidesPerView: 1,
spaceBetween: 40,
navigation: {
nextEl: '.js-swiper-button-next',
prevEl: '.js-swiper-button-prev'
},
autoplay: {
delay: 5000,
},
breakpoints: {
1361: {
slidesPerView: 3,
},
768: {
slidesPerView: 2,
}
}
});





