Dropdown

ドロップダウンメニュー

プレビュー

使いどころ

使う場面

  • 1 つのボタンに、関連する操作を 3 つ以上まとめる(編集、複製、削除)
  • 行ごとの「…」メニューなど、省スペースで操作を出したいとき
  • DropdownTrigger、DropdownMenu、DropdownItem を並べ、項目の onSelect で処理する。区切りは DropdownSeparator

使わない場面

  • フォームの値を選ぶこと。Select か Combobox を使う(Dropdown は操作を実行する)
  • ページ移動のナビゲーション。Sidebar や Breadcrumb を使う
  • 操作が 1〜2 個のとき。Button を直接並べる
  • 入力欄やフィルターなど、操作できる中身を入れる。Popover を使う

使い方

<Dropdown>
  <DropdownTrigger>
    <Button>メニュー</Button>
  </DropdownTrigger>
  <DropdownMenu>
    <DropdownItem>項目1</DropdownItem>
    <DropdownItem>項目2</DropdownItem>
  </DropdownMenu>
</Dropdown>

プロパティ

名前型デフォルト説明
children必須ReactNodeなしDropdownTrigger と DropdownMenu
openbooleanなし開閉状態(制御)
defaultOpenbooleanなし初期の開閉状態(非制御)
onOpenChange(open: boolean) => voidなし開閉が変わる時のコールバック
Dropdownコンポーネントなしドロップダウンのルート要素
DropdownTriggerサブコンポーネントなしドロップダウンを開くトリガー要素
DropdownMenuサブコンポーネントなしドロップダウンのメニューコンテナ
DropdownItemサブコンポーネントなしメニューアイテム
DropdownSeparatorサブコンポーネントなしメニューアイテム間のセパレーター

型と必須かどうかはソースの型定義から自動で生成しています。表にない HTML 標準の属性(className や aria-* など)も、ルート要素にそのまま渡せます。

キーボード操作

キー動作
Enter / Spaceトリガーでメニューを開き、最初の項目にフォーカスする。項目では選択して閉じる
↓ / ↑トリガーでは開いて最初 / 最後の項目に移る。メニューでは次 / 前の項目に移る(端で回る)
Home / End最初 / 最後の項目に移る
文字キーその文字で始まる項目に移る(日本語の入力中は除く)
Escape / Tabメニューを閉じてトリガーにフォーカスを戻す。Tab はそのまま次の要素へ進む

アクセシビリティ

  • トリガーに aria-haspopup="menu"、aria-expanded、aria-controls が付く。メニューは role="menu"、項目は role="menuitem"
  • 項目を選ぶとメニューが閉じ、フォーカスはトリガーに戻る
  • disabled の項目は aria-disabled になり、矢印キーの移動から外れる
  • 削除など危険な操作は項目のラベルで明示し、Dialog で確認する

文言

  • 項目は動詞で書き、語尾をそろえる(「名前を変更」「複製」「削除」)
  • 危険な操作は区切りを入れて、最後に置く

関連するコンポーネント