Webサイトを作るときに大切なのは、見た人に「使いやすい」と思ってもらえるデザインです。
特に商品ページやギャラリーなどでは、画像を大きく見られるだけでユーザーの満足度がぐっと上がります。
たとえば「クリックすると画像が拡大表示される」仕組み。
見た目はシンプルですが、ユーザーにとってはとても便利で、実際に多くのサイトで採用されています。
私自身も最初に学んだときは「こんな短いコードで実現できるんだ!」と驚きました。
そこでこの記事では、初心者でもコピペでそのまま使える「画像拡大モーダル」の作り方を、丁寧に解説していきます。
- モーダルってそもそも何?
- クリックで画像を拡大表示する方法(HTML・CSS・JavaScript)
- コピペOK!すぐに試せるサンプルコード付き
まずは基本の仕組みを理解して、実際に自分のサイトに組み込んでみましょう。
「見やすい!」と感じてもらえるだけで、あなたのサイトの印象もワンランクアップしますよ。
モーダルってそもそも何?
Webサイトを見ていて、画面の中央にポップアップのようなウィンドウが出てきて、背景が暗くなった経験はありませんか?
それが「モーダル」と呼ばれる仕組みです。
モーダルは、ユーザーの操作を一時的に中断して「これを見てほしい!」という情報を強調するために使われます。
特にECサイトやアプリでは定番のUIで、多くの場面で利用されています。
モーダルの特徴

