コンテンツにスキップ

ナビゲーションメニュー

hc-navmenu は、項目がコンテンツパネル(メガメニュー)を開ける トップレベルのサイトナビゲーションです。ディスクロージャの集合です: 各トリガーは button[aria-expanded] で、CSS Anchor Positioning に よってその下にアンカーされた popover パネルを制御します。パネルは ホバー / フォーカスで開き、同時に 1 つだけ、中のリンクは本物の <a> のままです — そのため素の MPA ナビゲーションでも htmx でも 機能します。

別名: ナビバー、ナビゲーションメニュー、メガメニュー。

プリミティブ必要バージョン
HTML popoverChrome 114、Edge 114、Firefox 125、Safari 17
CSS Anchor PositioningChrome 125、Edge 125、Firefox 147、Safari 26

Anchor Positioning のない環境では installNavmenu() が JS 配置に フォールバックします — popover がサポートされる環境ならどこでも、 パネルは正しく開いて解散します。

import { installNavmenu } from '@hypermedia-components/core';
installNavmenu();

installNavmenu() は冪等で、アンインストーラを返します。ゼロ設定の @hypermedia-components/core/behaviors エントリが自動インストールし、 htmx でスワップされた内容も自動で拾います。

トリガーには aria-haspopup / aria-expanded / aria-controls が 自動で配線され、パネルはその下にアンカーされた popover になります。

  • ホバー / フォーカスは、短い意図確認の遅延の後にパネルを開き、 短い猶予の後に閉じます(ポインタをトリガーからパネルへ動かしても 解散しないように)。開くパネルは同時に 1 つだけです。
  • キーボード: / はパネルを開いて中の最初 / 最後の項目へ フォーカスを移動。Esc は閉じてフォーカスをトリガーへ返します。 Tab はトリガーとパネルのリンクを普通に辿ります。
  • リンクはリンクのまま。 ビヘイビアがパネル内の <a> のクリックを インターセプトすることは決してありません — ナビゲーションは ブラウザ(リンクが data-hx-* を運んでいれば htmx)のものです。

狭い画面では水平のメガメニューは収まりません。パネルは素のマークアップ なので、同じコンテンツがうまくデグレードします: バーをトグルの背後に 畳み(例: hc-drawer の中)、 各セクションを積み重ねた hc-collapsibleと して描画します。レイアウトの切り替えはメディアクエリで — リンクと構造は 同一なので、重複するマークアップは不要です。

  • メニューは aria-label つきの <nav> で包みます。各パネルトリガーは aria-expandedaria-controls を公開する本物の <button> です。
  • パネルは popover なので、Esc と外側クリックの解散はプラット フォームから来ます。Esc でフォーカスはトリガーへ戻ります。
  • パネルのコンテンツは、Tab で到達可能で普通に読み上げられるよう、 ソース順の本物のリンク / ボタンに保ってください。
トークンパス用途
navmenu.gapトップ項目間のギャップ。
navmenu.trigger-padding-x / -yトリガー / トップリンクのパディング。
navmenu.trigger-radiusトリガー / トップリンクの角丸。
navmenu.trigger-fgトリガーのテキスト色。
navmenu.trigger-hover-bgトリガーのホバー / 展開時の背景。
navmenu.panel-bg / -fg / -borderパネルの面。
navmenu.panel-radius / -padding / -min-widthパネルのボックス。
navmenu.panel-offsetトリガーとパネルの間のギャップ。
navmenu.link-padding-x / -y / -radiusパネルリンクのボックス。
navmenu.link-fg / -hover-bgパネルリンクの色。
生成される CSS 変数を表示
--hc-navmenu-gap | -trigger-padding-x | -trigger-padding-y | -trigger-radius
--hc-navmenu-trigger-fg | -trigger-hover-bg
--hc-navmenu-panel-bg | -panel-fg | -panel-border | -panel-radius | -panel-padding | -panel-min-width | -panel-offset
--hc-navmenu-link-padding-x | -link-padding-y | -link-radius | -link-fg | -link-hover-bg
  • メニューバー — アプリケーションのメニューバー(アクション)であり、サイト ナビゲーションではありません。
  • メニュー — 単一の ドロップダウンアクションメニュー。
  • ドロワー — サイト ナビのモバイル版の定番ホスト。