Skip to content

UI Design: ランキング画面

機能は requirements.md、技術は design.md 参照。デザイントークンは home/ui-design.md を参照。


レイアウト

┌────────────────────────────────────────────┐
│ [← 候補者一覧へ戻る]                          │
│ 📈 候補者ランキング (display 大)              │
├────────────────────────────────────────────┤
│ 🏆 [1位] 🖼  名前        ████████ 100% 1234票 │
│           [無料投票] [有料投票]               │
├────────────────────────────────────────────┤
│ 🥈 [2位] 🖼  名前        ██████ 75% 925票    │
│           [無料投票] [有料投票]               │
├────────────────────────────────────────────┤
│ 🥉 [3位] 🖼  名前        █████ 60% 740票     │
│           [無料投票] [有料投票]               │
├────────────────────────────────────────────┤
│ 🏅 [4位] 🖼  名前        ████ 45% 555票      │
│           [無料投票] [有料投票]               │
└────────────────────────────────────────────┘

最大幅: max-w-4xl mx-auto px-6


コンポーネント別ビジュアル仕様

<RankingHeader>

  • flex items-center gap-3
  • TrendingUp アイコン (gold, 7×7)
  • タイトル「候補者ランキング」: display フォント、clamp(2rem, 4vw, 3rem)、weight 500

<RankingItem> (共通)

  • rounded-2xl p-5flex items-center gap-4
  • 内部構造(左→右):
    1. 順位アイコン(円形背景に Trophy/Medal/Award)
    2. 順位バッジ + 候補者名(縦並び)
    3. 候補者画像(円形 or 角丸サムネ、64×64)
    4. 得票率バー + 得票数(縦並び)
    5. 投票ボタン2つ(縦並び、コンパクト)

順位別装飾

1位

項目
背景linear-gradient(135deg, rgba(212, 175, 55, 0.15), rgba(232, 180, 168, 0.15))
枠線2px solid var(--gold)
0 8px 30px rgba(212, 175, 55, 0.3)
アイコンTrophy (gold, 8×8)
バッジ背景var(--gold)
バッジ文字white
バー色var(--gold)

2位

項目
背景linear-gradient(135deg, rgba(192, 192, 192, 0.12), rgba(220, 220, 220, 0.12))
枠線2px solid #C0C0C0
0 6px 25px rgba(192, 192, 192, 0.2)
アイコンMedal (silver #C0C0C0, 7×7)
バッジ背景#C0C0C0
バー色#C0C0C0

3位

項目
背景linear-gradient(135deg, rgba(205, 127, 50, 0.12), rgba(230, 160, 120, 0.12))
枠線2px solid #CD7F32
0 6px 25px rgba(205, 127, 50, 0.2)
アイコンMedal (bronze #CD7F32, 7×7)
バッジ背景#CD7F32
バー色#CD7F32

4位以降

項目
背景white
枠線1px solid rgba(212, 175, 55, 0.2)
0 2px 10px rgba(0, 0, 0, 0.05)
アイコンAward (gold-light opacity 0.6, 6×6)
バッジ背景rgba(212, 175, 55, 0.2)
バッジ文字gold-dark
バー色var(--gold-light)

<VoteShareBar>

  • 高さ 6px、rounded-full、背景 gray-200
  • 内側バー: rounded-full、幅 (votes / maxVotes) * 100%
  • アニメーション: 幅変更を transition-all duration-700 ease-out
  • バー上部に得票率 % と票数を並列表示

投票ボタン (RankingItem 内)

  • home/詳細ページよりコンパクト: py-2 px-4、文字サイズ 0.85rem
  • 配置: 行右端に縦並び (gap 4px)、モバイルでは行下に折り返し

アニメーション

要素プロパティtiming
ヘッダーopacity, y(-20→0)duration 0.6s
各 RankingItemopacity, x(-30→0)delay 0.1 + i*0.08s
順位変動 (投票後)motion layoutspring (damping: 25)
バー幅変更width transition700ms ease-out

レスポンシブ

モバイル

  • アイテム内部を縦積み (2段組: 上=情報、下=ボタン)
  • 投票ボタンは横並びの2列
  • 順位アイコン縮小 (40×40)

デスクトップ

  • 1行レイアウト、ボタンは右端縦並び

関連

  • requirements.md / design.md
  • ../home/ui-design.md — 共通デザイントークン