本文へスキップ

サムネ連動ギャラリー

下段のサムネをタップ/クリックするとメイン表示が切り替わる。選択中サムネをハイライトし、切替時にフェードイン。

プレビュー

クリック

操作クリック/タップで動きます。

仕様書

向く場面
  • 商品詳細の複数写真の切替
  • 作品・部屋の写真を1枚ずつ見せる
  • メイン+サムネの定番ギャラリー
避ける場面
  • 写真が10枚以上(サムネが並びきらない)
  • 写真ごとに長い説明が要る
  • メインを自動で切り替える
構成要素
  • メイン表示
  • メインのラベル
  • サムネ列
  • 選択中サムネ
持っている状態
  • 通常
  • ホバー
  • フォーカス
  • 押下中
キーボード

Tab で各サムネ(button)に到達・Enter/Space でメイン表示を切り替える

支援技術

サムネは button で aria-label「写真 X を表示」+選択中は aria-pressed=true。メインのラベルは aria-live=polite で更新を通知。reduce でフェード停止

動き

メイン切替時 300ms ease で opacity 0.4→1・scale 0.97→1 のフェードイン。サムネはホバー 180ms で 1.08 倍。reduce では即時切替

デザインの要点

  • 切替のフェードは animation を none にしてから 2 フレーム後に付け直す。同じ値の再代入では再生されない
  • 選択中は枠色+3px の外光+1.06 倍の3つで示す。色だけだと写真の色に紛れ、拡大だけだとホバーと区別できない
  • サムネは 48px 角で 8px 間隔。指で隣を押し間違えない最小の寸法
  • サムネは role=list にせず素の button のまま。button に role=listitem を付けると押せる部品だと伝わらなくなる

コード(コピーして使えます)

<div class="tg-root">
  <!-- メイン表示 -->
  <div class="tg-main" id="tgMain">
    <span class="tg-main-label" id="tgLabel" aria-live="polite">写真 A</span>
  </div>
  <!-- サムネ列 -->
  <div class="tg-thumbs">
    <button class="tg-thumb active" type="button" data-bg="linear-gradient(135deg,#2b50c7,#5a7bff)" data-label="写真 A" aria-label="写真 A を表示" aria-pressed="true"></button>
    <button class="tg-thumb" type="button" data-bg="linear-gradient(135deg,#e86c4d,#f5a623)" data-label="写真 B" aria-label="写真 B を表示" aria-pressed="false"></button>
    <button class="tg-thumb" type="button" data-bg="linear-gradient(135deg,#2dc793,#2b50c7)" data-label="写真 C" aria-label="写真 C を表示" aria-pressed="false"></button>
    <button class="tg-thumb" type="button" data-bg="linear-gradient(135deg,#9b59b6,#e86c4d)" data-label="写真 D" aria-label="写真 D を表示" aria-pressed="false"></button>
  </div>
</div>

タグ

同じカテゴリ「メディア・画像」のほかのパーツ

関連パーツ