トップ > 制作・開発 > CSSだけでスル~っとスライドさせる方法
制作・開発

CSSだけでスル~っとスライドさせる方法

CSSだけでスル~っとスライドさせる方法

こんにちは、マークアップのmikaです。
今日は、スラダーをCSSだけで実装する方法をご紹介しようと思います。

CSSでは「ある状態にあるとき」の表示を設定します。
例えば、通常の状態(何もしない状態、これがほとんど)、マウスを乗っけた状態(:hover)、すでに訪問した状態(:visited)…などなどです。

スライダーは、クリックしたら次のものが表示されるという動きです。
この場合の「クリックしたら」は、「クリックした状態」ではなく、「クリックした後に」という状況です。「クリックした状態」って一瞬ですよね。:active(クリックした状態)なんかでもいいのでは?とも思うでしょうけど、マウス操作で押して、離した途端に:activeじゃなくなっちゃうと不具合が起きます。

じゃぁ、どうするか。ラジオボタンを使います。ラジオボタンで「チェックされている」という状態を使ってスライダーを実現します。実際に見てみましょう。

▼できあがりサンプル

Step.1

まずは、スライダーの外枠部分をつくります。その中に画像の枚数分、ラジオボタンをつくりま~す。ラジオボタンにはそれぞれidをつけておきます。

<div class="slider">
<input type="radio" name="radio_slider" id="radio_slider1" value="1" checked>
<input type="radio" name="radio_slider" id="radio_slider2" value="2">
<input type="radio" name="radio_slider" id="radio_slider3" value="3">
<input type="radio" name="radio_slider" id="radio_slider4" value="4">
</div>

Step2.

中身を入れるdiv用意して、その中にスライダーの中身を並べます。
サンプルでは、4つの画像を中身として使っています。

<div class="slider">
…
<div class="inner_slider">
<img src="ete1.png" class="img1">
<img src="ete2.png" class="img2">
<img src="ete3.png" class="img3">
<img src="ete4.png" class="img4">
</div>
</div>

Step3.

中身にラジオボタンのlabelをつけてあげます。このときに、自分をクリックしたら、次のラジオボタンがチェックされるように、1つ後ろのラジオボタンのラベルをつけます。最後の中身は、クリックしたら最初に戻るように1つ目のラジオボタンのラベルにしましょう。これでhtmlは完成!

<div class="inner_slider">
<label for="radio_slider2"><img src="ete1.png" class="img1"></label>
<label for="radio_slider3"><img src="ete2.png" class="img2"></label>
<label for="radio_slider4"><img src="ete3.png" class="img3"></label>
<label for="radio_slider1"><img src="ete4.png" class="img4"></label>
</div>

Step4.

それでは、CSSを書いていきましょう。
外枠のdivは、中身1個分サイズに指定しましょう。
余計なものが見えちゃいけないので、overflow: hiddenにします。
さらに、ラジオボタンそのものは必要ないので隠しちゃいます。

.slider {
width: 200px;
height: 150px;
overflow: hidden;
}
input[type=radio] {
display: none;
}

Step5.

スライダーの中身を、absoluteで等間隔にしましょう。

.inner_slider {
position: relative;
}.img1 {
position: absolute;
left: 0;
top: 0;
}
.img2 {
position: absolute;
left: 200px;
top: 0;
}
/* .img3、.img4も同じように… */

Step6.

最後に、各ラジオボタンがcheckedのときのinner_sliderの位置を指定します。

.inner_slider {
position: relative;
width: 800px;
left: 0;
top: 0;
transition: all .3s ease-in-out;
}
#radio_slider1:checked ~ .inner_slider {
transform: translateX(0);
}
#radio_slider2:checked ~ .inner_slider {
transform: translateX(-200px);
}
/* .img3、.img4も同じように… */

(サンプルソースでは、ベンダープリフィックスは省略しています。)

どうでしたか?
いつもはJavascritpで実装されている方が多いと思いますが、CSSでもできるんですよ!<(`^´)>キリリッ!
JSが出来ない方もいらっしゃると思いますし、その度に苦しんだり、そのためだけにできる人にお願いするのは心苦しいですもんね(´・ω・`)

マークアップのみなさん、是非、チャレンジしてみてください。



ども
etekichi
etekichi's tail
etekichi's banana

いんふぉま~しゃる