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なので、初心者にも扱いやすいです。









