NavigationMenu

NavigationMenuは、サイトやアプリのセクション間を移動するためのナビゲーションコンポーネントです。水平バーとサイドバーの両方に対応し、サブメニューや折りたたみモードを備えています。

4
Sizes
9
Parts
2
Orientations
Radix
Base

Playground

Preview
H
Menu
Direction
Size
Options
Sub Menus
Radius
<NavigationMenu>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuLink href="#" active icon={<Home className="icon-sm" />}>Home</NavigationMenuLink>
    </NavigationMenuItem>
    <NavigationMenuItem value="products">
      <NavigationMenuTrigger icon={<Package className="icon-sm" />}>Products</NavigationMenuTrigger>
      <NavigationMenuContent>
        <NavigationMenuLink href="#">All Products</NavigationMenuLink>
        <NavigationMenuLink href="#">Featured</NavigationMenuLink>
        <NavigationMenuLink href="#">New Arrivals</NavigationMenuLink>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem value="resources">
      <NavigationMenuTrigger icon={<BookOpen className="icon-sm" />}>Resources</NavigationMenuTrigger>
      <NavigationMenuContent>
        <NavigationMenuLink href="#">Documentation</NavigationMenuLink>
        <NavigationMenuLink href="#">Blog</NavigationMenuLink>
        <NavigationMenuLink href="#">Support</NavigationMenuLink>
      </NavigationMenuContent>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLink href="#" icon={<Tag className="icon-sm" />}>Pricing</NavigationMenuLink>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLink href="#" icon={<Users className="icon-sm" />}>About</NavigationMenuLink>
    </NavigationMenuItem>
    <NavigationMenuItem>
      <NavigationMenuLink href="#" icon={<Mail className="icon-sm" />}>Contact</NavigationMenuLink>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

Variants

Horizontal (デフォルト)
ヘッダー下部やページ上部に配置する水平ナビゲーションバー。ホバーでドロップダウンが開きます。
トップバー
Vertical
ダッシュボードや管理画面のサイドバー。クリックでサブメニューが折りたたみ/展開されます。
サイドバー

Sizes

sm
高さ32px
横パディング12px
Gap8px
フォント13px
アイコン14px
md
高さ36px
横パディング14px
Gap8px
フォント14px
アイコン16px
default
高さ40px
横パディング16px
Gap8px
フォント14px
アイコン16px
lg
高さ48px
横パディング24px
Gap8px
フォント16px
アイコン16px

Features

Sub Menus

水平モードではホバーでドロップダウン、垂直モードではクリックでアコーディオン式に展開されます。

Horizontal
Vertical
<NavigationMenuItem value="products">
  <NavigationMenuTrigger>Products</NavigationMenuTrigger>
  <NavigationMenuContent>
    <NavigationMenuLink href="#">All Products</NavigationMenuLink>
    <NavigationMenuLink href="#">Featured</NavigationMenuLink>
  </NavigationMenuContent>
</NavigationMenuItem>

Collapsed Mode

collapsed propでアイコンのみ表示。collapsedWidth propで幅をカスタマイズ可能(デフォルト: 64px)。

<NavigationMenu orientation="vertical" collapsed>
  <NavigationMenuList>
    <NavigationMenuItem>
      <NavigationMenuLink href="#"
        icon={<Home className="icon-sm" />}>
        Home
      </NavigationMenuLink>
    </NavigationMenuItem>
  </NavigationMenuList>
</NavigationMenu>

Active State

active propで現在のページを視覚的に強調表示し、aria-current="page"を自動設定します。

<NavigationMenuLink href="#" active
  icon={<Home className="icon-sm" />}>
  Home
</NavigationMenuLink>

Group Label

NavigationMenuGroupでアイテムをセクション分けし、label propでグループヘッダーを表示できます。

<NavigationMenu orientation="vertical">
  <NavigationMenuList>
    <NavigationMenuGroup label="Main">
      <NavigationMenuItem>
        <NavigationMenuLink href="#">Home</NavigationMenuLink>
      </NavigationMenuItem>
    </NavigationMenuGroup>
    <NavigationMenuGroup label="Settings">
      <NavigationMenuItem>
        <NavigationMenuLink href="#">General</NavigationMenuLink>
      </NavigationMenuItem>
    </NavigationMenuGroup>
  </NavigationMenuList>
</NavigationMenu>

Custom Link (asChild)

asChild propでNext.jsのLinkなどカスタムリンクコンポーネントを合成できます。

import Link from 'next/link'

<NavigationMenuLink asChild active>
  <Link href="/dashboard">Dashboard</Link>
</NavigationMenuLink>

API

Component Structure

NavigationMenu— Radix NavigationMenu + Collapsible
.List.ItemProps.TriggerProps.Content.LinkProps.GroupProps.Indicator.Viewport

