
CSSだけでスライダーを作る
自動で画像が切り替わるスライダー(カルーセル)はよくみますね。
特にFV(ファーストビュー)やMV(メインビュー)、商品紹介などで使われることがあります。
今回、手動で動かすCSSだけでスライダーの実装を依頼されたので実装しました。
CSSだけでスライダーを作る方法を解説していきます。
基本HTML
<div class="wrap">
<ul class="list">
<li class="item">
<img src="https://beiz.jp/images_S/sky/sky_00010.jpg" alt="">
<p>テキスト</p>
</li>
<li class="item">
<img src="https://photo53.com/img/sora12.jpg" alt="">
<p>テキスト</p>
</li>
<li class="item">
<img src="https://image.ganref.jp/photos/members/tramping/5af5095cde706756e020a274baa23b9f_3.jpg" alt="">
<p>テキスト</p>
</li>
</ul>
</div>
よくあるスタイルです。
画像はフリーの「空」を使用しています。
CSSで装飾していきます
.wrap {
// X軸にスクロールし、スクロールアクション終了後にスナップ位置に合わせる
scroll-snap-type: x mandatory;
margin: 0 auto;
padding: 30px 0;
min-width: 600px;
// 行の折り返しをさせない
white-space: nowrap;
// X軸方向にスクロールさせる
overflow-x: scroll;
}
.item {
// スナップ位置を中央に指定
scroll-snap-align: center;
display: inline-block;
margin-left: 10px;
width: 30%;
// wrapのwhite-space指定を解除
white-space: normal;
background-color: #f4f4f4;
overflow: hidden;
}
img {
display: block;
width: 100%;
height: auto;
}
p {
margin: 0;
padding: 20px;
font-weight: 700;
text-align: center;
text-transform: uppercase;
}
解説していきます。
wrap内
scroll-snap-type: x mandatory; は、X軸にスクロールし、スクロールアクション終了後にスナップ位置に合わせます。
white-space: nowrap; は、行の折り返しをさせないようにします。
overflow-x: scroll; は、X軸方向にスクロールさせます。
これだけでも横スクロールしますが、縦並びのままです。
item内
display: inline-block; で、横並びになりますがスクロールしません。
そこで scroll-snap-align: center; でスナップ位置を中央に指定します。
そして white-space: normal; で、wrap の white-space 指定を解除します。
このままだと画像が縦長のままなので、画像の大きさを指定します。
img内
横幅は全体(600px)の30%と .item の中で指定しているので、img は100%にしても .item 以上にはなりません。
高さ auto にしています。
これで画像の大きさが整いました。
まとめ
CodePenで書くとこのようになります。
これはスマホサイズの425pxで見てもらえるとわかりやすいです。
というのも最大幅600pxですから、PCですと当然画面内に収まってしまいます。
See the Pen Untitled by 奥谷 晋司 (@itpyduhk-the-encoder) on CodePen.