<dialog> はモーダルとダイアログ用のネイティブ要素です。フォーカストラップ、バックドロップ、トップレイヤー、Escape キーでの閉じる機能を処理します — これらはそうでなければ、大量の JavaScript と ARIA で手作業で構築する必要があります。
html
Confirm
Are you sure?
Cancel
OK
const modal = document.getElementById("myModal");
modal.showModal(); // opens as a MODAL: backdrop + focus trapped + Esc closes
modal.show(); // opens as a NON-modal (no backdrop, page stays interactive)
modal.close("ok"); // closes, sets returnValue
modal.addEventListener("close", () => {
console.log(modal.returnValue); // "ok" or "cancel" — from the button's value
});
::backdrop でスタイル可能で、外側のクリックは検出可能です。z-index に関わらず、すべての上に描画されます。method="dialog" がフォーム上にあると、ダイアログを閉じ、どのボタンが送信されたかを記録します。dialog::backdrop { background: rgba(0, 0, 0, 0.5); }
dialog { border: none; border-radius: 8px; padding: 2rem; }
<dialog> 以前は、アクセス可能なモーダルには手動フォーカス管理、ARIA ロール、スクロールロック、Escape 処理が必要でした — これはバグの原因として悪名高いものです。
ネイティブ要素はこれらすべてを正しくボックスから提供します。
真のモーダルには showModal() を使用してください。これはダイアログの現代的でアクセス可能なデフォルトです。