ドロップダウン(Dropdown / Select)

クリックで開くメニューや選択UI の実装を4つのアプローチで比較。 アクションメニュー・単一選択・複数選択・グループ化・検索など、実践的なユースケースをインタラクティブに確認できます。

Mantine Menu / Select / MultiSelect

Mantine の Menu はアクションメニュー用で、Target / Dropdown のコンポジション API を採用。 Select / MultiSelect はフォーム向けで、グループ化・検索・クリア・最大選択数に対応。 position でメニューの表示位置を細かく制御できる。

Menu.Target / Dropdownposition制御Select / MultiSelectグループ化検索対応
読み込み中...
tsx
'use client';
import { MantineProvider, Menu, Button, Select } 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.Item>プロフィール</Menu.Item>
            <Menu.Item>設定</Menu.Item>
            <Menu.Divider />
            <Menu.Item color="red">ログアウト</Menu.Item>
          </Menu.Dropdown>
        </Menu>
        <Select
          placeholder="選択してください"
          data={['React', 'Vue', 'Svelte', 'Angular']}
          style={{ width: 200 }}
        />
      </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/uiCSS カスタム
アクションメニュー✅ Menu(Target/Dropdown)✅ Dropdown(items配列)✅ DropdownMenu(Radix UIベース)⚠️ 自作コンポーネント
メイン+メニューボタン⚠️ 手動で構成✅ Dropdown.Button⚠️ 手動で構成⚠️ 手動で構成
trigger(hover/click)✅ trigger prop✅ trigger prop(配列)✅ click(デフォルト)⚠️ イベントで自作
表示位置制御✅ position(12方向)✅ placement(8方向)✅ side・align props⚠️ CSSで固定配置
Selectコンポーネント✅ Select / MultiSelect✅ Select(mode切替)✅ Select(単一選択)⚠️ 自作Select
検索(フィルタ)✅ searchable prop✅ showSearch prop⚠️ Comboboxで別途実装⚠️ query stateで自作
グループ化✅ group キー✅ options with label✅ DropdownMenuGroup⚠️ 手動でレンダリング
クリック外で閉じる✅ 自動✅ 自動✅ 自動(Radix UI)✅ useClickOutsideで実装
バンドルサイズ⚠️ 中(全体で大)⚠️ 中(全体で大)✅ 使った分だけ✅ ゼロ追加

選択のポイント

  • Mantine — Menu の Target/Dropdown コンポジション API が直感的で柔軟。 Select / MultiSelect は検索・グループ・maxValues など実用的な機能が揃っており、 Mantine を採用しているプロジェクトなら統一感を保ちながら使いやすい。
  • Ant Design — Dropdown.Button でメインアクションとメニューを1コンポーネントに収められる点が便利。 items 配列による宣言的な定義で可読性が高く、danger ・disabled も items レベルで設定できる。 管理画面向けの実装が豊富。
  • shadcn/ui — Radix UI ベースでアクセシビリティが高く、キーボード操作・スクリーンリーダー対応が標準装備。 DropdownMenuCheckboxItem や RadioItem など、メニュー内の状態管理も宣言的に書ける。 コードが手元にあるため、スタイルの完全カスタマイズが可能。
  • CSS カスタム — デザインを完全にコントロールしたい場合や外部ライブラリを避けたい場合に最適。 useClickOutside・検索フィルタ・アニメーションをすべて自前実装するため学習コストはあるが、 デザインシステムへの完全準拠・軽量化を優先する場面では選ぶ価値がある。