Popover API が Baseline に移行

まもなく実施されます。私が最も宣伝している機能の一つが、つい最近すべての最新ブラウザで利用可能になり、正式にベースライン 2024 に組み込まれました。この機能が Popover API です。ポップオーバーには、ツールチップ、メニュー、教育用 UI など、階層化されたインターフェースを構築するための優れたプリミティブとデベロッパー アフォーダンスが多数用意されています。

対応ブラウザ

  • Chrome: 114。 <ph type="x-smartling-placeholder">
  • Edge: 114。 <ph type="x-smartling-placeholder">
  • Firefox: 125。 <ph type="x-smartling-placeholder">
  • Safari: 17。 <ph type="x-smartling-placeholder">

ソース

ポップオーバー機能のハイライトをいくつか紹介します。

  • 最上位レイヤへのプロモーション。ポップオーバーは、ページの他の上にある最上位レイヤに表示されるため、z-index をいじる必要はありません。
  • ライトを閉じる機能。ポップオーバー領域の外側をクリックすると、ポップオーバーが閉じてフォーカスが戻ります。
  • デフォルトのフォーカス管理。ポップオーバーを開くと、そのポップオーバー内で次のタブが停止します。
  • ユーザー補助のキーボード バインディング。esc キーを押すか、2 回切り替えると、ポップオーバーが閉じてフォーカスが戻ります。
  • アクセス可能なコンポーネント バインディング。ポップオーバー要素をポップオーバーに接続すると、意味的にトリガーされます。

ポップオーバーを作成する

ポップオーバーの作成はとても簡単です。デフォルト値を使用するには、ポップオーバーをトリガーする button と、トリガーする要素のみが必要です。

  • まず、ポップオーバーにする要素に popover 属性を設定します。
  • 次に、ポップオーバー要素に一意の id を追加します。
  • 最後に、ボタンをポップオーバーに接続するには、ボタンの popovertarget をポップオーバー要素の id の値に設定します。

次のコードに、この例を示します。

<button popovertarget="my-popover">Open Popover</button>

<div id="my-popover" popover>
  <p><p>I am a popover with more information. Hit <kbd>esc</kbd> or click away to close me.<p></p>
</div>
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">で確認できます。
popover 属性の基本的な使用例

ポップオーバーをより細かく制御するには、ポップオーバーのタイプを明示的に設定します。たとえば、値なしでベアの popover 属性を使用することは、popover="auto" と同じになります。auto 値を指定すると、消灯動作が有効になり、他のポップオーバーが自動的に閉じられます。popover="manual" を使用すると、閉じるボタンを追加する必要があります。手動のポップオーバーは他のポップオーバーを閉じたり、ユーザーが UI でクリックしてポップオーバーを非表示にしたりできるようにします。以下を使用して手動ポップオーバーを作成します。

<button popovertarget="my-popover" class="trigger-btn"> Open Popover </button>

<div id="my-popover" popover=manual>
  <p>I am a popover with more information. Hit the close button or toggle to close me.<p>
  <button class="close-btn" popovertarget="my-popover" popovertargetaction="hide">
    <span aria-hidden="true">❌</span>
    <span class="sr-only">Close</span>
  </button>
</div>
<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">で確認できます。
手動ポップオーバーの例。
で確認できます。

ポップオーバーとモーダル ダイアログ

ダイアログが存在する場合にポップオーバーが必要かどうか疑問に思う方もいるかもしれませんが、その必要はありません。

ポップオーバー属性自体は、セマンティクスを提供しません。また、ポップオーバーを使用してモーダル ダイアログのようなエクスペリエンスを構築できるようになりましたが、この 2 つにはいくつかの重要な違いがあります。

モーダル <dialog> 要素

  • dialog.showModal() で開店しました。
  • dialog.close() で終了しました。
  • ページの残りの部分を不活性化します。
  • 消灯動作はサポートされていません。
  • [open] 属性を使用すると、開いた状態のスタイルを設定できます。
  • 意味的に、ページの他の部分とのインタラクションをブロックするインタラクティブなコンポーネントを表します。

[popover] 属性

  • 宣言型起動元(popovertarget)で開くことができます。
  • popovertarget(自動ポップオーバー)または popovertargetaction=hide(手動ポップオーバー)で閉じました。
  • ページの他の部分が非アクティブになることはありません。
  • 軽い閉じ方の動作をサポートします。
  • :popover-open 疑似クラスを使用すると、開いた状態のスタイルを設定できます。
  • 固有のセマンティクスはありません。

結論と関連情報

popover によってプラットフォームにもたらされる魅力的な機能は数多くあります。機能のアクセシビリティの詳細や、機能セットに関するドキュメントなど、この API の詳細については、以下を推奨します。