フェードで切り替わるスライダーを作る方法
フェードで切り替わるスライダーを作る方法を紹介します。このサンプルでは、複数の画像を同じ表示領域へ重ねて配置し、JavaScriptで表示する画像を順番に変更します。横方向へ画像を移動させるのではなく、現在の画像が徐々に消えながら次の画像が表示されるため、動きの少ない落ち着いた画像スライダーを作成できます。
Webサイトのメインビジュアル、店舗や施設の写真紹介、商品イメージ、作品ギャラリーなど、複数の画像を同じ場所で順番に見せたい場面に利用できます。左右のボタンをクリックすると前後の画像へ移動でき、画像下のドットをクリックすると表示したい画像へ直接切り替えられます。最初と最後の画像を越えない基本的なスライダーとして実装しています。
HTMLでは表示する画像や枚数を変更でき、CSSでは画像の表示比率、角丸、フェード時間、ボタンやドットのサイズなどを調整できます。JavaScriptでは現在表示している画像を管理し、ボタンやドットの操作に合わせて表示状態を切り替えます。画面幅に合わせてスライダーが縮小されるため、スマートフォン・タブレット・PCで利用できるフェードスライダーのサンプルとして活用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
左右のボタンまたは画像下のドットをクリックすると、画像がフェードしながら切り替わります。
コードをコピーして使おう!
<!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="fade-slider_area">
<!-- 前の画像へ移動するボタン -->
<button class="fade-slider_button fade-slider_prev" type="button" aria-label="前の画像">
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M15 18l-6-6 6-6"></path>
</svg>
</button>
<!-- 画像表示エリア -->
<div class="fade-slider_view">
<!--
【画像の設定方法】
スライダーで使用する画像はZIPに含まれていません。
sampleフォルダ内にimagesフォルダを作成し、
image1.png〜image3.pngを配置してください。
-->
<!-- 1枚目の画像 -->
<img
class="fade-slider_image is-active"
src="images/image1.png"
alt="1枚目の画像">
<!-- 2枚目の画像 -->
<img
class="fade-slider_image"
src="images/image2.png"
alt="2枚目の画像">
<!-- 3枚目の画像 -->
<img
class="fade-slider_image"
src="images/image3.png"
alt="3枚目の画像">
</div>
<!-- 次の画像へ移動するボタン -->
<button class="fade-slider_button fade-slider_next" type="button" aria-label="次の画像">
<svg viewBox="0 0 24 24" aria-hidden="true">
<path d="M9 6l6 6-6 6"></path>
</svg>
</button>
</div>
<!-- 画像選択用ドット -->
<div class="fade-slider_dots" aria-label="画像を選択">
<button class="fade-slider_dot is-active" type="button" aria-label="1枚目の画像"></button>
<button class="fade-slider_dot" type="button" aria-label="2枚目の画像"></button>
<button class="fade-slider_dot" type="button" aria-label="3枚目の画像"></button>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptと3枚のPNG画像で構成されています。HTMLでは3枚の画像、左右の切り替えボタン、画像を直接選択する3つのドットを配置します。CSSでは画像を同じ位置へ重ねて配置し、透明度を変更することでフェード表示を実現します。JavaScriptでは現在表示している画像番号を管理し、左右のボタンやドットの操作に合わせて表示する画像を切り替えます。画像は利用者自身で用意し、sampleフォルダ内のimagesフォルダへ配置します。
sample/
├── index.html
├── style.css
├── script.js
└── images/
├── image1.png
├── image2.png
└── image3.png
各ファイルの役割
index.htmlはスライダー本体を構成するファイルです。前後へ移動する左右のボタン、3枚の画像、画像を直接選択する3つのドットを配置しています。画像はimages/image1.png、images/image2.png、images/image3.pngを参照します。
style.cssはスライダーのレイアウトとフェード表示を設定するファイルです。画像表示エリアを16:9にし、3枚の画像を同じ位置へ重ねて配置します。通常の画像をopacity:0;、表示中の画像をopacity:1;にすることで、透明度を利用したフェード切り替えを行います。左右のボタン、SVG矢印、ドット、スマートフォン表示もこのファイルで設定します。
script.jsは表示中の画像を管理し、スライダーを操作するファイルです。左右のボタンをクリックすると前後の画像へ移動し、ドットをクリックすると対応する画像へ直接切り替えます。最初の画像を表示しているときは前ボタン、最後の画像を表示しているときは次ボタンを無効にします。
imagesフォルダにはスライダーで使用する画像を配置します。このサンプルではimage1.png、image2.png、image3.pngの3枚を使用します。画像ファイルは利用者自身で用意してください。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置し、同じsampleフォルダ内へimagesフォルダを作成します。利用者自身で用意した3枚のPNG画像をimage1.png、image2.png、image3.pngというファイル名でimagesフォルダへ配置してください。
すべてのファイルと画像を配置したあと、sample/index.htmlをブラウザで開きます。index.htmlから同じ階層のstyle.cssとscript.jsを読み込み、imagesフォルダ内の画像を表示します。左右のボタンをクリックすると前後の画像へフェードしながら切り替わり、画像下のドットをクリックすると選択した画像へ直接切り替えられます。
カスタマイズできる内容
index.htmlでは表示する画像のパスとalt属性を変更できます。別の画像を使用する場合はimagesフォルダ内のPNG画像を差し替えるか、srcを使用する画像のファイル名に合わせて変更してください。画像を増減する場合は画像要素だけでなく、対応するドットも同じ数になるように追加または削除します。
style.cssでは左右ボタンのサイズと色、SVG矢印のサイズと太さ、画像表示領域の縦横比、画像の角丸、フェード時間、ドットのサイズ・間隔・色などを変更できます。画像にはobject-fit:cover;を指定しているため、元画像の縦横比が16:9ではない場合、表示領域を埋めるために上下または左右の一部が切り取られることがあります。
数値調整
style.css
padding:40px 20px;
ページ全体の余白です。上下40px・左右20pxを指定しています。値を大きくすると画面端との間隔が広がり、小さくすると狭くなります。
gap:18px;
左右のボタンと画像表示エリアの間隔です。値を大きくすると間隔が広がり、小さくすると近くなります。
48px
PC表示で使用する左右ボタンの横幅と高さです。値を大きくするとボタンが大きくなり、小さくすると小さくなります。
width:24px;・height:24px;
PC表示で使用するSVG矢印のサイズです。値を大きくすると矢印が大きくなり、小さくすると小さくなります。
stroke-width:2;
SVG矢印の線の太さです。値を大きくすると線が太くなり、小さくすると細くなります。
aspect-ratio:16 / 9;
画像表示領域の縦横比です。16:9の横長表示にしています。比率を変更すると画像表示領域の形が変わります。
border-radius:16px;
画像表示領域の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
transition:opacity .5s ease;
画像をフェードさせる時間です。0.5秒で透明度を切り替えます。値を大きくするとゆっくり切り替わり、小さくすると速く切り替わります。
gap:10px;
ドット同士の間隔です。値を大きくするとドットの間隔が広がり、小さくすると狭くなります。
margin-top:24px;
画像とドットの間隔です。値を大きくするとドットが画像から離れ、小さくすると近くなります。
width:12px;・height:12px;
各ドットのサイズです。値を大きくするとドットが大きくなり、小さくすると小さくなります。
@media (max-width:640px)
スマートフォン向け表示へ切り替える基準となる画面幅です。640px以下になるとページ余白、ボタンと画像の間隔、ボタン、SVG矢印のサイズを変更します。
padding:24px 12px;
640px以下で使用するページ全体の余白です。24pxは上下、12pxは左右の余白を表します。
gap:8px;
640px以下で使用する左右ボタンと画像表示エリアの間隔です。PC表示の18pxより狭くして、画像を表示する横幅を確保します。
42px
640px以下で使用する左右ボタンの横幅と高さです。PC表示の48pxから小さくし、限られた画面幅でも画像表示領域を確保します。
22px
640px以下で使用するSVG矢印の横幅と高さです。PC表示の24pxから小さくしています。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssの.fade-slider_areaへwidth:100%;を指定し、画像表示エリアにはflex:1;を設定しているため、設置する場所の横幅に合わせて画像表示部分が伸縮します。画像にはwidth:100%;とheight:100%;を指定し、16:9の表示領域いっぱいに表示します。
画面幅640px以下ではメディアクエリを使用し、ページ全体の余白を24px 12px、左右ボタンと画像表示エリアの間隔を8px、左右ボタンを42px、SVG矢印を22pxへ変更します。PC表示より操作部分をコンパクトにして画像表示領域を確保することで、スマートフォン・タブレット・PCで利用できる構成にしています。
コメント