コピペで完結!タブ切替 #07【スクロール可能タブ(ドラッグ/ホイール)】

html/css/js

スクロール可能タブ(ドラッグ/ホイール)

タブが多く横幅に収まらない場合でも、ホイール・ドラッグ・スワイプでスクロールできるタブUIです。 PCではマウスホイールやドラッグ、スマホではスワイプ操作でタブを切り替えやすくできます。

コードについて 本記事のコードは AI(ChatGPT)による生成をベースに作成・調整しています。ご利用の環境でテストの上ご使用ください。
免責 本コードの利用に伴う不具合・損害について、当サイトは責任を負いません。自己責任にてご利用ください。

デモ

下のタブは全部で12個あります。画面幅に収まりきらないので、横にスクロールして確認してください。

タブ1の内容です

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

/* =========================================
   スクロール可能タブのCSS(学習用に全文コメント)
   -----------------------------------------
   ・横幅に収まらないほどタブを大きく(min-width)
   ・横スクロールを有効化(overflow-x:auto)
   ・選択中タブは色で強調
   ・必要最小限の見た目に限定(衝突回避のため #demo-section にスコープ)
   ========================================= */

/* ルート:この記事のデモ領域に限定するためのラッパー */
#demo-section.demo-wrap{
  max-width:960px;                 /* 記事幅に合わせる横幅上限 */
  margin:0 auto;                   /* 中央寄せ */
  padding:0 16px;                  /* 左右余白 */
  font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans JP","Yu Gothic UI",sans-serif; /* 可読フォント */
  color:#0f172a;                   /* 基本文字色 */
  --ink:#0f172a;                   /* カラートークン:文字色 */
  --accent:#0b6bff;                /* カラートークン:強調色(アクティブ時の色) */
  --border:#e5e7eb;                /* カラートークン:枠線色 */
}

/* タブバー(横スクロールできる行) */
#demo-section .scroll-tabs{
  display:flex;                    /* 子要素(ボタン)を横並び */
  gap:8px;                         /* タブ間のすき間 */
  overflow-x:auto;                 /* 横方向へスクロール可能にする */
  -webkit-overflow-scrolling:touch;/* iOSの慣性スクロールを有効化 */
  scrollbar-width:none;            /* Firefoxのスクロールバー非表示 */
}
/* Chrome/Safari 等のスクロールバーを非表示 */
#demo-section .scroll-tabs::-webkit-scrollbar{ display:none; }

/* タブボタンの共通見た目 */
#demo-section .scroll-tabs button{
  flex:0 0 auto;                   /* 伸縮せず等幅で横並び維持 */
  min-width:180px;                 /* 1つを大きくする(スクロール必須化) */
  appearance:none;                 /* OS/ブラウザの標準装飾を無効化 */
  border:1px solid var(--border);  /* 薄い枠線 */
  background:#fff;                 /* 背景白 */
  border-radius:8px;               /* 角丸 */
  padding:14px 20px;               /* 中の余白(押しやすく) */
  font-size:15px;                  /* 文字サイズ */
  cursor:pointer;                  /* ポインタにする */
  color:var(--ink);                /* 文字色 */
  transition:background .25s,color .25s,border-color .25s; /* 滑らかに色変化 */
}

/* 選択中タブの見た目(aria-selected=true をJSが付与) */
#demo-section .scroll-tabs button[aria-selected="true"]{
  background:var(--accent);        /* 背景を強調色に */
  color:#fff;                      /* 文字は白 */
  border-color:var(--accent);      /* 枠線も強調色 */
  font-weight:600;                 /* 少し強調 */
}

/* タブに対応する内容パネル */
#demo-section .panel{
  border:1px solid var(--border);  /* 枠線 */
  border-radius:10px;              /* 角丸 */
  padding:16px;                    /* 余白 */
  margin-top:16px;                 /* タブとの余白 */
  background:#fff;                 /* 背景白 */
}
/* 備考:
   ・パネルの表示/非表示は HTML の hidden 属性を JS で付け替えます。
   ・CSS は純粋に見た目のみを定義しています。 */

コメント