- ユーザーの注意を引きやすい
背景を暗くして前面に表示されるため、自然と視線がモーダルに集中します。
重要なメッセージや操作を確実に伝えることができます。 - シンプルなデザインが基本
モーダルは必要な情報やボタンだけを配置するのが一般的。
余計な要素がないため、ユーザーも迷わず操作できます。 - 再利用しやすい
一度作れば、ログイン画面や確認ダイアログ、画像拡大など、さまざまな場面で使い回せます。
モーダルが使われる主なシーン
モーダルは、以下のようなシーンでよく使用されます。
画像の拡大表示
今回紹介する機能
確認ダイアログ
「本当に削除しますか?」といった重要な確認
フォーム入力
ログインや問い合わせ画面
メッセージ通知
「登録が完了しました!」などのアラート
特に 画像拡大モーダル はECサイトやポートフォリオで大活躍。
ユーザーが商品や作品の細部までチェックできるので、購買意欲やサイト滞在時間アップにつながることもあります。
モーダルの基本を理解したところで、次は 「実際に画像拡大モーダルを作る方法」 を見ていきましょう。
実際に作ってみよう!画像拡大モーダル
ここからは、実際に「画像をクリックすると拡大表示されるモーダル」を作っていきましょう。
まずは完成イメージをご覧ください。
完成イメージ(このページ内で確認できます)
以下のサンプルは、このページ内で動作します。
画像をクリックして、挙動を確認してみてください。
- クリックすると画像が拡大して背景が暗くなります
- モーダルの外側や「×」を押すと閉じます
- HTML/CSS/JavaScriptだけでシンプルに実装できます
後ほどコードを貼ります。まずは「どんな動きになるか」を体験してから実装に進むと、理解がスムーズです。
実際に動きを確認する(CodePen)
記事内のサンプルだけでなく、CodePenでも動作を確認できます。
その場でコードを書き換えて挙動を試したい方におすすめです👇
See the Pen モーダルで画像を拡大表示 by Ariii (@ariii-cdp) on CodePen.
HTML・CSS・JavaScriptでの実装してみよう
ここからは、実際に「画像をクリックすると拡大表示されるモーダル」を作っていきます。
HTML → CSS → JavaScript の順番でコードを書き、最後にまとめます。
1. HTMLの基本構造
まずは、サムネイル画像とモーダルの土台を作ります。
<!-- 画像のグリッド -->
<div class="image-grid">
<img
class="thumbnail"
src="https://plus.unsplash.com/premium_photo-1680172800933-ae8462274162?q=80&w=300&h=300&auto=format&fit=crop"
alt="画像1"
/>
<img
class="thumbnail"
src="https://plus.unsplash.com/premium_photo-1722686461601-b2a018a4213b?q=80&w=300&h=300&auto=format&fit=crop"
alt="画像2"
/>
<img
class="thumbnail"
src="https://images.unsplash.com/photo-1495147466023-ac5c588e2e94?q=80&w=300&h=300&auto=format&fit=crop"
alt="画像3"
/>
</div>
<!-- モーダル -->
<div id="myModal" class="modal">
<span class="close">×</span> <!-- 閉じるボタン -->
<img class="modal-content" id="js-modal-img" /> <!-- 拡大画像 -->
<div id="caption"></div> <!-- 画像のキャプション -->
</div>.image-grid:サムネイルを並べる枠.thumbnail:クリック対象のサムネイル画像
src:表示したい画像のURLが入ります。
alt:は画像の説明文(後でキャプションとして表示される)#myModal:拡大画像を表示するモーダル全体を囲む要素.close:「×」ボタン。
中身の×はHTMLの文字参照で、実際の画面上では「×」として表示されます。
モーダルやポップアップを閉じるための定番の記号です。#js-modal-img:拡大表示される画像を差し込む領域。クリックしたサムネイルがここに反映されます。#caption:画像の説明文(alt属性の内容)が表示されるエリア。
この段階で サムネイル → モーダル → 閉じるボタン → 拡大画像 → キャプション という構造ができました。
次は、CSSでデザインを整えていきます。
2. CSSでデザインを整える
次に、モーダルの見た目を整えていきましょう。
以下のCSSをコピペするだけで、サムネイルが横並びになり、モーダルもきれいに表示されます。
/* サムネイルを並べるエリア */
.image-grid {
display: flex; /* 横並びに配置 */
justify-content: space-around;
gap: 20px; /* 画像同士の間隔 */
}
/* サムネイル画像 */
.thumbnail {
width: 100%;
cursor: pointer; /* クリックできるカーソルに */
transition: transform 0.3s; /* ホバー時のアニメーション */
}
.thumbnail:hover {
transform: scale(1.05); /* ホバー時に少し拡大 */
}
/* モーダル全体 */
.modal {
display: none; /* 初期状態は非表示 */
position: fixed; /* スクロールしても固定 */
z-index: 1; /* 最前面に表示 */
left: 0;
top: 0;
width: 100%;
height: 100%;
background: rgba(0,0,0,0.7); /* 半透明の背景 */
}
/* 拡大画像 */
.modal-content {
margin: 15% auto;
display: block;
width: 80%;
max-width: 700px; /* 最大サイズを制限 */
}
/* 閉じるボタン */
.close {
position: absolute;
top: 10px;
right: 25px;
font-size: 35px;
font-weight: bold;
color: white;
cursor: pointer;
}
.image-grid:フレックスボックスで画像を横並びに配置.thumbnail:ホバーすると少し拡大して「クリックできそう」と感じさせる演出.modal:画面全体を覆う黒い背景。半透明で奥のページを見せつつ、画像を強調.modal-content:中央に拡大画像を表示。最大幅を指定して見やすく調整.close:右上に配置された「×」ボタン。カーソルを合わせると閉じられることが直感的にわかる
このCSSを適用すると、サムネイルはきれいに並び、クリック後はモーダルで拡大画像が浮かび上がるデザインになります。
3. JavaScriptで動きをつける
モーダルの「開く/閉じる」を制御します。以下をそのまま script.js にコピペしてください。
// モーダルの取得
var modal = document.getElementById("myModal");
var modalImg = document.getElementById("js-modal-img");
var captionText = document.getElementById("caption");
// サムネイル画像をクリックしたときの処理
var images = document.querySelectorAll(".thumbnail");
images.forEach(function(img) {
img.onclick = function() {
modal.style.display = "block";
modalImg.src = this.src; // クリックした画像をモーダルに表示
captionText.innerHTML = this.alt; // キャプションを設定
}
});
// 閉じるボタンをクリックしたときにモーダルを閉じる
var span = document.getElementsByClassName("close")[0];
span.onclick = function() {
modal.style.display = "none";
}
// モーダル外をクリックしたときにモーダルを閉じる
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}-
#myModal・#js-modal-img・#captionを取得 -
.thumbnailをクリック → モーダル表示+画像・キャプションを差し替え -
.close(×)で閉じる - モーダルの外側(暗い背景)をクリックしても閉じる
コードの解説(役割ごとにサクッと)
必要な方は下のアコーディオンを開いてご覧ください。
1) モーダル関連の要素を取得
var modal = document.getElementById("myModal");
var modalImg = document.getElementById("js-modal-img");
var captionText = document.getElementById("caption");modal:モーダル全体(背景含む)を表す要素。modalImg:拡大して表示する画像の “入れ物”。クリックしたサムネイルのsrcをここにコピーします。captionText:画像説明(キャプション)を表示する領域。altの文字をここへ入れます。
※ 説明内の
idはjs-modal-imgに統一(以前の記述でimg01となっていた場合は読み替えてください)。
2) サムネイルをクリック → モーダルを表示
var images = document.querySelectorAll(".thumbnail");
images.forEach(function(img) {
img.onclick = function() {
modal.style.display = "block";
modalImg.src = this.src; // クリックした画像のURLをコピー
captionText.innerHTML = this.alt; // altの文字をキャプションに表示
}
});
querySelectorAll(".thumbnail"):サムネイル画像を全部まとめて取得。forEachで1枚ずつ処理し、onclickに動作を登録。thisは「クリックされたその画像」を指します。modal.style.display = "block"で画面にモーダルを表示。modalImg.src = this.srcで拡大表示する画像を差し替え。captionText.innerHTML = this.altでキャプションを差し替え(altが空なら空のまま表示されます)。
3) 「×」ボタンで閉じる
var span = document.getElementsByClassName("close")[0];
span.onclick = function() {
modal.style.display = "none";
}
getElementsByClassName("close")は複数返るので、最初の1つを[0]で取得。display = "none"にして非表示にするだけのシンプル設計です。
4) モーダル外(暗い背景)をクリックで閉じる
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
- 画面どこかがクリックされたらイベントが発火。
event.target == modal(= 背景そのもの)を押したときだけ閉じます。- 画像そのものをクリックしても閉じないので、誤操作を防げます。
よくあるつまずき(チェックリスト)
- id/クラス名の綴り:HTMLの
id・classとJS側の指定が一致しているか(js-modal-img/myModal/thumbnail/closeなど)。 - スクリプトの読み込み順:HTMLより先にJSを読み込むと要素が取得できないことがあります。
</body>直前に<script>を置くか、テーマ側の「フッターに読み込み」を選択。 - キャプションが表示されない:画像タグの
altが空だと何も出ません。必要に応じて説明文を入れておきましょう。
- サムネイルをクリック → モーダルが開く
- 拡大画像とキャプションが正しく表示される
- 「×」または背景クリックで閉じる
まとめ
この記事では、HTML・CSS・JavaScriptだけで作る「画像クリック→拡大、×/背景クリックで閉じる」モーダルの実装手順を解説しました。
サムネイルをクリックすると拡大、直感操作で閉じられる
画像の alt をそのままキャプション に活用できる
シンプル構成で 商品ページ/ギャラリー/作品紹介 へ流用しやすい
- 記事のコードをコピペ
- 画像の
src/altを自分用に差し替え - PCとスマホ の両方で表示・操作をチェック
基本形を動かしてから、アニメーションやデザインを足して“自分仕様”に仕上げましょう。モーダルはHTML/CSS/JSだけで作れる定番UIなので、初心者にも扱いやすいです。









