コピペで完結!タブ切替 #11【サムネで大画面スライド切替できるタブ】

html/css/js

ギャラリーや商品紹介に最適なタブ+スライダー

タブをクリックすると対応する画像スライドが切り替わり、さらにスライド操作に合わせてタブも自動更新されます。 直感的でわかりやすい動作は、商品紹介や画像ギャラリーにぴったりです。 コードはARIA対応済みでアクセシブル、コピペですぐ使える形に仕上げています。

  • タブ操作とスライド操作が相互に連動
  • ギャラリー・商品紹介・特集ページに活用可能
  • Swiperライブラリで滑らかな切り替え
  • ARIA属性対応+CSSスコープ済みで安心して利用可
コードについて 本記事のコードは AI(ChatGPT)による生成をベースに作成・調整しています。ご利用の環境でテストの上ご使用ください。
免責 本コードの利用に伴う不具合・損害について、当サイトは責任を負いません。自己責任にてご利用ください。

デモ

コードをコピーして使おう!

/* =========================
   タブ+Swiper連動UI用CSS
   (#gallery-section にスコープ)
   ========================= */

/* スコープの親にも幅制限を与えて中央寄せ */
#gallery-section{
  max-width:640px;   /* ギャラリー全体の横幅上限を640pxに制限 */
  margin:0 auto;     /* 左右中央寄せ(autoマージンで均等配置) */
  padding:0 16px;    /* 左右に16pxの余白を追加(小画面時の見切れ防止) */
}

/* ギャラリー全体を囲むラッパー */
#gallery-section .gallery{
  max-width:640px;          /* 横幅の上限を640pxに制限 */
  margin:0 auto;            /* 左右中央寄せ */
}

/* タブボタン群のコンテナ */
#gallery-section .tabs{
  display:flex;             /* 子要素(ボタン)を横並びに配置 */
  gap:8px;                  /* タブ同士の間隔を8pxに設定 */
  margin-bottom:12px;       /* 下に余白を入れてスライダーと分離 */
}

/* 各タブボタンの基本スタイル */
#gallery-section .tabs button{
  flex:1;                   /* 全タブを均等幅に広げる */
  padding:6px;              /* ボタン内側の余白を設定 */
  border:2px solid transparent; /* 初期状態の枠線は透明 */
  border-radius:6px;        /* 角を6px丸めて柔らかい印象に */
  background:#fff;          /* 背景色は白 */
  cursor:pointer;           /* ホバー時にポインタカーソル表示 */
}

/* 選択されているタブ(aria-selected="true") */
#gallery-section .tabs button[aria-selected="true"]{
  border-color:#0b6bff;     /* 枠線を青にして強調 */
  background:#e0f0ff;       /* 背景を淡い青にして選択感を出す */
}

/* Swiper本体のコンテナ */
#gallery-section .swiper{
  width:100%;               /* 横幅を親要素いっぱいに広げる */
  border:1px solid #e5e7eb; /* 外枠に薄いグレーの線 */
  border-radius:10px;       /* 角を10px丸めてデザイン性アップ */
  overflow:hidden;          /* 枠からはみ出した要素を非表示に */
}

/* 各スライドに含まれる画像 */
#gallery-section .swiper-slide img{
  width:100%;               /* 画像をスライド幅にフィットさせる */
  height:auto;              /* アスペクト比を維持してリサイズ */
  display:block;            /* インライン要素の余白を防ぐためブロック化 */
}

コメント