タブで画像ギャラリーを切り替える方法【HTML/CSS/JavaScript・サンプルコード付き】

タブ切り替え

タブで画像ギャラリーを切り替える方法

タブで画像ギャラリーを切り替える方法を紹介します。このサンプルでは、複数のタブをクリックすると、選択したタブに対応する画像ギャラリーへ表示内容が切り替わります。カテゴリーごとに複数の画像をまとめて表示できるため、すべての画像を一度に並べず、内容を整理して見せたい場合に利用できます。

商品カテゴリーごとの写真、施設ごとの画像、制作実績、旅行先やイベント別の写真など、複数の画像グループを分けて掲載したい場面に適しています。選択中のタブは青色で表示され、現在どのギャラリーを見ているのか分かりやすくなっています。JavaScriptではクリックされたタブに対応するパネルだけを表示し、それ以外のギャラリーを非表示にします。

HTMLではタブ名や各ギャラリーに配置する画像を変更でき、CSSではタブの色、余白、角丸、画像同士の間隔、列数、画像の表示比率などを調整できます。画面幅640px以下では画像を1列表示へ切り替えるため、スマートフォン・タブレット・PCでも利用しやすく、複数の画像をカテゴリー別に見せたいWebページへ導入しやすいサンプルです。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

「自然」「山」「風景」のタブをクリックすると、それぞれに対応する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="tab-image-gallery-switch_wrap">

    <!-- タイトル -->
    <div class="tab-image-gallery-switch_title">
      画像ギャラリーをタブで切り替える
    </div>

    <!-- 説明文 -->
    <p class="tab-image-gallery-switch_text">
      タブをクリックすると、対応する画像ギャラリーへ切り替わります。
    </p>

    <!-- タブ一覧 -->
    <div class="tab-image-gallery-switch_tabs" role="tablist" aria-label="画像ギャラリー切り替え">

      <!-- ギャラリー1タブ -->
      <button
        class="tab-image-gallery-switch_tab is-active"
        id="tab-image-gallery-switch-tab1"
        type="button"
        role="tab"
        aria-controls="tab-image-gallery-switch-panel1"
        aria-selected="true"
        data-tab="gallery1">
        ギャラリー1
      </button>

      <!-- ギャラリー2タブ -->
      <button
        class="tab-image-gallery-switch_tab"
        id="tab-image-gallery-switch-tab2"
        type="button"
        role="tab"
        aria-controls="tab-image-gallery-switch-panel2"
        aria-selected="false"
        data-tab="gallery2">
        ギャラリー2
      </button>

      <!-- ギャラリー3タブ -->
      <button
        class="tab-image-gallery-switch_tab"
        id="tab-image-gallery-switch-tab3"
        type="button"
        role="tab"
        aria-controls="tab-image-gallery-switch-panel3"
        aria-selected="false"
        data-tab="gallery3">
        ギャラリー3
      </button>

    </div>

    <!-- ギャラリー1 -->
    <div
      class="tab-image-gallery-switch_panel is-active"
      id="tab-image-gallery-switch-panel1"
      role="tabpanel"
      aria-labelledby="tab-image-gallery-switch-tab1"
      data-panel="gallery1">

      <!-- 画像1 -->
      <img
        class="tab-image-gallery-switch_image"
        src="images/image1.png"
        alt="ギャラリー1の画像1">

      <!-- 画像2 -->
      <img
        class="tab-image-gallery-switch_image"
        src="images/image2.png"
        alt="ギャラリー1の画像2">

      <!-- 画像3 -->
      <img
        class="tab-image-gallery-switch_image"
        src="images/image3.png"
        alt="ギャラリー1の画像3">

    </div>

    <!-- ギャラリー2 -->
    <div
      class="tab-image-gallery-switch_panel"
      id="tab-image-gallery-switch-panel2"
      role="tabpanel"
      aria-labelledby="tab-image-gallery-switch-tab2"
      data-panel="gallery2">

      <!-- 画像4 -->
      <img
        class="tab-image-gallery-switch_image"
        src="images/image4.png"
        alt="ギャラリー2の画像1">

      <!-- 画像5 -->
      <img
        class="tab-image-gallery-switch_image"
        src="images/image5.png"
        alt="ギャラリー2の画像2">

      <!-- 画像6 -->
      <img
        class="tab-image-gallery-switch_image"
        src="images/image6.png"
        alt="ギャラリー2の画像3">

    </div>

    <!-- ギャラリー3 -->
    <div
      class="tab-image-gallery-switch_panel"
      id="tab-image-gallery-switch-panel3"
      role="tabpanel"
      aria-labelledby="tab-image-gallery-switch-tab3"
      data-panel="gallery3">

      <!-- 画像7 -->
      <img
        class="tab-image-gallery-switch_image"
        src="images/image7.png"
        alt="ギャラリー3の画像1">

      <!-- 画像8 -->
      <img
        class="tab-image-gallery-switch_image"
        src="images/image8.png"
        alt="ギャラリー3の画像2">

      <!-- 画像9 -->
      <img
        class="tab-image-gallery-switch_image"
        src="images/image9.png"
        alt="ギャラリー3の画像3">

    </div>

  </div>

  <!-- JavaScriptファイルを読み込み -->
  <script src="script.js"></script>

