CSS Academy · レッスン

モーダルとダイアログのスタイリング

バックドロップ、配置、アニメーションを使って、ネイティブHTMLのdialog要素とカスタムモーダルをスタイリングします。

レッスン 2/413 ステップ

「モーダルとダイアログのスタイリング」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. CSSカスタムプロパティによるカードコンポーネント
  2. モーダルとダイアログのスタイリング
  3. ドロップダウンとポップオーバーのパターン
  4. タブコンポーネント: :checkedハックとJSの比較
← CSS Academyに戻る