基本のスライダーを作る方法
基本のスライダーを作る方法を紹介します。このサンプルでは、HTML・CSS・JavaScriptだけを使って、左右のボタンやドットナビゲーションでスライドを切り替えられるシンプルなスライダーを実装しています。1枚ずつスライドを表示する基本構成になっているため、初めてスライダーを作る方でも仕組みを理解しながら導入できます。
スライダーはトップページのメインビジュアルやお知らせ、サービス紹介、商品紹介、キャンペーンバナーなど、限られたスペースで複数の情報を順番に表示したい場面で活用できます。左右のボタンによる移動とドットナビゲーションによる直接移動に対応しており、現在表示しているスライドも分かりやすく確認できます。スマートフォン・タブレット・PCでも利用しやすいレスポンシブ対応です。
掲載しているコードはHTML・CSS・JavaScriptをファイルごとに分けているため、デザインやスライド内容を変更しながらカスタマイズしやすい構成になっています。スライド内の見出しや説明文、色、余白、ボタンのデザインなども自由に変更できるため、実際のWebサイトにも導入しやすい基本的なスライダーとして利用できます。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項
本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
基本のスライダー
左右のボタンまたはドットをクリックすると、スライドを1枚ずつ切り替えられます。
HTML
HTMLでスライダー全体と表示するスライドを配置します。
CSS
CSSでスライド、ボタン、ドットのデザインを設定します。
JavaScript
JavaScriptでスライドを1枚ずつ左右へ切り替えます。
左右のボタンまたはドットをクリックすると、3枚のスライドを順番に確認できます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン表示対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>基本のスライダー</title>
<!-- CSSファイルを読み込み -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- スライダー全体 -->
<div class="basic-slider_wrap">
<!-- タイトル -->
<div class="basic-slider_title">
基本のスライダー
</div>
<!-- 説明文 -->
<p class="basic-slider_text">
左右のボタンまたはドットをクリックすると、スライドを1枚ずつ切り替えられます。
</p>
<!-- スライダー操作エリア -->
<div class="basic-slider_area">
<!-- 前のスライドへ移動するボタン -->
<button
class="basic-slider_button basic-slider_prev"
type="button"
aria-label="前のスライド">
‹
</button>
<!-- スライド表示エリア -->
<div class="basic-slider_view">
<!-- 3枚のスライドを横並びにする要素 -->
<div class="basic-slider_track">
<!-- 1枚目のスライド -->
<div class="basic-slider_slide">
<!-- スライド見出し -->
<div class="basic-slider_slide-title">
HTML
</div>
<!-- スライド説明文 -->
<p class="basic-slider_slide-text">
HTMLでスライダー全体と表示するスライドを配置します。
</p>
</div>
<!-- 2枚目のスライド -->
<div class="basic-slider_slide">
<!-- スライド見出し -->
<div class="basic-slider_slide-title">
CSS
</div>
<!-- スライド説明文 -->
<p class="basic-slider_slide-text">
CSSでスライド、ボタン、ドットのデザインを設定します。
</p>
</div>
<!-- 3枚目のスライド -->
<div class="basic-slider_slide">
<!-- スライド見出し -->
<div class="basic-slider_slide-title">
JavaScript
</div>
<!-- スライド説明文 -->
<p class="basic-slider_slide-text">
JavaScriptでスライドを1枚ずつ左右へ切り替えます。
</p>
</div>
</div>
</div>
<!-- 次のスライドへ移動するボタン -->
<button
class="basic-slider_button basic-slider_next"
type="button"
aria-label="次のスライド">
›
</button>
</div>
<!-- ドットナビゲーション -->
<div class="basic-slider_dots">
<!-- 1枚目を表示するドット -->
<button
class="basic-slider_dot is-active"
type="button"
aria-label="1枚目のスライドを表示">
</button>
<!-- 2枚目を表示するドット -->
<button
class="basic-slider_dot"
type="button"
aria-label="2枚目のスライドを表示">
</button>
<!-- 3枚目を表示するドット -->
<button
class="basic-slider_dot"
type="button"
aria-label="3枚目のスライドを表示">
</button>
</div>
</div>
<!-- JavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
/* ページ全体 */
body{
margin:0; /* ブラウザ標準の外側余白を削除 */
padding:40px 20px; /* 上下40px・左右20px。値を大きくすると画面端との間隔が広がる */
background:#ffffff; /* ページ全体の背景色 */
color:#111827; /* ページ全体の基本文字色 */
font-family:sans-serif; /* ページ全体で使用するフォント */
}
/* スライダー全体と子要素 */
.basic-slider_wrap,
.basic-slider_wrap *{
box-sizing:border-box; /* paddingとborderを要素サイズへ含める */
}
/* スライダー全体 */
.basic-slider_wrap{
width:100%; /* 画面幅に合わせて横幅を縮小 */
max-width:760px; /* 最大横幅。値を大きくすると全体が横に広がる */
margin:40px auto; /* 上下40pxの余白を付けて左右中央へ配置 */
padding:32px; /* 内側余白。値を大きくすると内容と枠線の間隔が広がる */
border:1px solid #dbe4f3; /* 全体を囲む枠線 */
border-radius:20px; /* 全体の角丸。値を大きくすると丸みが強くなる */
background:#f8fbff; /* スライダー全体の背景色 */
}
/* タイトル */
.basic-slider_title{
margin:0 0 12px; /* 下側12pxの余白。値を大きくすると説明文との間隔が広がる */
color:#111827; /* タイトルの文字色 */
font-size:22px; /* タイトルの文字サイズ。値を大きくすると文字が大きくなる */
font-weight:700; /* タイトルを太字にする */
line-height:1.5; /* タイトルの行間 */
text-align:center; /* タイトルを中央揃えにする */
}
/* 説明文 */
.basic-slider_text{
margin:0 0 28px; /* 下側28pxの余白。値を大きくするとスライドとの間隔が広がる */
color:#4b5563; /* 説明文の文字色 */
font-size:16px; /* 説明文の文字サイズ */
line-height:1.8; /* 説明文の行間。値を大きくすると行間が広がる */
text-align:center; /* 説明文を中央揃えにする */
}
/* スライダー操作エリア */
.basic-slider_area{
display:flex; /* 前へボタン・スライド・次へボタンを横並びにする */
align-items:center; /* 縦方向を中央揃えにする */
gap:18px; /* ボタンとスライドの間隔。値を大きくすると間隔が広がる */
}
/* 前へボタンと次へボタン */
.basic-slider_button{
display:flex; /* 矢印をボタン中央へ配置する */
align-items:center; /* 矢印を縦方向中央へ揃える */
justify-content:center; /* 矢印を横方向中央へ揃える */
flex-shrink:0; /* 画面幅が狭くてもボタンを縮小させない */
width:52px; /* ボタンの横幅。値を大きくするとボタンが大きくなる */
height:52px; /* ボタンの高さ。値を大きくするとボタンが大きくなる */
padding:0; /* ブラウザ標準の内側余白を削除 */
border:none; /* ブラウザ標準の枠線を削除 */
border-radius:50%; /* ボタンを円形にする */
background:#2563eb; /* ボタンの背景色 */
color:#ffffff; /* 矢印の文字色 */
font-family:Arial,sans-serif; /* 矢印表示に使用するフォント */
font-size:30px; /* 矢印の文字サイズ。値を大きくすると矢印が大きくなる */
font-weight:700; /* 矢印を太くする */
line-height:1; /* 矢印の上下位置を整える */
cursor:pointer; /* マウスカーソルを指型へ変更 */
transition:
background-color .3s ease,
opacity .3s ease;
/*
0.3秒で背景色と透明度を切り替える。
値を大きくするとゆっくり、小さくすると速くなる。
*/
}
/* 操作できないボタン */
.basic-slider_button:disabled{
background:#cbd5e1; /* 無効時の背景色 */
opacity:.7; /* 無効時の透明度。値を小さくすると薄くなる */
cursor:default; /* 通常のマウスカーソルを表示 */
}
/* スライド表示エリア */
.basic-slider_view{
flex:1; /* 左右ボタンを除いた横幅いっぱいに表示 */
min-width:0; /* 横幅が狭い場合でも正しく縮小できるようにする */
overflow:hidden; /* 表示中以外のスライドを隠す */
border-radius:18px; /* 表示エリアの角丸 */
}
/* スライドを横並びにする要素 */
.basic-slider_track{
display:flex; /* 3枚のスライドを横並びにする */
width:100%; /* 表示エリアの横幅に合わせる */
transition:transform .3s ease;
/*
0.3秒でスライドを横へ切り替える。
値を大きくするとゆっくり、小さくすると速くなる。
*/
}
/* 各スライド */
.basic-slider_slide{
display:flex; /* 内容を縦方向中央へ配置する */
flex:0 0 100%; /* 各スライドを表示エリアと同じ横幅にする */
width:100%; /* スライドを表示エリアの横幅いっぱいにする */
min-height:220px; /* 最小高さ。値を大きくするとスライドが高くなる */
padding:36px 48px; /* 上下36px・左右48px。左右を広くしてボタンから文字を離す */
border:1px solid #dbe4f3; /* スライドの枠線 */
border-radius:18px; /* スライドの角丸。値を大きくすると丸みが強くなる */
background:#ffffff; /* スライドの背景色 */
flex-direction:column; /* 見出しと説明文を縦方向へ並べる */
justify-content:center; /* 内容を縦方向中央へ配置する */
}
/* スライド見出し */
.basic-slider_slide-title{
margin:0 0 16px; /* 下側16pxの余白。値を大きくすると説明文との間隔が広がる */
color:#111827; /* 見出しの文字色 */
font-size:30px; /* 見出しの文字サイズ。値を大きくすると文字が大きくなる */
font-weight:700; /* 見出しを太字にする */
line-height:1.5; /* 見出しの行間 */
}
/* スライド説明文 */
.basic-slider_slide-text{
margin:0; /* ブラウザ標準の外側余白を削除 */
color:#4b5563; /* 説明文の文字色 */
font-size:16px; /* 説明文の文字サイズ */
line-height:1.8; /* 説明文の行間。値を大きくすると行間が広がる */
}
/* ドットナビゲーション */
.basic-slider_dots{
display:flex; /* ドットを横並びにする */
align-items:center; /* ドットを縦方向中央へ揃える */
justify-content:center; /* ドットを横方向中央へ配置する */
gap:10px; /* ドット同士の間隔。値を大きくすると間隔が広がる */
margin-top:24px; /* スライドとドットの間隔。値を大きくすると広がる */
}
/* 各ドット */
.basic-slider_dot{
width:12px; /* ドットの横幅。値を大きくするとドットが大きくなる */
height:12px; /* ドットの高さ。値を大きくするとドットが大きくなる */
padding:0; /* ブラウザ標準の内側余白を削除 */
border:none; /* ブラウザ標準の枠線を削除 */
border-radius:50%; /* ドットを円形にする */
background:#cbd5e1; /* 通常時のドット背景色 */
cursor:pointer; /* マウスカーソルを指型へ変更 */
transition:background-color .3s ease;
/*
0.3秒でドットの色を切り替える。
値を大きくするとゆっくり、小さくすると速くなる。
*/
}
/* 表示中のスライドに対応するドット */
.basic-slider_dot.is-active{
background:#2563eb; /* 選択中のドット背景色 */
}
/* 画面幅640px以下 */
@media(max-width:640px){
/* ページ全体 */
body{
padding:24px 12px; /* スマートフォンでは画面端の余白を小さくする */
}
/* スライダー全体 */
.basic-slider_wrap{
margin:24px auto; /* スマートフォンでは上下余白を小さくする */
padding:24px 18px; /* スマートフォンでは内側余白を小さくする */
}
/* スライダー操作エリア */
.basic-slider_area{
gap:8px; /* スマートフォンではボタンとの間隔を小さくする */
}
/* 前へボタンと次へボタン */
.basic-slider_button{
width:42px; /* スマートフォンではボタンの横幅を小さくする */
height:42px; /* スマートフォンではボタンの高さを小さくする */
font-size:25px; /* スマートフォンでは矢印を少し小さくする */
}
/* 各スライド */
.basic-slider_slide{
min-height:190px; /* スマートフォン用の最小高さ */
padding:28px 24px; /* スマートフォンでは内側余白を小さくする */
}
/* スライド見出し */
.basic-slider_slide-title{
font-size:24px; /* スマートフォンでは見出しを小さくする */
}
}
// スライダー全体を取得
const basicSlider=document.querySelector(
".basic-slider_wrap"
);
// スライドを横並びにしている要素を取得
const basicSliderTrack=basicSlider.querySelector(
".basic-slider_track"
);
// すべてのスライドを取得
const basicSliderSlides=basicSlider.querySelectorAll(
".basic-slider_slide"
);
// 前のスライドへ移動するボタンを取得
const basicSliderPrev=basicSlider.querySelector(
".basic-slider_prev"
);
// 次のスライドへ移動するボタンを取得
const basicSliderNext=basicSlider.querySelector(
".basic-slider_next"
);
// すべてのドットを取得
const basicSliderDots=basicSlider.querySelectorAll(
".basic-slider_dot"
);
// 現在表示しているスライド番号
// 0は1枚目、1は2枚目、2は3枚目を表す
let basicSliderIndex=0;
// スライダーの表示を更新する共通処理
function updateBasicSlider(){
// 現在のスライド番号に合わせて横へ移動
basicSliderTrack.style.transform=
"translateX(-"+(basicSliderIndex*100)+"%)";
// 各ドットの選択状態を更新
basicSliderDots.forEach(function(dot,index){
// 表示中のスライドに対応するドットだけ選択状態にする
dot.classList.toggle(
"is-active",
index===basicSliderIndex
);
});
// 1枚目では前へボタンを無効にする
basicSliderPrev.disabled=
basicSliderIndex===0;
// 3枚目では次へボタンを無効にする
basicSliderNext.disabled=
basicSliderIndex===basicSliderSlides.length-1;
}
// 前へボタンをクリックした時
basicSliderPrev.addEventListener("click",function(){
// 1枚目より前へ移動しないようにする
if(basicSliderIndex>0){
// スライド番号を1つ戻す
basicSliderIndex--;
// 表示を更新
updateBasicSlider();
}
});
// 次へボタンをクリックした時
basicSliderNext.addEventListener("click",function(){
// 最後のスライドより先へ移動しないようにする
if(basicSliderIndex<basicSliderSlides.length-1){
// スライド番号を1つ進める
basicSliderIndex++;
// 表示を更新
updateBasicSlider();
}
});
// 各ドットへクリック処理を設定
basicSliderDots.forEach(function(dot,index){
// ドットをクリックした時
dot.addEventListener("click",function(){
// クリックしたドットに対応するスライド番号へ変更
basicSliderIndex=index;
// 表示を更新
updateBasicSlider();
});
});
// ページを開いた時の初期表示を設定
updateBasicSlider();
コードをコピーする場合
使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。
サンプル一式を取得する場合
HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成された基本的なスライダーです。HTMLではスライダー本体や3枚のカード、左右の操作ボタンを配置し、CSSでレイアウトやデザインを整えています。JavaScriptでは左右ボタンによるスライド切り替えを実装しており、1枚ずつ横へ移動するシンプルな動作を確認できます。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlではスライダー全体の構造を作成します。カードの見出しや説明文、左右ボタンなどを配置しており、カードの内容を自由に変更できます。
style.cssではスライダーの横幅、カードのデザイン、ボタンの位置や色、余白、角丸など見た目全体を設定します。レスポンシブ表示もこのファイルで行います。
script.jsでは左右ボタンをクリックしたときのスライド切り替え処理を管理します。現在表示中のカード番号を保持し、最初や最後ではそれ以上移動しない基本動作を実装しています。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置してください。同じ階層へ保存したあと、sample/index.htmlをブラウザで開くと動作を確認できます。左右のボタンをクリックするとカードを1枚ずつ切り替えて表示できます。
カスタマイズできる内容
index.htmlではカードの見出しや説明文、カード枚数を変更できます。style.cssではスライダー全体の横幅、カードサイズ、背景色、文字色、余白、角丸、ボタンの色や大きさを調整できます。script.jsではスライド枚数や切り替え処理を変更できます。
数値調整
style.css
max-width:760px;
スライダー全体の最大横幅です。値を大きくすると全体が広くなり、小さくするとコンパクトになります。
padding:32px;
スライダー全体の内側余白です。値を大きくすると余白が広がり、小さくすると詰まった表示になります。
border-radius:18px;
カードの角丸です。値を大きくすると丸みが強くなり、小さくすると四角いデザインになります。
width:52px;
左右ボタンの大きさです。値を変更するとボタンサイズが変わります。
transition:transform .3s ease;
スライドの切り替え時間です。0.3秒で移動します。値を大きくするとゆっくり、小さくすると速く切り替わります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-widthにより画面幅に合わせてスライダー全体が自動調整されます。また、media queryでスマートフォン表示時の余白やボタンサイズを調整しているため、スマートフォン・タブレット・PCでも利用できます。
コメント