</body>
</html>
コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルと、表示する画像を保存するimagesフォルダで構成されています。HTMLでは3つのタブと、それぞれのタブに対応する画像ギャラリーを作成します。CSSではタブやギャラリーのレイアウトを整え、JavaScriptではクリックしたタブに合わせて表示する画像ギャラリーを切り替えます。

sample/
├── index.html
├── style.css
├── script.js
└── images/
    ├── image1.png
    ├── image2.png
    ├── image3.png
    ├── image4.png
    ├── image5.png
    ├── image6.png
    ├── image7.png
    ├── image8.png
    └── image9.png

各ファイルの役割
index.htmlはタブと画像ギャラリーの構成を作るファイルです。「ギャラリー1」「ギャラリー2」「ギャラリー3」のタブ名や、各ギャラリーに表示する画像を変更できます。画像はimages/image1.pngからimages/image9.pngまでを指定しています。

style.cssはタブと画像ギャラリーのデザインを設定するファイルです。全体の横幅や余白、タブの色や角丸、画像の列数、画像同士の間隔、画像の表示比率などを変更できます。

script.jsはタブをクリックしたときの切り替え処理を行うファイルです。クリックされたタブを選択状態に変更し、そのタブのdata-tabと対応するdata-panelを持つ画像ギャラリーだけを表示します。

imagesフォルダにはギャラリーで使用する画像を配置します。このサンプルではimage1.pngからimage9.pngまでの9枚を使用します。画像ファイル自体は利用者側で用意してください。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置し、その中にimagesフォルダを作成します。使用する9枚の画像をimage1.pngからimage9.pngのファイル名でimagesフォルダへ配置してください。

配置後にsample/index.htmlをブラウザで開くと、最初は「ギャラリー1」が選択された状態でimage1.png・image2.png・image3.pngが表示されます。「ギャラリー2」をクリックするとimage4.png〜image6.png、「ギャラリー3」をクリックするとimage7.png〜image9.pngへ切り替わります。

カスタマイズできる内容
index.htmlではタブに表示する「ギャラリー1」「ギャラリー2」「ギャラリー3」の文字を変更できます。また、各img要素のsrcを書き換えることで、表示する画像を変更できます。画像の説明に合わせてaltも変更してください。

style.cssでは選択中のタブの背景色と文字色、タブの高さや余白、全体の最大横幅、画像同士の間隔、画像の角丸などを変更できます。grid-template-columns:repeat(3,1fr);では、選択中のギャラリーを3列で表示しています。

数値調整
style.css
max-width:760px;
画像ギャラリー切り替え全体の最大横幅です。値を大きくすると全体が横に広がり、小さくするとコンパクトになります。

margin:40px auto;
全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。

padding:32px;
全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。

border-radius:18px;
全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。

font-size:22px;
タイトルの文字サイズです。値を大きくするとタイトルが大きく表示されます。

min-height:52px;
タブの最小高さです。値を大きくするとタブが高くなります。

padding:14px;
タブの内側余白です。値を大きくすると文字と枠線の間隔が広がります。

border-radius:12px 12px 0 0;
タブ上部の角丸です。12pxを大きくすると上側の丸みが強くなります。

transition:0.3s;
タブの背景色と文字色が切り替わる時間です。0.3秒で変化します。値を大きくするとゆっくり、小さくすると速く切り替わります。

margin-left:6px;
タブ同士の間隔です。値を大きくするとタブ同士が離れ、小さくすると近くなります。

padding:12px;
画像ギャラリー内側の余白です。値を大きくすると画像と外枠の間隔が広がります。

grid-template-columns:repeat(3,1fr);
画像ギャラリーの列数です。このサンプルでは3列で表示します。

gap:8px;
ギャラリー画像同士の間隔です。値を大きくすると画像同士の間隔が広がります。

aspect-ratio:4/3;
ギャラリー画像の表示比率です。このサンプルでは横4・縦3の比率で表示します。

border-radius:8px;
各画像の角丸です。値を大きくすると画像の丸みが強くなり、0にすると四角になります。

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%max-width:760pxにより、画面幅に合わせて全体が縮小されます。通常は画像を3列で表示し、画面幅640px以下ではgrid-template-columns:1fr;へ変更して画像を1列で表示します。あわせて全体の余白やタブの高さ、文字サイズ、タブ同士の間隔も小さくしているため、スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント