2020.10.17

JavaScript

swiper.jsのオプションslidesPerViewにautoを指定して独自で横幅設定

デモページはこちら

swiper.jsのオプションslidesPerViewにautoを指定して、独自で横幅を設定します。htmlのコードは以下の通りです。ナビゲーションボタンはsvgで記述しています。

<div class="container">
	<div class="swiper-container js-slider">
		<ul class="swiper-wrapper">
			<li class="swiper-slide c-slider-item">
				<a href="#" class="c-slider-item-link">
					<figure class="c-slider-item-photo">
						<span class="c-photo-bg" style="background-image:url(images/swiper01.jpg)"></span>
					</figure>
					<div class="c-slider-list-txt">
						<h3 class="c-slider-list-ttl">タイトル01</h3>
						<p>ダミーテキストダミーテキストダミーテキスト</p>
					</div>
				</a>
			</li>
			<li class="swiper-slide c-slider-item">
				<a href="#" class="c-slider-item-link">
					<figure class="c-slider-item-photo">
						<span class="c-photo-bg" style="background-image:url(images/swiper02.jpg)"></span>
					</figure>
					<div class="c-slider-list-txt">
						<h3 class="c-slider-list-ttl">タイトル02</h3>
						<p>ダミーテキストダミーテキストダミーテキスト</p>
					</div>
				</a>
			</li>
			<li class="swiper-slide c-slider-item">
				<a href="#" class="c-slider-item-link">
					<figure class="c-slider-item-photo">
						<span class="c-photo-bg" style="background-image:url(images/swiper03.jpg)"></span>
					</figure>
					<div class="c-slider-list-txt">
						<h3 class="c-slider-list-ttl">タイトル03</h3>
						<p>ダミーテキストダミーテキストダミーテキスト</p>
					</div>
				</a>
			</li>
		</ul>
		<div class="c-slider-controler">
			<div class="c-slider-pagination js-swiper-pagination"></div>
			<div class="c-slider-controler-container">
				<div class="c-slider-button-prev js-swiper-button-prev">
					<svg class="c-btn-arrow" xmlns="http://www.w3.org/2000/svg" width="131px" height="28px" viewBox="0 0 131 28">
						<path class="c-btn-arrow-parts" fill-rule="evenodd" d="M130.795,25.540 L108.375,0.537 L107.934,2.580 L128.796,26.006 L0.795,26.006 L0.795,28.007 L130.795,28.007 L130.795,25.540 Z"/>
					</svg>
				</div>
			</div>
			<div class="c-slider-controler-container">
				<div class="c-slider-button-next js-swiper-button-next">
					<svg class="c-btn-arrow" xmlns="http://www.w3.org/2000/svg" width="131px" height="28px" viewBox="0 0 131 28">
						<path class="c-btn-arrow-parts" fill-rule="evenodd" d="M130.795,25.540 L108.375,0.537 L107.934,2.580 L128.796,26.006 L0.795,26.006 L0.795,28.007 L130.795,28.007 L130.795,25.540 Z"/>
					</svg>
				</div>
			</div>
		</div>
	</div>
</div>

CSSのコードです。ブラウザ幅1199px以下の場合、1つのスライダーの横幅はwidth: 84.375%を指定します。

