モーダルとダイアログのスタイリング
バックドロップ、配置、アニメーションを使って、ネイティブHTMLのdialog要素とカスタムモーダルをスタイリングします。
「モーダルとダイアログのスタイリング」はCoddyKit上の無料CSS Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCSS Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CSS Academyコースには全4レッスンが含まれています。
ネイティブの dialog 要素
HTML の <dialog> 要素は、フォーカストラップ、Escape キーでの終了、showModal() / close() API など、組み込みのモーダル動作を提供します。カスタムモーダルの土台を最初から構築するのではなく、CSS でスタイルを設定してください。
backdrop のスタイル設定
::backdrop 疑似要素を使うと、開いている <dialog> の背後にあるオーバーレイをスタイル設定できます。半透明の背景を適用します。dialog::backdrop { background: rgba(0,0,0,0.5); backdrop-filter: blur(4px); } のように指定します。ラッパーの div は必要ありません。
dialog のレイアウト
CSS で dialog を中央揃えにします。dialog { margin: auto; max-width: min(90vw, 640px); max-height: 90vh; overflow-y: auto; } のように指定します。dialog に margin: auto を使うと、JavaScript で位置を計算しなくてもビューポートの中央に配置できます。
スクロールとオーバーフロー
長いコンテンツを処理するには、dialog 自体に overflow-y: auto を設定します。モーダルが開いたときに body に overflow: hidden を設定すると、背景のスクロールを防げます。JavaScript でクラスを追加・削除して、この状態を切り替えてください。
CSS によるアニメーション
@starting-style(Chrome 117 以降)を使うと、JavaScript なしで dialog の表示時アニメーションを CSS だけで実装できます。より広いブラウザー対応が必要な場合は、JavaScript で open クラスを追加し、transform と opacity に transition を使います。translateY(20px) から translateY(0) へ移動するスライドアップなどが可能です。
終了アニメーションの課題
dialog の終了アニメーションは難しい処理です。close() を呼び出すと dialog がすぐに非表示になるためです。解決策として、終了アニメーションをネイティブでサポートする popover API を使うか、JavaScript で終了処理を横取りし、終了アニメーション用のクラスを適用してから、アニメーション終了後に close() を呼び出します。
z-index の管理
dialog はページ上のほかのすべてのコンテンツより上に開きます。dialog 自体に z-index を設定する必要はありません。ネイティブの stacking context を使うことで z-index の競合を避けられます。dialog は top layer に描画され、すべての CSS の z-index 値より上に表示されます。
レスポンシブな dialog
モバイルでは、dialog をシートとして画面下部からスライド表示します。dialog { margin: auto auto 0; width: 100%; border-radius: 16px 16px 0 0; max-height: 90vh; } のように指定します。デスクトップでは、margin: auto パターンを使って従来のモーダルのように中央揃えにします。
フォーカス管理
ネイティブの dialog 要素は、開いたときに内部の最初のフォーカス可能な要素へ自動的にフォーカスを移します。dialog 内の Tab 移動が論理的な順序になるようにしてください。適切なキーボード操作の流れを実現するため、dialog が閉じたときにトリガー要素へフォーカスを戻す閉じるボタンを追加します。
アクセシビリティ属性
dialog のタイトルを指す aria-labelledby と、dialog の説明を指す aria-describedby を追加します。<dialog> では dialog ロールが暗黙的に設定されます。スクリーンリーダーは、フォーカスが dialog に入ったときにこれらのラベルを読み上げます。
確認ダイアログのパターン
確認ダイアログには、明確な質問形式のタイトル、影響を簡潔に説明する文、破壊的な操作のボタン(赤色で右寄せ)、キャンセルボタン(左寄せまたはセカンダリ)が必要です。キャンセルボタンに autofocus を使うと、安全な選択肢がキーボード操作のデフォルトになります。
理解度チェック
カスタムの div ベースのモーダルと比べて、ネイティブの <dialog> 要素を使う利点は何ですか?
まとめ
::backdrop、margin: auto による中央揃え、オーバーフロー制御、表示時の CSS アニメーション、フォーカス管理を備えたネイティブの dialog 要素によって、アクセシブルで CSS 主体のモーダルパターンを実現できます。モバイル向けのレスポンシブなシートレイアウトと適切な ARIA 属性を加えることで、実運用に対応した dialog コンポーネントが完成します。
AI チューターと学ぶ CSS — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 40
- レッスン
- 159
よくある質問
「モーダルとダイアログのスタイリング」レッスンは無料ですか?
はい。「モーダルとダイアログのスタイリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CSS Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CSS Academyコースには全4レッスンが含まれています。
「モーダルとダイアログのスタイリング」で何を学びますか?
バックドロップ、配置、アニメーションを使って、ネイティブHTMLのdialog要素とカスタムモーダルをスタイリングします。 ブラウザで直接実行するハンズオンコードでCSS Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CSS Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCSS Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「モーダルとダイアログのスタイリング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCSS Academyレッスンでコードを書いて実行できますか?
はい。すべてのCSS Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。