1. 公式 Navbar を採用しない理由
Docsify の公式 Navbar は,ドキュメント内のページを案内するための機能です。loadNavbar: true を設定して _navbar.md を配置すると,Markdown から #app 内の .app-nav が生成されます。リンクは Docsify のハッシュルーティングを前提とし,狭い画面ではサイドバーへ統合できます。この構成は,同一ドキュメント内のページを並べる用途に適しています。
これに対して,Real Terms が必要とするのはサイト横断ナビゲーションです。emotiongraphics.jp のホーム,Real Terms(/ai/),Significant Bit(/docs/),About を相互に接続するため,リンクには Docsify の #/… ではなく,オリジン相対の通常 URL を使用します。また,高さを 64px に固定し,ページを下方向へスクロールしたときは非表示にします。狭い画面では,VitePress 側と共通するハンバーガーメニューに外観切替と言語切替を収容します。ロゴのリンク先は,媒体である Real Terms ではなく,発行元である eMotionGraphics のホームです。
公式 Navbar とサイトナビゲーションを併用すると,次の競合が生じます。
- 高さ
ベンダー CSS の--navbar-heightは4emです。サイトナビゲーションは高さを 64px とし,本文のpadding-topと固定サイドバーのtopに同じ値を使用します。両方のナビゲーションを配置すると,本文とサイドバーのオフセットが一致しません。 - 重ね順
.app-navのz-indexは 20,サイドバーは 60 です。サイトナビゲーションは通常時を 40,メニュー展開時を 60 としているため,公式 Navbar を追加すると狭い画面のオーバーレイと競合します。 - 狭い画面
Docsify は.app-navを非表示にし,リンクをサイドバーへ統合できます。一方,VitePress 側と共通するハンバーガーメニューは全画面パネルであり,検索や記事目次とは役割が異なります。両者を統合すると,サイト間の導線とドキュメント内の導線を区別できません。
以上の理由から,Real Terms の $docsify には loadSidebar: true を設定し,loadNavbar は指定していません。_navbar.md も配置せず,Navbar 用のプラグインも使用しません。HTML シェルがライブラリとして読み込むのは,プロジェクト内に保持している docsify.min.js と,公式の search.min.js だけです。
サイトナビゲーションは,次の二つのファイルで構成します。
site/app.jsensureSiteNav()がheader.eg-site-navを生成し,Docsify プラグインのsiteChromeから呼び出します。site/theme.cssSite navbar (eMotionGraphics chrome)セクションで,固定配置,スクロール時の表示制御,768px 以下で使用するハンバーガーメニューを定義します。
Docsify の責任範囲は,サイドバー,検索,ハッシュルーティング,auto2top,記事本文のレンダリングです。これに対して,サイト横断の導線は Docsify のレンダリング領域から分離します。次章では,サイトナビゲーションを生成する時点と挿入先を説明します。