モーダル・ダイアログ(Modal / Dialog)

確認・フォーム・アラートなど、ユーザーの注意を引きつけるオーバーレイUIを、Mantine・Ant Design・shadcn/ui・Chakra UI・MUI・CSS/カスタム の6種で比較。 サイズ・アニメーション・フォーカス制御・Escape キー対応・確認ダイアログなど、実践的なパターンをインタラクティブに確認できます。

💡 ネイティブ実装: ブラウザ標準の <dialog> 要素でも同等のモーダルを実装できます。 ネイティブモーダル(dialog)
🐍 Pythonで作るなら: Streamlit なら st.dialog で同等のモーダルを実装できます。 Streamlit のモーダル(st.dialog)→

ライブラリ比較

項目MantineAnt Designshadcn/uiChakra UIMUICSS カスタム
サイズ指定✅ xs / sm / md / lg / xl / full✅ px / % 指定⚠️ maxWidth クラスで調整✅ size prop(xs / sm / md / lg / xl / full)✅ maxWidth 5段階 + fullScreen⚠️ maxWidth で自作
中央揃え✅ centered prop✅ centered prop✅ デフォルト中央✅ デフォルト中央✅ デフォルト中央✅ flexbox で実装
Escape キー✅ closeOnEscape prop✅ keyboard prop✅ 自動対応✅ 自動対応✅ デフォルトで対応✅ useEffect で実装
背景クリックで閉じる✅ closeOnClickOutside✅ maskClosable✅ 自動対応✅ 自動対応✅ 自動対応✅ backdrop onClick
確認ダイアログ⚠️ useModals / 手動実装✅ Modal.confirm 静的メソッド✅ AlertDialog コンポーネント✅ Dialog.ActionTrigger✅ Dialog + color="error"⚠️ ConfirmDialog コンポーネント自作
フォーム統合✅ Mantine フォームと自然に統合✅ Form.useForm() で管理⚠️ useState で管理⚠️ useState で管理⚠️ useState で管理⚠️ useState で手動管理
アニメーション✅ 組み込み(transitionProps)✅ 組み込み✅ 組み込み✅ 組み込み✅ デフォルトで付与⚠️ CSS animation で自作
スクロール抑制✅ 自動✅ 自動✅ 自動✅ 自動✅ 自動✅ body overflow hidden
バンドルサイズ⚠️ 中(全体で大)⚠️ 中(全体で大)✅ 軽量(コンポーネント単位)⚠️ 中(emotion含む)⚠️ 中(Emotion込み)✅ ゼロ追加

選択のポイント

  • Mantine — xs〜full の6サイズプリセット・centered・overlayProps など設定が豊富。 Mantine のフォームコンポーネントと自然に組み合わせられるため、フォームモーダルを多用するプロジェクトに最適。 ネストモーダルも追加設定なしで動作する。
  • Ant Design — Modal.confirm / Modal.warning / Modal.info の静的メソッドが優秀で、確認ダイアログを1行で呼び出せる。 footer prop で null を渡せばフッターを完全に非表示にでき、任意のJSXでカスタムフッターも作りやすい。 Form.useForm() との組み合わせでフォームバリデーションも簡単に統合できる。
  • MUI — 週670万DLと圧倒的なシェアを誇るMaterial Design準拠のライブラリ。エンタープライズ〜スタートアップまで幅広く採用され、ドキュメントや事例が豊富。Emotion(CSS-in-JS)を使用するため、Tailwind CSS v4との併用時はスタイルをMUI側のpropsで制御することを推奨。
  • shadcn/ui — Dialog と AlertDialog が分離されており、用途に応じたコンポーネントを選べる設計が明快。 WAI-ARIA 準拠でアクセシビリティが高く、Escape キー・背景クリックによる閉じる動作も自動で対応。 Tailwind クラスでスタイルを完全にコントロールでき、既存デザインへの統合がしやすい。
  • Chakra UI — v3 で Modal が Dialog にリネームされ、複合コンポーネントパターンに刷新。 Dialog.ActionTrigger で確認・キャンセルボタンを宣言的に定義でき、 Portal + Backdrop の組み合わせでオーバーレイ表示も明示的に制御できる。
  • CSS カスタム — 依存ゼロで軽量。BaseModal + ConfirmDialog のようにコンポーネントを薄く分割しておくと再利用性が高い。 デザインシステムに完全準拠したスタイルが必要な場合や、ライブラリのオーバーライドが煩雑な場合に有効。 useEffect での Escape キー処理・スクロール抑制も数行で実装できる。

関連する逆引きリファレンス

モーダル(ダイアログ)は、メインコンテンツの上にオーバーレイで表示されるUIコンポーネント。ユーザーの操作に対して確認・入力・情報表示を求める。

削除確認ダイアログ・フォームモーダル・画像ライトボックス・利用規約表示など、ユーザーの注意を一時的にフォーカスさせたい場面で使われる。

主なバリエーション
  • 確認ダイアログ型
  • フォームモーダル型
  • 画像ライトボックス型
  • ドロワー型(横スライド)
  • フルスクリーンモーダル型