ダイアログ

モーダル ダイアログは、ウェブページ上の特別なタイプのポップアップ ボックスで、ユーザーの操作を妨げるポップアップです。他にも ダイアログをポップアップする有効なユースケースをいくつか紹介していますが、 決定する必要がありますモーダル ダイアログは、ユーザーに特定のコンテンツへのフォーカスを強制し、少なくとも一時的に無視するよう強制する これについては後ほど説明します

ダイアログは、モーダル(ダイアログ内のコンテンツのみ操作可能)と非モーダル(操作は可能)のいずれかにできます。 ダイアログ外のコンテンツを含む)。モーダル ダイアログは、他のページ コンテンツの上に表示されます。その他 デフォルトで、半透明な背景で隠されます。

ダイアログを作成するセマンティック HTML の <dialog> 要素 には、セマンティクス、キーボード操作、HTMLDialogElement インターフェースのすべてのプロパティとメソッドが付属しています。

モーダル <dialog> の例を次に示します。[モーダル ダイアログを開く] でダイアログを開く] ボタンを離します。開いた後、ダイアログを閉じる方法は 3 つあります。1 つは、Esc キー、もう 1 つは、 formmethod="dialog" があるボタン set(またはフォーム自体に method="dialog" が設定されている場合)、および HTMLDialogElement.close() メソッドを使用します。

HTMLDialogElement には 3 つの主要なメソッドがあり、HTMLElement から継承されたすべてのメソッドが含まれます。

dialog.show() /* opens the dialog */
dialog.showModal() /* opens the dialog as a modal */
dialog.close() /* closes the dialog */

この<dialog>HTMLDialogElement.showModal() 経由で開かれたためです メソッドであり、これはモーダル ダイアログです。モーダル ダイアログを開くと、ダイアログ自体が無効になり、それ以外はすべて不明瞭になります。もし ダイアログの外側の UI にカーソルを合わせると、すべての要素が pointer-events: none; のように動作していることがわかります。 が設定されました。ダイアログを開くボタンも操作に反応しません。

ダイアログを開くと、ダイアログにフォーカスが移動します。そのダイアログ内のキーボード ナビゲーション順序の最初の要素にフォーカスが設定されます。 tab キーを何度か押すと、モーダル ダイアログが表示されている間は、ダイアログ内のコンテンツのみがフォーカスされます。 表示されます。モーダル ダイアログ以外は、ダイアログが開いている限り無効です。

ダイアログを閉じると、モーダルにかかわらず、ダイアログを開いた要素にフォーカスが戻ります。プログラマティックに ユーザーの操作に基づかないダイアログを開き、再検討してください。必要に応じて、フォーカスをダイアログが開く前の位置に戻してください。 ユーザーがダイアログを操作せずに閉じた場合に特に顕著です。

グローバル属性 inert を使用すると、有効な要素以外のすべての子孫要素を無効にできます。 クリックします。showModal() を使用してモーダル ダイアログを開くと、不活性化または非アクティブ化は無料になります。属性 明示的に設定されていない場合です。

ダイアログ以外のすべてを隠す背景は、::backdrop を使用してスタイル設定できます。 作成します。背景は、.showModal() メソッドで <dialog> を表示した場合にのみ表示されます。この疑似要素は FullScreen API の使用時に表示されるものを含め、すべての背景に一致 たとえば、画面やモニターのアスペクト比とは異なるフルスクリーン モードで動画を視聴している場合などです。

非モーダル ダイアログ

HTMLDialogElement.show() も同様にダイアログを開きますが、背景を追加したり、何かが不活性になったりすることはありません。 Esc キーで非モーダル ダイアログが閉じません。そのため、メソッド名に必ずメソッドを含めることが重要です。 閉じることができます。これにより、閉じるとダイアログの外側にある要素にフォーカスが移動することを確認できます。 によってダイアログが開かれたためです。ユーザー エクスペリエンスが最適ではない可能性があります。

ダイアログを閉じるボタンは仕様で正式に義務付けられていませんが、必須と見なします。Esc キー モーダル ダイアログは閉じますが、非モーダル ダイアログは閉じません。フォーカスを取得できるボタンが表示されていれば、アクセシビリティが向上し、 向上させることができます

