ドロップダウン(アクションメニュー)

クリックで開くアクションメニューの実装比較。グループ化・アイコン付き・ネスト構造など実践的なパターンをインタラクティブに確認できます。

💡 値を選ぶセレクトボックス・コンボボックスをお探しの場合はセレクトボックス・コンボボックスページ →
💡 ネイティブ実装: HTML popover 属性でもドロップダウン的なポップオーバーを実装できます。 ネイティブポップオーバー(popover)→

Mantine Menu

Mantine の Menu は Target / Dropdown のコンポジション API を採用したアクションメニュー専用コンポーネント。 position で12方向の表示位置を制御、withArrow で矢印表示、closeOnItemClick で選択後の動作を制御できる。 グループ化・アイコン・danger・disabled アイテムも標準対応。

Menu.Target / Dropdownposition 12方向withArrowグループ化danger / disabled
読み込み中...
tsx
'use client';
import { MantineProvider, Menu, Button } from '@mantine/core';
import '@mantine/core/styles.css';

export function MantineDropdownDemo() {
  return (
    <MantineProvider>
      <div className="flex gap-4 flex-wrap">
        {/* アクションメニュー */}
        <Menu>
          <Menu.Target>
            <Button variant="default">操作メニュー ▾</Button>
          </Menu.Target>
          <Menu.Dropdown>
            <Menu.Label>ファイル操作</Menu.Label>
            <Menu.Item>📄 新規作成</Menu.Item>
            <Menu.Item>💾 保存</Menu.Item>
            <Menu.Divider />
            <Menu.Item color="red">🗑️ 削除</Menu.Item>
          </Menu.Dropdown>
        </Menu>

        {/* アイコンボタン型 */}
        <Menu>
          <Menu.Target>
            <Button variant="outline" color="gray">⋮ 詳細</Button>
          </Menu.Target>
          <Menu.Dropdown>
            <Menu.Item>✏️ 編集</Menu.Item>
            <Menu.Item>📋 複製</Menu.Item>
            <Menu.Item color="red">🗑️ 削除</Menu.Item>
          </Menu.Dropdown>
        </Menu>
      </div>
    </MantineProvider>
  );
}

🤖 AIプロンプトテンプレート

React + Tailwind CSSで、Mantineを使ったドロップダウンメニューを実装してください。
- 使用ライブラリ: @mantine/core の Menu・Select・MultiSelect コンポーネント
- Menu.Target と Menu.Dropdown のコンポジション API でアクションメニューを実装
- position prop でメニューの表示位置を制御(bottom-start・top-end など12方向)
- Select コンポーネントで単一選択フォームを実装(searchable prop で検索対応)
- MultiSelect コンポーネントで複数選択フォームを実装(maxValues で最大選択数を制限)
- group キーでアイテムのグループ化を実現
- クリア機能(clearable prop)とデフォルト値の設定

⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。

ライブラリ比較

項目MantineAnt Designshadcn/uiChakra UIMUICSS カスタム
アクションメニュー✅ Menu(Target/Dropdown)✅ Dropdown(items配列)✅ DropdownMenu(Radix UIベース)✅ Menu(Root/Trigger/Content)✅ Menu + MenuItem⚠️ 自作コンポーネント
メイン+メニューボタン⚠️ 手動で構成✅ Space.Compact統合⚠️ 手動で構成⚠️ 手動で構成⚠️ 手動で構成⚠️ 手動で構成
danger アイテム✅ color="red"✅ danger prop✅ variant="destructive"✅ color="red.500"✅ sx={{ color: 'error.main' }}✅ dangerフラグ
disabled アイテム✅ disabled prop✅ disabled prop✅ disabled prop✅ disabled prop✅ disabled prop✅ disabled フラグ
グループ化 / ラベル✅ Menu.Label✅ type: 'group'✅ DropdownMenuGroup✅ Menu.ItemGroup✅ ListSubheader⚠️ 手動レンダリング
表示位置制御✅ position 12方向✅ placement 8方向✅ side / align✅ placement prop✅ anchorEl + anchorOrigin⚠️ CSS で手動
アクセシビリティ✅ WAI-ARIA準拠✅ WAI-ARIA準拠✅ 自動(Radix UI)✅ WAI-ARIA準拠✅ WAI-ARIA準拠⚠️ 手動対応が必要
バンドルサイズ⚠️ 中(全体で大)⚠️ 中(全体で大)✅ 使った分だけ⚠️ 中(emotion含む)⚠️ 中(Emotion込み)✅ ゼロ追加

選択のポイント

  • Mantine — Menu の Target/Dropdown コンポジション API が直感的で柔軟。 position で12方向の表示位置を制御でき、グループ化・danger・disabled・withArrow も 標準サポート。Mantine を採用しているプロジェクトなら統一感を保ちながら使いやすい。
  • Ant Design — Space.Compact と組み合わせることでメインアクション+メニューを1セットで実現できる点が便利。 items 配列による宣言的な定義で可読性が高く、danger・disabled・グループ化も items レベルで設定できる。 trigger で click・hover・contextMenu を切り替えられる柔軟さも特徴。
  • Chakra UI — Menu.Root / Trigger / Content の複合コンポーネントパターンで構成。 Portal で DOM 外にレンダリングするため z-index の問題が起きにくい。 asChild prop で任意の要素をトリガーにできる柔軟性がある。
  • MUI — 週670万DLと圧倒的なシェアを誇るMaterial Design準拠のライブラリ。anchorEl でメニュー表示位置を 制御し、sx prop でスタイルをきめ細かく調整できる。エンタープライズ〜スタートアップまで幅広く採用され、 ドキュメントや事例が豊富。
  • shadcn/ui — Radix UI ベースでアクセシビリティが高く、キーボード操作・スクリーンリーダー対応が標準装備。 DropdownMenuCheckboxItem や RadioItem など、メニュー内の状態管理も宣言的に書ける。 コードが手元にあるため、スタイルの完全カスタマイズが可能。
  • CSS カスタム — デザインを完全にコントロールしたい場合や外部ライブラリを避けたい場合に最適。 useClickOutside・開閉アニメーション・グループ化・danger を自前実装するため学習コストはあるが、 デザインシステムへの完全準拠・軽量化を優先する場面では選ぶ価値がある。

ドロップダウンメニューは、ボタンやリンクをクリック・ホバーすると選択肢のリストが展開するUIコンポーネント。コンテキストメニューとも呼ばれる。

ナビゲーションのサブメニュー・「…」メニューのアクション一覧・テーブル行の操作メニュー・フィルター選択など、限られたスペースに複数のアクションを格納する場面で使われる。

主なバリエーション
  • 基本ドロップダウン型
  • アイコン付き型
  • 区切り線付き型
  • ネストメニュー型(サブメニュー)
  • コンテキストメニュー型(右クリック)