• #Vue
  • #design
  • #component
  • #TODO
開発完了

概要

TableOfContents.vue コンポーネントに「メトロライン」スタイルのナビゲーションを実装する。

Before(現状)

現在の目次は単純なリスト形式で、視覚的な進捗インジケーターがない。 現状の目次スタイル

  • 各項目は単純なテキストリンク
  • 階層構造(H2/H3)はインデントで表現
  • アクティブな項目はボールド + 色変更のみ
  • 通過した項目と未通過の項目の視覚的区別なし

After(目標)

参考画像に基づくメトロラインスタイル: メトロラインデザインの参考画像

ON THIS PAGE

●━━ 背景・課題
┃     現状の問題
┃     目標
●━━ 現状の構成
┃   └─● 1. R2バケット作成
┃   └─● 2. シークレット設定
┃   └─○ 3. wrangler.toml 更新
○━━ 改善後の構成
○━━ 関連ドキュメント

要件

  1. 縦の線(メインライン)
    • 各項目の左側に縦線を描画
    • 通過済み部分は青色(#3b82f6)
    • 未通過部分は灰色(#e5e5e5)
  2. 丸(インジケーター)
    • 各項目に丸を配置
    • 通過済み:青い塗りつぶし
    • アクティブ:青い塗りつぶし + 大きめサイズ + グロー
    • 未通過:灰色の塗りつぶし
  3. 階層構造の表現(重要)
    • H2項目:丸はメインライン上
    • H3項目:丸は右にインデント(約12px)
    • 青い線は青い丸同士を接続する
    • 深さが変わる箇所では線が曲がる(L字型)

線の接続パターン

パターン1: 同じ深さの項目を接続

●  H2項目A
┃
●  H2項目B

パターン2: H2からH3へ(深くなる)

●━━━ H2項目
     ┃
     └─● H3項目(子)

パターン3: H3からH2へ(浅くなる)

     ● H3項目
     ┃
●━━━┛ H2項目(次の親)

技術的アプローチ

オプションA: CSS疑似要素

各リストアイテムに ::before / ::after で線を描画。

メリット: シンプルでDOM構造が軽い デメリット: 複雑な曲線の表現が難しい

オプションB: インラインSVG

各アイテムに専用のSVG要素を配置。

メリット: 曲線の表現が容易 デメリット: DOM構造が複雑になる

オプションC: 単一のSVGオーバーレイ

リスト全体に1つのSVGをオーバーレイし、動的にパスを計算。

メリット: 最も柔軟、スムーズなアニメーション可能 デメリット: 位置計算が複雑、スクロール時の同期が必要

実装状況

  • 基本的な丸の表示
  • 通過/アクティブ/未通過の状態管理
  • 青い丸同士の縦線接続
  • 階層構造に応じた丸のインデント
  • 深さが変わる箇所でのL字接続
  • スムーズなアニメーション

参考

添付画像のデザイン要素:

  • タイトル: "ON THIS PAGE" + リストアイコン
  • 線の太さ: 2px
  • 丸のサイズ: 通常 8px、アクティブ 10px
  • インデント幅: 12px per level
  • 色: 青 #3b82f6、灰 #e5e5e5