Popover API
モーダル・ドロップダウン・ツールチップなどのレイヤーUIはこれまで全てJSで実装する必要があった。popover 属性を使うと、HTMLとCSSだけでトグル可能なポップオーバーを実装でき、アクセシビリティも自動的に確保される。
概要
モーダル・ドロップダウン・ツールチップなどのレイヤーUIはこれまで全てJSで実装する必要があった。popover 属性を使うと、HTMLとCSSだけでトグル可能なポップオーバーを実装でき、アクセシビリティも自動的に確保される。
対応ブラウザ
デスクトップ
Chrome 116+
Edge 116+
Safari 17+
Firefox 125+
モバイル
Chrome Android 116+
Safari iOS 18.3+
Firefox Android 125+
基本構文
HTML
<button popovertarget="my-menu">メニューを開く</button>
<div id="my-menu" popover>
<ul>
<li>項目1</li>
<li>項目2</li>
</ul>
</div>
[popover] {
border: none;
border-radius: 8px;
padding: 1rem;
box-shadow: 0 4px 24px rgba(0,0,0,.12);
}
[popover]::backdrop {
background: rgba(0,0,0,.3);
} 実務での使いどころ
-
ナビゲーションメニュー
ハンバーガーメニューやドロップダウンナビゲーション。JSゼロで開閉が実現できる。
-
情報パネル・ツールチップ
アイコンをクリックしたときに表示される補足情報パネル。backdrop クリックで自動的に閉じる。
注意点
- Firefox 125未満は非対応。
- popover は top-layer に表示されるため、z-index の管理が不要になる一方、スタッキングコンテキストの挙動が変わる点に注意。
アクセシビリティ
- popovertarget を使うとフォーカス管理・aria-expanded・Escape キーでの閉鎖が自動的に処理される。
- 手動でJS実装する場合と比較して、アクセシビリティ対応コストが大幅に下がる。