Props

NavigationMenu

orientation"horizontal"
"horizontal" | "vertical"

レイアウトの方向

size"default"
"sm" | "md" | "default" | "lg"

メニューアイテムのサイズ

collapsedfalse
boolean

vertical専用: アイコンのみ表示(折りたたみサイドバー)

width256
number | string

vertical専用: サイドバーの幅(px数値またはCSS文字列)

collapsedWidthsm:56 / md:60 / default:64 / lg:72
number | string

vertical専用: 折りたたみ時の幅(サイズに応じた自動計算、px数値またはCSS文字列で上書き可)

radius"lg"
"sm" | "md" | "lg" | "xl"

ボーダーラディウス(horizontal: container/item concentric、vertical: 直接適用)

fontWeight"normal"
"normal" | "semibold"

メニューアイテムのフォントウェイト(active状態は常にsemibold)

delayDuration200
number

horizontal専用: ホバーで開くまでの遅延(ms)

skipDelayDuration300
number

horizontal専用: トリガー間移動時のスキップ遅延(ms)

valueundefined
string

アクティブメニューアイテムの値(制御モード)

defaultValueundefined
string

デフォルトのアクティブ値(非制御モード)

onValueChangeundefined
(value: string) => void

アクティブアイテム変更時のコールバック

NavigationMenuItem

valueundefined
string

Radix識別子(horizontal用)

defaultOpenfalse
boolean

vertical専用: サブメニューの初期展開状態

NavigationMenuTrigger

iconundefined
ReactNode

ラベルの前に表示するアイコン

chevronIcon内蔵SVG
ReactNode

シェブロンアイコンのカスタマイズ(horizontal: ▼、vertical: ▶)

NavigationMenuLink

activefalse
boolean

現在のページを表す(aria-current="page")

asChildfalse
boolean

カスタムリンクコンポーネントとの合成(Radix Slot)

iconundefined
ReactNode

ラベルの前に表示するアイコン

hrefundefined
string

リンク先のURL

NavigationMenuGroup

labelundefined
string

グループヘッダーラベル

Customization

NavigationMenuContent に自由なJSXを配置して、メガメニューやカード型レイアウトなど柔軟にカスタマイズできます。

メガメニュー

<NavigationMenuContent> <div className="grid grid-cols-3 gap-4 p-4 w-[480px]"> <div> <h4 className="text-xs font-semibold uppercase mb-2"> Electronics </h4> <NavigationMenuLink href="#"> Smartphones </NavigationMenuLink> <NavigationMenuLink href="#"> Laptops </NavigationMenuLink> </div> {/* ...more columns */} </div> </NavigationMenuContent>

カード型レイアウト

<NavigationMenuContent> <div className="grid grid-cols-2 gap-2 p-3 w-[400px]"> <a href="#" className="block p-3 rounded-lg hover:bg-background-muted"> <div className="text-sm font-semibold"> Documentation </div> <div className="text-xs text-text-muted"> Getting started guides and API references. </div> </a> {/* ...more cards */} </div> </NavigationMenuContent>

Tip:NavigationMenuContent 内のレイアウトは完全に自由です。グリッド、フレックス、カード等、プロジェクトに合わせて自由にカスタマイズしてください。chevronIcon propでシェブロンアイコンも差し替え可能です。

Anatomy

1
2
3
6
Home
3
4
Products
3
6
Docs
7
5
Heighth-10 (40px)
Paddingpx-4 (16px)
Gapgap-2 (8px)
1
Root
ナビゲーション全体
2
List
アイテムリスト
3
Item
各ナビ項目
4
Trigger
ドロップダウン起動
5
Content
ドロップダウン内容
6
Link
ナビリンク
7
Viewport
コンテンツ表示領域

Best Practices

推奨

  • サイトの主要セクションに対して使用する
  • activeを使って現在のページを明示する
  • サイドバーにはアイコン+ラベルを併用する
  • 関連リンクをGroupでセクション分けする

避けるべき

  • 3階層以上のネストを避ける
  • 水平モードにアイテムを詰め込みすぎない
  • collapsedモードでラベルなしのアイコンを使わない
  • アクション実行用に使わない(Dropdownを使用)

Accessibility

キーボード操作

Tabメニューへフォーカス移動
Arrow Keysトリガー/リンク間を移動
Enter / Spaceリンクをアクティブ化 / コンテンツを開く
Escapeコンテンツを閉じてトリガーに戻る

ARIA / WCAG

  • aria-label="navigation" nav要素に設定
  • aria-current="page" アクティブリンクに自動設定
  • Radix NavigationMenu + Collapsibleによる完全なキーボードサポート
  • WAI-ARIA Disclosure Navigation Pattern準拠