モーダルのUIデザイン

モーダル(ページの上に重ねて開く画面)のUIデザインを、設計パターンとして整理したページです。
元に戻せない操作の確認なのか、補足の情報や写真を見せるのか、短い入力を受けるのか、SPでどこから出すのかによって、向いている型が変わります。
開き方・閉じ方・操作の閉じ込め方をそろえ、読み手が今どこを操作しているかを見失わないようにするための型をまとめています。

5 patterns

型の選び方を見る ↓

モーダルの型の一覧

モーダルの型の選び方

モーダルの型は、「モーダルで何をしてもらうか」「背景を押したときに閉じてよいか」「SPでどこから出すか」の3つで変わります。問い1で型を選び、問い2で閉じ方を、問い3で出す位置を決めます。その前に、モーダルにせずページや開閉式で足りないかも確かめます。型を選んだら、各Patternのページでワイヤーフレームとプロンプト、動くデモを確認できます。

問い1:モーダルで、何をしてもらいますか?

モーダルは読み手の操作を止めるため、目的がはっきりしているときだけ使います。

してもらうこと向く型
元に戻せない操作の前に、確認を取る確認ダイアログ型
作業の途中で、補足の情報を確かめてもらう情報表示型
写真を大きくして、順番に見比べてもらう画像拡大型
2〜3項目の短い入力を、ページを移らずに済ませてもらうフォーム入り型
一覧を見ながら、絞り込みの条件を選んでもらうボトムシート型

問い2:背景を押したときに、閉じてよいですか?

誤って閉じたときに困るかどうかで決めます。

状況閉じ方
見せるだけで、閉じても何も失わない背景・Escキー・閉じるボタンで閉じる(情報表示型・画像拡大型・ボトムシート型)
入力の途中で、閉じると内容が消える背景では閉じない。入力済みで閉じるときは破棄の確認も検討する(フォーム入り型)
確認の結果が、閉じ方で分からなくなるボタンで選んで閉じる。Escキーは取り消しとして扱う(確認ダイアログ型)

問い3:SPでは、どこから出しますか?

後ろの画面との関係を保つかどうかで決めます。

状況向く出し方
その場の操作に集中してもらう画面の中央に、左右に少し余白を残して出す(確認ダイアログ型・フォーム入り型)
後ろの一覧を見ながら選んでもらう画面の下から、画面いっぱいにしない高さ(目安として8割程度)で出す(ボトムシート型)
写真を大きく見せる画面いっぱいに出す(画像拡大型)

モーダルの型の比較

型役割背景で閉じるか向く状況
確認ダイアログ型確認の取り方閉じない取り消しや削除など、元に戻せない操作の前
情報表示型補足の見せ方閉じる作業の途中で、決まりや説明を確かめてもらう
画像拡大型画像の見せ方閉じる写真の枚数が多く、大きく見比べてもらいたい
フォーム入り型入力の受け方閉じない資料の請求など、2〜3項目で済む申し込み
ボトムシート型SPでの出し方閉じる一覧を見ながら、絞り込みの条件を選んでもらう

すべての型に共通する設計の原則

モーダルの型を作る中で、型が違っても繰り返し出てきた原則です。どの型を選んでも、次の点は同じように確かめます。

  • dialog 要素を showModal() で開くか、独自に作るなら role="dialog" と aria-modal="true" を付け、題名を aria-labelledby で結び付ける。すぐに注意と応答を求める重要な確認では role="alertdialog" も選択肢にする
  • 開いたら内容に合った最初の要素へ移し、閉じたら開いたボタンに戻す。短いフォームなら最初の入力欄、長い説明なら見出しや冒頭の文(tabindex="-1")も候補にする
  • 開いている間は、Tabキーの移動をモーダルの中に閉じ込め、後ろのページを操作できないようにする
  • 閉じる方法を文字のボタンで示し、Escキーでも閉じられるようにする
  • 開くボタンの名前で、何が開くかを伝える。「こちら」にしない
  • モーダルの上にモーダルを重ねない。長い内容や項目の多い入力は、ページにする
  • 読み手が押したときに開く形を基本にし、ページを開いた直後に自動で出さない

組み合わせの例

よくある質問

モーダルは、使わないほうがよいのですか?

モーダルは読み手の操作を止めるため、多用すると邪魔になります。確認・補足・拡大・短い入力など、その場で済ませたほうがよい場面に絞って使えば、作業の流れを保つ助けになると考えられます。

モーダルは、dialog 要素で作ったほうがよいですか?

dialog 要素を showModal() で開くと、後ろのページを操作できない状態やEscキーで閉じる動きをブラウザが用意してくれます。独自に作る場合は、role=dialog と aria-modal=true を付け、操作を閉じ込める処理と閉じたあとに元の場所へ戻す処理を用意します。

ページを開いたときに、自動でモーダルを出してもよいですか?

開いた直後に案内や広告のモーダルを出すと、読みたい内容の前に操作を止めることになり、離れる原因になりやすいと考えられます。読み手が押したときに開く形を基本にします。

背景を押したら、閉じるようにすべきですか?

情報を見せるだけのモーダルなら、背景で閉じられると便利です。入力の途中や確認の画面では、誤って閉じて内容が消えたり、結果が分からなくなったりしないよう、背景では閉じない形にします。