モーダルをシンプルに実装!dialog要素の完全ガイド

モーダルダイアログを実装するには、これまではJavaScriptで複雑なコードを書くのが一般的でした。
しかし、HTML5で登場した要素を使えば、最小限のJavaScriptだけでモーダルダイアログを作成できます。

この記事では、基本的な使い方から便利な属性、スタイリング方法までを解説します。

基本的な使い方

まずは、もっともシンプルな実装例を見てみましょう。

実行の流れ

  • 1.「開く」ボタンをクリックすると、showModal()メソッドでモーダルが表示されます。
  • 2.「閉じる」ボタンをクリックすると、close()メソッドで非表示になります。

上記のコードでは、ボタンをクリックするとモーダルダイアログが開き、中の「閉じる」ボタンをクリックすると閉じます。
JavaScriptのコードは最小限で済み、簡単に実装できるのが魅力です。

比較:dialogあり vs なし

項目 dialogを使う 自作モーダル
HTML構造 dialogタグ1つ + コンテンツ div + オーバーレイ + コンテンツ
開閉処理 showModal() / close() のみ クラス追加・削除
閉じる動作 自動的にESCキー対応、フォーカス制御あり ESCやフォーカス管理は自分で実装が必要
背景の暗転 ::backdrop 疑似要素で簡単に指定可能 要素を自分で作成 + 管理が必要
アクセシビリティ 標準でサポート 独自に実装が必要
自由度 標準挙動の範囲内で制御 完全に自由にカスタマイズ可能
コード量(基本実装) 約15〜20行 約25〜35行
コード量(実用レベル) 増えにくい 増えやすい

dialog要素を使った場合と使わない場合の主な特徴を比較したものです。プロジェクトの要件に合わせて、どちらが適しているかを判断する際の参考にしてください。

属性

closedby属性

closedby属性は、dialog要素の閉じる方法を細かく制御するための属性です。

この属性を使えば、誤操作で閉じてはいけない重要な確認ダイアログなども安全に設計できます。

autofocus属性

ダイアログ内の特定のボタンや入力欄に自動でフォーカスを当てたい場合に使用します。
たとえば、閉じるボタンに自動フォーカスさせたい場合は次のように書きます。

CSSでのスタイリング

dialog要素は、通常のHTML要素と同様にCSSで自由にデザインできます。
また、モーダル表示時には::backdropという疑似要素を使って背景のスタイルも変更できます。

さらに、:modal疑似クラスを利用することで、「開いている状態だけ」デザインを変えることも可能です。

対応ブラウザ

主要なモダンブラウザではすでに対応済みです。
詳細はこちらで確認できます。

まとめ

dialog要素を使うと、これまで手間のかかっていたモーダルダイアログをとてもシンプルに実装できます。
showModal()close()メソッドを呼び出すだけで開閉でき、ESCキー対応やフォーカス制御などの基本機能も標準で備わっています。
一方で、挙動を細かくカスタマイズしたい場合や、独自のアニメーション・デザインを重視する場合は、自作モーダルの方が自由度は高くなります。
手軽さ重視ならdialog、デザインや動きにこだわりたいなら自作モーダル。目的に合わせて上手に使い分けてみましょう。

この記事を気に入ったら

しょうしょ

しょうしょ

好きな色は水色で、スマホケース、洋服、迷ったらだいたい水色です。

この人が書いた記事を見る >>