Navigation menu
ドロップダウンつきのサイトナビゲーションです。または、メニュー間でコンテンツがスライドする間も開いたままになる、全幅の1つのパネルにもできます。
pnpm dlx shadcn@latest add https://hextaui.com/r/navigation-menu.jsonコンポーネント、HextaUIのテーマトークン、依存するHextaUIコンポーネントを追加します。
まだ追加していない場合は、グローバルCSSにテーマトークンを追加してください。
依存関係をインストールします。
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cn次のコードをコピーしてプロジェクトに貼り付けてください。
components/ui/navigation-menu.tsx lib/motion.ts インポートパスは、お使いのプロジェクト構成に合わせて更新してください。
variant="panel" では、1枚のカードがバー全体にまたがります。トリガー間を移動してもカードは開いたまま同じ位置に留まり、動いた方向にコンテンツだけがスライドして、高さが合うようになめらかに変化します。閉じたり、開き直したり、ジャンプしたりしません。
Dropdown
デフォルトの dropdown バリアントは、各トリガーの下にカードを開きます。次のトリガーに移ると、同じカードが滑るように移動して新しいコンテンツに合わせてリサイズします。
現在のページ
バー内のリンクはトリガーのように見えます。現在のページには active を指定すると、aria-current="page" も設定されます。
右から左
コンテンツのスライドは移動する方向に従い、右から左のレイアウトでは反転します。
| キー | アクション |
|---|---|
| Tab | バー内を移動し、開いているトリガーからそのコンテンツへ移動します。 |
| EnterSpace | フォーカスされているトリガーのメニューを開閉します。 |
| ↑↓ | 開いているコンテンツ内のリンク間を移動します。 |
| ←→ | バー内のトリガー間を移動します。 |
| Esc | メニューを閉じ、トリガーにフォーカスを戻します。 |
- ルートは
<nav>を描画します。ページに複数ある場合はaria-labelを付けてください。 - トリガーはメニューが開いているかどうかを伝えるボタンで、メニューが閉じるとフォーカスが戻ります。
- 視差効果の軽減が有効な場合、コンテンツのスライドとスライドするハイライトはフェードに置き換わります。
| プロパティ | 型 | デフォルト |
|---|---|---|
variantdropdown は各トリガーの下に開きます。panel はバーの下に全幅のカードを1枚開き、コンテンツがスライドする間も位置は動きません。 | "dropdown" | "panel" | "dropdown" |
showSafeAreaポインターが向かう間メニューを開いたままにする安全領域を描画します。デバッグとデモ用です。 | boolean | false |
align | "start" | "center" | "end" | "start", or "center" for panel |
sideOffset | number | 8 |
value | any | – |
defaultValue | any | – |
onValueChange | (value, details) => void | – |
delayホバーしてから開くまでの待ち時間(ms)。 | number | 50 |
closeDelayポインターが離れてから閉じるまでの待ち時間(ms)。 | number | 50 |
orientation | "horizontal" | "vertical" | "horizontal" |
| 属性 | 説明 |
|---|---|
data-slot="navigation-menu" | nav。data-variant を持ちます。 |
data-slot="navigation-menu-highlight" | 開いているトリガー間をスライドする背景。 |
data-slot="navigation-menu-popup" | カード。高さは --popup-height でなめらかに変化します。 |
| 属性 | 説明 |
|---|---|
data-slot="navigation-menu-trigger" | CSSでトリガーを指定します。 |
data-popup-open | メニューが開いている間付きます。シェブロンが反転します。 |
| 属性 | 説明 |
|---|---|
data-slot="navigation-menu-content" | メニューのコンテンツ。data-variant を持ちます。 |
data-activation-direction | "left"、"right"、"up"、"down"。前のトリガーがあった方向で、スライドを制御します。 |
--navigation-menu-link-radius | リンクの角丸。カードと同心です。 |
| プロパティ | 型 | デフォルト |
|---|---|---|
active現在のページを示します。 | boolean | false |
render | ReactElement | (props, state) => ReactElement | <a> |
| 属性 | 説明 |
|---|---|
data-slot="navigation-menu-link" | CSS でリンクを指定します。バー内では、トリガーと同じサイズになります。 |
data-active | 現在のページに付きます。 |
- Motionすべてのコンポーネントがアニメーションに使うイージングカーブ、継続時間、モーション軽減のチェックと、サイズのモーフィングやスライドするハイライト用のフックです。
- Breadcrumb現在のページまでのリンクをたどる経路です。安全に折り返し、右から左へのレイアウトでは反転し、折りたたまれた区間をその場で展開できます。
- Paginationすべてのボタンを定位置に保つページナビゲーションです。現在のページへ滑らかに移動し、省略記号から任意のページへジャンプできます。
- Sidebarアイコンのみ、またはオフキャンバスに折りたたまれ、ヘッダーの下に固定され、スマートフォンではスワイプできるシートになるアプリのサイドバーです。
- Tabsアクティブなタブへスライドするインジケーターでビューを切り替えます。セグメントコントロールまたはアンダーラインとして使え、あふれたリストはスクロールします。