Design Pattern
ポップオーバー
ポップオーバーは、トリガー要素の近くに補助コンテンツを表示する UI パターンです。Popover API と CSS Anchor Positioning を使うと、表示制御や配置をネイティブに扱えます。
いつ使う / 使わない
使うべきとき
- ドロップダウンメニューやアクションメニューを表示したい場合
- 確認前の軽量な補助 UI を表示したい場合
- ヘルプやプレビューなど追加情報をコンパクトに出したい場合
使わないべきとき
- 短い補足テキストだけなら → ツールチップを使う
- ユーザーの注意を完全に引く必要があるなら → モーダルダイアログを使う
- 常時表示すべき重要情報なら → インライン表示する
構造(Anatomy)
1 トリガーボタン(popovertarget で対象を指定)
2 ポップオーバー本体(popover 属性を持つ要素)
3 コンテンツ領域(テキスト、メニュー、フォームなど)
4 アクションボタン(閉じる、確定など)
- トリガー —
popovertargetで表示対象を関連付ける - ポップオーバー本体 —
popoverまたはpopover="manual"を付ける - コンテンツ領域 — メニューや説明文など用途に応じた内容を置く
- アクション — manual モードでは閉じる手段や確定操作を明示する
HTML 構造
Popover API の基本
- auto モード — 外側クリックや Escape で自動的に閉じる
- manual モード — 明示的な操作でのみ閉じる。確認 UI に向く
重要なポイント
- トリガーには
popovertargetを設定する popovertargetactionで show / hide / toggle を制御できる- トップレイヤーに表示されるため、z-index 問題を避けやすい
- 開いたときのフォーカス移動先を用途に応じて設計する
CSS 実装
CSS Anchor Positioning
- トリガーに
anchor-nameを設定してアンカー化する - ポップオーバーに
position-anchorを付けて参照先を指定する anchor()関数で top / left を相対配置する- 必要なら
insetを解除して配置を明示する
スタイル設計
- ボーダーとシャドウで浮遊感を出す
- max-width を制御して読みやすい幅に収める
- 必要に応じて auto モードの backdrop をスタイリングする
アクセシビリティ
WCAG 2.1.1 キーボード
キーボードで開閉でき、内部コンテンツへ到達でき、閉じる手段も必要です。
WCAG 4.1.2 名前・役割・値
開閉状態と対象の関係が支援技術に分かるよう、構造とラベルを整理します。
WCAG 2.4.3 フォーカス順序
開いたときも閉じたときも、フォーカスの移動先が自然であることが重要です。
キーボード操作
- Enter / Space でトリガーを押して開閉
- Escape で auto モードのポップオーバーを閉じる
- Tab で内部のフォーカス可能要素を移動
ライブデモ
基本ポップオーバー
auto モードを使った基本実装です。
メニューポップオーバー
アクションメニューとして使うパターンです。
確認ポップオーバー
manual モードで明示的に閉じる確認 UI です。
よくある間違い
配置を全部 JavaScript で持つ
Anchor Positioning で足りる場面でもライブラリ前提にすると、実装が重くなります。
キーボード操作を考慮しない
表示できても中に入れないポップオーバーは、メニューや確認 UI として成立しません。
開いた直後にフォーカスできない
manual モードでは特に、最初の操作先を決めておかないとキーボード利用者が迷います。
auto と manual を使い分けない
確認 UI に auto を使うなど、閉じ方が文脈に合っていないと誤操作が増えます。