.container {
	margin-left: 160px;
	text-align: center;
}
@media screen and (max-width: 1365px) {
	.container {
		margin-left: 114px;
	}
}
@media screen and (max-width: 1199px) {
	.container {
		margin-left: 0;
	}
}
@media screen and (max-width: 1199px) {
	.c-slider-item {
		width: 84.375%;
	}
}
.c-slider-item-link {
	display: block;
	padding-bottom: 50px;
}
@media screen and (max-width: 767px) {
	.c-slider-item-link {
		padding-bottom: 30px;
	}
}
.c-slider-item-photo {
	position: relative;
	overflow: hidden;
	margin-bottom: 30px;
	padding-bottom: 60%;
}
.c-photo-bg {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	background-position: center;
	background-size: cover;
	transition: transform 1s cubic-bezier(0.175, 0.885, 0.32, 1);
}
@media screen and (min-width: 1199px) {
	a:hover .c-photo-bg {
		transform: scale(1.1);
	}
}
.c-slider-list-txt {
	padding: 0 28px;
	text-align: left;
}
.c-slider-list-ttl {
	margin-bottom: 30px;
	font-family: "游明朝", YuMincho, "Hiragino Mincho ProN W3", "ヒラギノ明朝 ProN W3", "Hiragino Mincho ProN", "HG明朝E", "MS P明朝", "MS 明朝", serif;
	font-size: 2rem;
	font-weight: 600;
	line-height: 1.2;
}
.c-slider-controler {
	position: relative;
	display: inline-block;
	margin: 0 auto;
}
.c-slider-pagination {
	display: flex;
	justify-content: center;
	align-items: center;
}
.c-slider-pagination .swiper-pagination-bullet-active {
	background: #fff;
}
.c-slider-pagination .swiper-pagination-bullet {
	margin: 0 4px;
}
.c-slider-controler-container {
	position: absolute;
	top: 0;
	left: 0;
	transform: translateX(-130%);
}
.c-slider-controler-container:last-child {
	right: 0;
	left: auto;
	transform: translateX(130%);
}
.c-slider-button-prev {
	width: 35px;
	height: 28px;
	transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1), opacity 0.5s cubic-bezier(0.175, 0.885, 0.32, 1);
	transform: scale(-1, 1) translateX(0);
	cursor: pointer;
}
.c-slider-button-next {
	width: 35px;
	height: 28px;
	transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1), opacity 0.5s cubic-bezier(0.175, 0.885, 0.32, 1);
	cursor: pointer;
}
@media screen and (min-width: 1199px) {
	.c-slider-button-prev:hover {
		opacity: .6;
		transform: scale(-1, 1) translateX(15%);
	}
	.c-slider-button-next:hover {
		opacity: .6;
		transform: translateX(15%);
	}
}
.c-btn-arrow {
	width: 100%;
	margin: 0;
	transform: translateY(-50%);
}
.c-btn-arrow-parts {
	fill: #fff;
}

JavaScriptのコードです。1つのスライダーの横幅はオプションのslidesPerViewによって自動的に決まりますが、slidesPerView: 'auto'を指定した場合横幅は指定されません。CSSで独自に設定した横幅が適用可能です。
今回はブラウザ幅が1199px以下の場合slidesPerView: 'auto'を指定し、CSSのwidth: 84.375%を適用します。ただし、ブラウザ幅1200px以上の場合slidesPerView: 3のため、ブラウザを横幅1200px以上から1199px以下にリサイズした場合、slidesPerView: 'auto'の指定が有効になりません。再度ページを読み込むと適用されます。

var swiper01 = new Swiper('.js-slider', {
	loop: true,
	slidesPerView: 'auto',
	pagination: {
		el: '.js-swiper-pagination',
		clickable: true,
	},
	navigation: {
		nextEl: '.js-swiper-button-next',
		prevEl: '.js-swiper-button-prev'
	},
	autoplay: {
		delay: 5000,
	},
	breakpoints: {
		1200: {
			slidesPerView: 3,
		}
	}
});

関連記事

2020.09.02

JavaScript

JavaScriptライブラリ layzr.jsの使い方

画像の遅延読み込みができるJavaScriptライブラリlayzr.jsの使い方です。ウィンドウ表示領域外の要素や画像は非表示もしくは代替画像にしておいて、スク…

2020.10.18

JavaScript

swiper.jsでスライドを一定速度で無限ループ

デモページはこちら swiper.jsでスライドを一定速度で無限ループさせます。スライダー全体の横幅を決めて表示スライドを1つにし、はみ出したスライドをCSSで…

2020.10.27

JavaScript

JavaScriptで文字列を検索(indexOf・search・match・test)

デモページはこちら JavaScriptで文字列を検索するメソッドのまとめです。それぞれ記述の仕方と戻り値に特徴があります。 以下のhtmlの構造でテストします…

2020.10.26

JavaScript

JavaScriptのpushメソッドで配列に要素を追加・joinメソッドで配列の要素を連結

デモページはこちら JavaScriptのpushメソッドで配列に要素を追加し、joinメソッドで配列の要素を連結して文字列を生成します。 以下のhtmlの構造…

2020.10.11

JavaScript

JavaScriptライブラリ swiper.jsの使い方

デモページはこちら JavaScriptライブラリのスライダー、swiper.jsの使い方です。レスポンシブ及びタッチデバイスのスワイプにも対応しています。jQ…

上に戻る