<input>タグのラジオボックスを使ったスライダーを作成しました。定番のスライダーなので使いこなせるようになりたいですね。
radioboxを使った画像のスライダー実装方法【CSS】
HTML↓
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>radioboxを使った画像のスライダー実装方法【CSS】</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="slideshow middle">
<div class="slides">
<input type="radio" name="r" id="r1" checked>
<input type="radio" name="r" id="r2">
<input type="radio" name="r" id="r3">
<input type="radio" name="r" id="r4">
<input type="radio" name="r" id="r5">
<div class="slide s1">
<img src="p1.jpg" alt="">
</div>
<div class="slide">
<img src="p2.jpg" alt="">
</div>
<div class="slide">
<img src="p3.jpg" alt="">
</div>
<div class="slide">
<img src="p4.jpg" alt="">
</div>
<div class="slide">
<img src="p5.jpg" alt="">
</div>
</div>
<div class="navigation">
<label for="r1" class="bar"></label>
<label for="r2" class="bar"></label>
<label for="r3" class="bar"></label>
<label for="r4" class="bar"></label>
<label for="r5" class="bar"></label>
</div>
</div>
</body>
</html>
CSS↓
*{
margin: 0;
padding: 0;
box-sizing: border-box;
background: #34495e;
}
.slideshow{
width: 700px;
height: 400px;
overflow: hidden;
}
.middle{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
}
.navigation{
position: absolute;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
display: flex;
background: none;
}
.bar{
width: 50px;
height: 10px;
border: 2px solid #fff;
margin: 6px;
cursor: pointer;
transition: .4s;
background: none;
}
.bar:hover{
background: #ffffff;
}
input[name="r"]{
position: absolute;
visibility: hidden;
}
.slides{
width: 500%;
height: 100%;
display: flex;
}
.slide{
width: 20%;
transition: .6s;
}
.slide img{
width: 100%;
height: 100%;
}
#r1:checked ~ .s1{
margin-left: 0;
}
#r2:checked ~ .s1{
margin-left: -20%;
}
#r3:checked ~ .s1{
margin-left: -40%;
}
#r4:checked ~ .s1{
margin-left: -60%;
}
#r5:checked ~ .s1{
margin-left: -80%;
}
HTMLの解説
今回は<input>タグのtype属性の「radio」を使います。ラジオボックスというやつです。実際のボタンを<label>タグで作成して、それぞれ<input>タグとリンクさせます。<input>の「id」と<label>の「for」がそれぞれリンクしています。
CSSの解説
その1 大まかな構造
一番外のボックスになるのは.slideshowです。このボックスを真ん中に指定し、overflow:hidden;で、はみ出る要素は全て見えないようにします。
<input>タグは機能だけ使いたいので見た目はvisibility:hidden;で非表示にします。
ボタンとなる<label>タグはposition:absolute;でボックスの下の位置に配置しています。
その2 .slidesの幅を設定する
.slides{
width: 500%;
height: 100%;
display: flex;
}
.slideshowのすぐ下の.slidesのwidthを画像の枚数分広げているところがポイントです。こうすることで画像は横に一列に並び、2枚目以降はoverflow:hidden;で見えないようになります。後にこれを横にずらすことでスライドを表現しています。.slideのwidthの20%は500%に対しての20%なので、実際の数値は100%となります。
その2 label設定
#r1:checked ~ .s1{
margin-left: 0;
}
#r2:checked ~ .s1{
margin-left: -20%;
}
#r3:checked ~ .s1{
margin-left: -40%;
}
#r4:checked ~ .s1{
margin-left: -60%;
}
#r5:checked ~ .s1{
margin-left: -80%;
}
<label>タグでボタンを作成しています。これがクリックされた時、.s1つまり一番初めのスライドの位置を画面1枚分ずつ左にずらしていくことでスライドを完成させています。左にずらす方法はいくつかありますが、今回はmargin-leftを使っています。
まとめ
今回はCSSだけでできる定番のスライドを紹介しました。実際に自分でコードを書いたほうがわかりやすいかもしれません。他にもradioboxを使ったスライドの作成方法はいろいろありますが、基本を抑えておけば様々なデザインで手軽に作ることができるので、是非習得しておきましょう。