画像ギャラリーをモーダルウインドウで表示する方法
画像ギャラリーをモーダルウインドウで表示する方法を紹介します。複数のサムネイル画像を一覧表示し、見たい画像をクリックすると、選択した画像をモーダルウインドウ内へ拡大表示できるサンプルです。HTML・CSS・JavaScriptだけで実装しているため、外部ライブラリを使わずに導入できます。
JavaScriptでは、クリックしたサムネイル画像のURLと代替テキストを取得し、モーダル内の拡大画像へ反映します。ひとつのモーダルを複数の画像で共有する構成なので、画像ごとにモーダルを用意する必要はありません。作品ギャラリー、商品写真、施工事例、プロフィール写真、イベント写真など、複数画像をまとめて見せたい場面に利用できます。
ギャラリーの画像はHTMLから追加・差し替えでき、列数、画像サイズ、余白、角丸、影、背景の濃さ、表示アニメーション時間はCSSで調整できます。画面幅に応じて画像が自動的に並び替わるため、スマートフォン・タブレット・PCでも利用しやすいレスポンシブ対応の画像ギャラリーです。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
ボタンを押すとモーダルウインドウが開き、その中に画像ギャラリーが表示されます。
ボタンを押すとモーダルウインドウ内に画像ギャラリーが表示されます。
※ デモでは https://picsum.photos のサンプル画像を使用しています。
コードをコピーして使おう!
<!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="image-gallery-modal_wrap">
<!-- タイトル -->
<h1 class="image-gallery-modal_title">
モーダル画像ギャラリー
</h1>
<!-- 説明文 -->
<p class="image-gallery-modal_text">
ボタンを押すとモーダルウインドウ内に画像ギャラリーを表示します。
</p>
<!-- ギャラリーを開くボタン -->
<button
class="image-gallery-modal_open"
type="button"
data-image-gallery-modal-open>
ギャラリーを開く
</button>
</div>
<!-- モーダル背景 -->
<div
class="image-gallery-modal_overlay"
data-image-gallery-modal-overlay>
<!-- モーダル本体 -->
<div
class="image-gallery-modal_modal"
role="dialog"
aria-modal="true"
aria-labelledby="image-gallery-modal-title">
<!-- モーダルタイトル -->
<div
class="image-gallery-modal_modal-title"
id="image-gallery-modal-title">
旅行フォトギャラリー
</div>
<!--
画像ギャラリー
imagesフォルダ内の画像を差し替えると表示内容を変更できる
画像を追加する場合は同じ形式のimg要素を追加する
-->
<div class="image-gallery-modal_grid">
<!-- ギャラリー画像1 -->
<img
src="images/image-01.jpg"
alt="ギャラリー画像1">
<!-- ギャラリー画像2 -->
<img
src="images/image-02.jpg"
alt="ギャラリー画像2">
<!-- ギャラリー画像3 -->
<img
src="images/image-03.jpg"
alt="ギャラリー画像3">
<!-- ギャラリー画像4 -->
<img
src="images/image-04.jpg"
alt="ギャラリー画像4">
<!-- ギャラリー画像5 -->
<img
src="images/image-05.jpg"
alt="ギャラリー画像5">
<!-- ギャラリー画像6 -->
<img
src="images/image-06.jpg"
alt="ギャラリー画像6">
</div>
<!-- モーダルを閉じるボタン -->
<button
class="image-gallery-modal_close"
type="button"
data-image-gallery-modal-close>
閉じる
</button>
</div>
</div>
<!-- JavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルと、ギャラリーに表示する画像ファイルで構成されています。HTMLでモーダルウインドウと画像ギャラリーの構造を作成し、CSSでモーダルのデザイン、画像の並び方、表示アニメーション、レスポンシブ表示を設定します。JavaScriptでは「ギャラリーを開く」ボタンと「閉じる」ボタンの操作に合わせて、モーダルの表示・非表示を切り替えます。
配布用コードには画像ファイルは含まれていません。利用する画像は各自で6枚用意し、指定されたファイル名でsample/images/フォルダへ配置してください。画像を配置していない状態ではギャラリー画像が表示されないため、index.htmlを開く前に必ず画像ファイルを準備してください。
sample/
├── index.html
├── style.css
├── script.js
└── images/
├── image-01.jpg
├── image-02.jpg
├── image-03.jpg
├── image-04.jpg
├── image-05.jpg
└── image-06.jpg
各ファイルの役割
・index.html:ギャラリーを開く操作エリア、モーダルウインドウ、モーダルタイトル、6枚のギャラリー画像、閉じるボタンを記述します。画像の追加・削除・表示順の変更は、このファイル内のimg要素を編集します。
・style.css:ページ全体、操作エリア、モーダル背景、モーダル本体、画像の3列・2列・1列表示、余白、角丸、影、表示アニメーションを設定します。
・script.js:「ギャラリーを開く」ボタンをクリックしたときにモーダルを表示し、「閉じる」ボタンをクリックしたときに非表示へ戻します。
・images/image-01.jpg〜image-06.jpg:モーダル内の画像ギャラリーへ表示する画像です。これらの画像は配布用コードに含まれていないため、各自で用意してください。
設置方法・使い方
① sampleフォルダを作成し、index.html・style.css・script.jsを配置します。
② sampleフォルダ内へimagesフォルダを作成します。
③ 利用する画像を各自で6枚用意し、image-01.jpg〜image-06.jpgへファイル名を変更します。
④ 6枚の画像をsample/images/へ配置します。
⑤ sample/index.htmlをブラウザで開きます。
⑥ 「ギャラリーを開く」をクリックすると、モーダルウインドウ内に6枚の画像が表示されます。
⑦ 「閉じる」をクリックするとモーダルが閉じます。
カスタマイズできる内容
・表示画像を変更する場合は、sample/images/内のimage-01.jpg〜image-06.jpgを別の画像へ差し替えます。
・画像を追加する場合は、画像ファイルをimagesフォルダへ配置し、index.htmlのimage-gallery-modal_grid内へ同じ形式のimg要素を追加します。
・画像を削除する場合は、index.htmlから不要なimg要素を削除します。
・画像の表示順は、index.html内のimg要素の並び順を変更すると調整できます。
・モーダルタイトルや説明文、ボタンの文字はindex.htmlで変更できます。
・モーダルの横幅、背景色、余白、角丸、影、画像間の余白、列数、ボタンの色はstyle.cssで変更できます。
数値調整
・style.cssの「animation:image-gallery-modal_show .3s ease forwards;」の「.3s」は0.3秒を表します。値を大きくするとモーダルがゆっくり表示され、小さくすると素早く表示されます。
・style.cssの「grid-template-columns:repeat(3,minmax(0,1fr));」の「3」はPC表示時の列数です。値を変更すると1行に並ぶ画像数が変わります。
・style.cssの「gap:16px;」の「16px」は画像同士の間隔です。値を大きくすると間隔が広がり、小さくすると狭くなります。
・style.cssの「max-width:920px;」を変更するとモーダル本体の最大横幅が変わります。
・style.cssの「max-height:90vh;」を変更するとモーダル本体の最大高さが変わります。
レスポンシブ対応
このサンプルはstyle.cssでレスポンシブ対応しています。通常は画像を3列で表示し、画面幅700px以下では2列、480px以下では1列へ切り替えます。モーダル本体には「width:100%;」「max-width:920px;」「max-height:90vh;」「overflow-y:auto;」を設定しているため、スマートフォン・タブレット・PCの画面幅や高さに合わせてサイズが調整され、画像数が多い場合はモーダル内を縦スクロールできます。
コメント