モーダルを8つの型に分け、AIへの指示文・動く見本・コードを載せています。
モーダルはどの型を選ぶか
モーダルは、いまの画面の上に重ねて、ほかの操作をいったん止める部品です。便利な反面、読み手の流れを止めるので、まず「ページの中に書けないか」「別のページにしたほうがよくないか」を考えます。そのうえで、確かめてほしいのか、読んでほしいのか、入力してほしいのかで型を選びます。
| こんなとき | 向いている型 |
|---|---|
| 削除や退会のように、やり直しのきかない操作の直前に念を押したい | 確認ダイアログ型 |
| 料金の決まりや用語の説明を、読む人だけに見せたい | 情報表示型 |
| 資料請求など、2〜3項目の入力をページを移らずに受けたい | フォーム入り型 |
| 来店予約のように、選ぶものが2〜4段に分かれる | ステップ型 |
| 店内や施工例の写真を大きく、何枚も見てほしい | 画像拡大型 |
| カートや詳しい情報を、いまのページの横に重ねて見せたい | サイドパネル型 |
| 検索結果の絞り込みを、SP で片手で操作してほしい | ボトムシート型 |
| 会員ページで、お届け先などを一覧を見たまま1件追加・編集したい | SP全画面型 |
開く・閉じるときの動き方は、アニメーション集の部品の動き(モーダルが開いて閉じる)にあります。
申し込みの入力が4項目を超える・添付ファイルがある・申し込みの前に必ず読んでほしい、のどれかに当たるときは、モーダルにせず1枚のページにします。会員ページで登録済みのお届け先などを1件足す・直すときは、SP全画面型が使えます。
どの型でも守ること
- dialog 要素の showModal() で開く。うしろのページを操作できなくする、Esc で閉じる、フォーカスをモーダルの中に閉じ込める、の3つをブラウザが受け持ちます。自前の
divで作るときは、この3つを全部自分で書くことになります。 - 見出しで名前を付ける。
aria-labelledbyでモーダルの見出しと結んでおけば、開いた直後に読み上げソフトがそのモーダルの名前を読みます。 - 閉じる手段を見えるところに置く。× ボタンには
aria-label="閉じる"を付けます。背景を押して閉じてよいかは型で決めます(確認やフォームは閉じない、読むだけのものは閉じてよい)。 - 閉じたときは、開くきっかけになったボタンへフォーカスを返す。Tab キーで移動している人が、元の場所から続けられます。
- 開いている間は、うしろのページをスクロールさせない。ここに載せたコードは
html:has(dialog[open])にoverflow: hiddenを当てています。
よくある質問 (FAQ)
dialog 要素は、show() で開くとうしろも操作できるダイアログ、showModal() で開くとモーダルになります。このページの8つの型は、どれも showModal() で開くモーダルです。