ダイアログを閉じる

ダイアログを閉じるために HTMLDialogElement.close() メソッドは必要ありません。JavaScript はまったく必要ありません。<dialog> を閉じる JavaScript を使用しない場合は、<form> または formmethod="dialog"method="dialog" を設定して、ダイアログ メソッドのあるフォームを含めます。 クリックします。

ユーザーが dialog メソッド経由で送信したとき、ユーザーが入力したデータの状態が維持されます。送信イベントが発生している間、 フォームに制約の検証が行われます(novalidate が設定されていない場合)。ユーザーデータの消去も送信も行われません。 JavaScript を使用しない閉じるボタンは、次のように記述できます。

<dialog open>
  <form method="dialog">
    <button type="submit" autofocus>close</button>
  </form>
</dialog>

お気づきかもしれませんが、autofocus 属性は この例では、閉じる <button> に設定されています。<dialog> 内で autofocus 属性が設定された要素 ページの読み込み時にフォーカスする(ダイアログが表示された状態でページが読み込まれていない場合)。ただし、ダイアログが開いているときはフォーカスが当たります。

デフォルトでは、ダイアログが開かれたときに、別のものがない限り、ダイアログ内の最初のフォーカス可能な要素がフォーカスされる 要素に autofocus 属性が設定されている。閉じるボタンに autofocus 属性を設定すると、 このメソッドは、ダイアログが開いたときにフォーカスを受け取ります。ただし、<dialog> 内の autofocus を含む 慎重に行う必要があります。オートフォーカス要素よりも前にあるシーケンス内のすべての要素はスキップされます。 この属性については、フォーカス レッスンで詳しく説明します。

HTMLDialogElement インターフェースには returnValue が含まれます。 プロパティです。method="dialog" を使用してフォームを送信すると、returnValue が、送信ボタンの name(存在する場合)に設定されます。 フォームを送信します。<button type="submit" name="toasty">close</button> と記述した場合、returnValuetoasty になります。

ダイアログが開かれたとき、ブール値 open 属性 が存在している場合、ダイアログがアクティブで、操作が可能です。代わりに open 属性を追加してダイアログを開くと、 .show().showModal() を使用する場合よりも、ダイアログはモーダルレスになります。HTMLDialogElement.open プロパティは、ダイアログが操作可能かどうか(モーダルかどうかではなく)に応じて true または false を返します。

ダイアログを開く場合は JavaScript を使用することをおすすめします(ページの読み込み時に open 属性を含め、その後で削除します)。 .close() を使用すると、JavaScript が無効な場合でもダイアログを利用できるようにできます。

補足情報

tabindex を使用しない

ダイアログを開くために有効化された要素と、ダイアログに含まれる閉じるボタン(場合によっては他のコンテンツ)は、 焦点を絞ってインタラクティブに なるようにします<dialog> 要素はインタラクティブではなく、フォーカスを受け取りません。tabindex プロパティを追加しない 直接ダイアログに追加します。

ARIA ロール

暗黙的なロールは dialog です。ダイアログで 確認やその他のユーザーからの返信を必要とする重要なメッセージを伝える確認ウィンドウであり、role="alertdialog" を設定します。 ダイアログにわかりやすい名前も付けてください。表示されるテキストでユーザー補助機能用の名前を提供できる場合は、aria-labelledby="idOfLabelingText" を追加します。

CSS のデフォルト

なお、ブラウザでは dialog のデフォルトのスタイルが提供されています。Firefox、Chrome、Edge で color: CanvasText; background-color: Canvas; に設定 Safari はユーザー エージェント スタイルシートで color: black; background-color: white; を設定します。colorbody または :root ではなく、dialog から。これは予期しない可能性があります。background-color プロパティは継承されません。

理解度をチェックする

ダイアログの要素に関する知識をテストします。

ダイアログの背後にある領域のスタイルはどのように行いますか?

::background 疑似要素を使用。
もう一度お試しください。
::backdrop 疑似要素を使用。
正解です。
background プロパティを使用する場合。
もう一度お試しください。