HTML Popover APIはメニューや補足情報などの非モーダルな内容をページ上に表示します。popover属性を持つ要素は表示時にtop layerへ置かれ、通常のstacking contextによる重なり問題を避けつつ、DOM内の元の位置を保ちます。modal dialogのように背景との操作を自動で遮断しないため、両者は同じ用途ではありません。

Top Layerの非モーダルpopoverとモーダルdialogの比較:popoverは背景操作とlight dismissを許し、モーダルdialogの背景はinertになる

1. 宣言的なpopoverと呼び出し元

popover属性を付けた要素は初期状態で非表示になり、ボタンのpopovertargetから対象IDに結び付けられます。ブラウザーは呼び出し元との関係を知り、基本の表示操作を提供します。JavaScriptからはshowPopover()、hidePopover()、togglePopover()で状態を変更できます。宣言的制御とスクリプト制御を混ぜるときはアプリケーション状態と実際の表示がずれないよう確認します。

top layerに表示されても要素が複製されたり別のDOM親へ移動したりするわけではありません。ソース順、イベント経路、アクセシビリティ上の関係は引き続き重要です。popover内のフォーカス可能要素をキーボードで操作できるようにし、名前と目的を提示します。視覚的に浮いているだけでaccessible dialogになるわけではありません。

2. autoとmanualの閉じ方

popover=autoはブラウザー管理の閉じる動作を備えます。通常は外側のクリックやEscapeによるlight-dismissに対応し、開いたボタンとの関係も扱います。複数のauto popoverが互いに影響せず常に開いたままとは仮定せず、開く順序や入れ子を考えます。実際の動作は呼び出し方や文書内の別popover状態にも関係します。

popover=manualは自動的なlight-dismissを望まない場合に使えます。外側をクリックしてもブラウザーが閉じないため、ページ側で明示的な終了手段を提供します。通知や常時表示したいパネルに適する場合がありますが、閉じるボタンや必要なEscape操作など予測可能な出口を用意します。autoとmanualは見た目だけでなく状態と操作方針を変えます。

3. Popoverとmodal dialogの使い分け

Popoverは非モーダルなoverlayに向きます。開いている間も利用者はページの他の部分を操作できます。一方modal dialogは操作の流れを一時的に限定し、背景とのやり取りを制限します。小さなメニューや補足情報はpopoverに向く場合がありますが、判断を必須にしたり背景操作を止めたりする流れはdialogの意味と動作を別に検討します。

modal dialog elementとpopoverはいずれもtop layerを使うことがあり、z-indexだけで重なり順を予測できません。両方を使うページでは実際の利用者の流れで、どれが先に開閉すべきか試験してください。popoverがフォーカスを閉じ込めたり背景を操作不可にしたりすると期待せず、役割に必要なキーボード操作とフォーカス返却を設計します。

4. 専門家の視点:状態と入力方法を試験する

WHATWG HTML標準はpopover属性、auto・manual状態、呼び出し元、top layer表示、表示・非表示アルゴリズムを定義します。MDNはマークアップとJavaScriptによる操作を説明し、dialogとの違いを整理します。実装では表示メソッドを呼んだかだけでなく、Escape、外側のクリック、呼び出し元の再操作後に状態が意図どおり変わるかを確認します。

キーボード、ポインター、タッチ、拡大表示で同じ流れを試します。短いメニューやヘルプでlight-dismissが必要ならautoを使い、manualでは明示的な閉じ方を決めます。複雑なメニューのキーボード操作やmodal遮断が自動で備わると仮定しないでください。役割、アクセシブルな名前、フォーカス移動を確認すると、top layerの見た目と操作可能性を区別できます。

参考資料