HTML・CSS・JavaScriptでスライダーを作る方法|初心者向けに解説

Webサイトでは、複数の画像やコンテンツを同じ場所で順番に切り替えるスライダーがよく使われます。

ファーストビューやギャラリーなどで見かけることが多く、複雑な機能に見えますが、基本的な仕組みはそれほど難しくありません。

HTMLで複数のスライドを用意し、CSSで表示するスライドを限定し、JavaScriptで「現在どのスライドを表示しているのか」を切り替えていきます。

この記事ではライブラリを使わず、左右のボタンをクリックすると1枚ずつ表示が切り替わるシンプルなスライダーを作ります。

HTMLでスライダーの構造を作る

まずはHTMLで、スライダーの土台を作ります。

今回は3枚の画像と、「前へ」「次へ」の2つのボタンを用意します。

3枚のスライドを用意する

HTMLは次のように記述します。

<div class="slider">
  <div class="slides">
    <div class="slide is-active">
      <img src="image01.jpg" alt="スライド画像1">
    </div>

    <div class="slide">
      <img src="image02.jpg" alt="スライド画像2">
    </div>

    <div class="slide">
      <img src="image03.jpg" alt="スライド画像3">
    </div>
  </div>

  <button class="slider-prev" type="button" aria-label="前のスライド">
    ←
  </button>

  <button class="slider-next" type="button" aria-label="次のスライド">
    →
  </button>
</div>

3つの.slideのうち、最初の要素だけに**.is-active**を付けています。

今回はこのclassを利用して、「現在表示するスライド」を管理します。

JavaScriptで.is-activeを付け替えていくことが、今回のスライダーの基本的な仕組みです。

カルーセルとの構造の違い

前回作ったカルーセルでは、カードを横方向に並べて、その一覧自体をスクロールさせました。

今回のスライダーでは、複数のスライドを用意したうえで、その中から1枚だけを表示します。

つまり、

  • カルーセル:横に並んだコンテンツを移動して見る
  • スライダー:表示するコンテンツを切り替える

という違いがあります。

見た目が似ていても、コードを見ると仕組みの違いが分かりやすくなります。

CSSで1枚のスライドだけを表示する

次はCSSです。

今回は.slideを通常時は非表示にして、.is-activeが付いているスライドだけを表示します。

displayで表示・非表示を切り替える

基本のCSSはこちらです。

.slider {
  position: relative;
  max-width: 800px;
  margin: 0 auto;
}

.slide {
  display: none;
}

.slide.is-active {
  display: block;
}

.slide img {
  display: block;
  width: 100%;
  height: auto;
}

ポイントは、

.slide {
  display: none;
}

.slide.is-active {
  display: block;
}

の部分です。

通常の.slideは非表示ですが、.is-activeが追加された要素だけが表示されます。

JavaScriptでは画像そのものを変更するのではなく、どの要素に.is-activeを付けるのかを変更するわけです。

左右のボタンを配置する

ボタンもCSSでスライダーの左右へ配置してみます。

.slider-prev,
.slider-next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  border: 1px solid #333;
  background: #fff;
  cursor: pointer;
}

.slider-prev {
  left: 16px;
}

.slider-next {
  right: 16px;
}

position: absolute;を使って、スライダーの左右にボタンを配置しています。

親要素である.sliderにposition: relative;を指定しているため、スライダーを基準としてボタンの位置を決めることができます。

JavaScriptでスライドを切り替える

HTMLとCSSだけでも最初の画像は表示できますが、まだ左右のボタンを押しても何も起こりません。

そこでJavaScriptを使い、現在表示しているスライドを切り替えます。

現在のスライド番号を管理する

まず必要な要素を取得します。

const slides = document.querySelectorAll('.slide');
const prevButton = document.querySelector('.slider-prev');
const nextButton = document.querySelector('.slider-next');

let currentIndex = 0;

currentIndexは、現在どのスライドを表示しているのかを記録するための変数です。

JavaScriptでは最初の要素を0として数えるため、

1枚目 → 0
2枚目 → 1
3枚目 → 2

となります。

次に、表示を更新する処理を作ります。

function showSlide(index) {
  slides.forEach((slide) => {
    slide.classList.remove('is-active');
  });

  slides[index].classList.add('is-active');
}

一度すべてのスライドから.is-activeを削除し、表示したいスライドだけに付け直しています。

次へ・前へボタンで切り替える

続いてボタンをクリックしたときの処理です。

nextButton.addEventListener('click', () => {
  currentIndex++;

  if (currentIndex >= slides.length) {
    currentIndex = 0;
  }

  showSlide(currentIndex);
});

prevButton.addEventListener('click', () => {
  currentIndex--;

  if (currentIndex < 0) {
    currentIndex = slides.length - 1;
  }

  showSlide(currentIndex);
});

「次へ」を押すとcurrentIndexを1増やし、「前へ」を押すと1減らしています。

さらに最後のスライドで「次へ」を押した場合は最初へ戻り、最初のスライドで「前へ」を押した場合は最後へ移動します。

これによって、

1 → 2 → 3 → 1 → 2……

と繰り返し切り替えられるスライダーになります。

【まとめ】スライダーは表示する要素をJavaScriptで切り替える

基本的なスライダーは、HTML・CSS・JavaScriptの役割を分けて考えると仕組みを理解しやすくなります。

今回の実装では、

  • HTML:複数のスライドと左右のボタンを用意する
  • CSS:.is-activeが付いたスライドだけ表示する
  • JavaScript:.is-activeを付ける要素を切り替える

という構成で作りました。

前回のカルーセルでは、横並びにしたカードそのものをスクロールさせました。一方、今回のスライダーでは同じ領域に表示するコンテンツを1枚ずつ切り替えています。

ここから自動再生やフェードアニメーション、現在位置を示すドット、スワイプ操作などを追加することもできます。

ただし、機能を増やすほどコードも操作も複雑になります。

まずは**「現在のスライドを管理して、表示する要素を切り替える」**という基本を理解してから、必要な機能だけを追加していくと分かりやすいでしょう。

← Research Notes ← Home