Popover API 進入基準版本

異動即將生效!我最迫切的其中一項功能剛好可以透過所有新式瀏覽器導入,也是 Baseline 2024 的正式對象。這項功能是 Popover API。Popover 提供許多在建構多層式介面 (例如工具提示、選單、教學使用者介面等) 的實用原始項目和需求,方便開發人員自行運用。

瀏覽器支援

  • Chrome:114。
  • Edge:114。
  • Firefox:125。
  • Safari:17。

資料來源

彈出式功能的一些簡介如下:

  • 升級為頂層圖層。彈出式視窗會顯示在頁面其餘部分的頂層中,讓您不必再操作 z-index
  • 光源關閉功能。點擊彈出式視窗區域以外的地方,會關閉彈出式視窗並返回焦點。
  • 預設的焦點管理:開啟彈出式視窗後,系統會停止在彈出式視窗中顯示下一個分頁。
  • 無障礙鍵盤繫結。esc 鍵或雙鍵切換鈕會關閉彈出式視窗並返回焦點。
  • 無障礙元件繫結。以語意方式將彈出式視窗元素連結至彈出式視窗觸發條件。

建立彈出式視窗

建立彈出視窗的方法相當簡單。如要使用預設值,您只需要 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>
敬上
,瞭解如何調查及移除這項存取權。
彈出屬性使用的基本範例

如要更精細地控制彈出式視窗,您可以明確設定彈出式視窗類型。例如,使用不含值的裸體 popover 屬性與 popover="auto" 相同。auto 值會啟用淺色關閉行為,並自動關閉其他彈出式視窗。使用 popover="manual",然後您必須新增關閉按鈕、手動彈出式視窗不會關閉其他彈出式視窗,也允許使用者在使用者介面中按一下關閉彈出式視窗。您可以使用下列指令建立手動彈出式視窗:

<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>
敬上
,瞭解如何調查及移除這項存取權。
手動彈出式視窗示例。
,瞭解如何調查及移除這項存取權。

彈出式視窗與強制回應對話方塊

您可能會好奇,當對話方塊存在時,是否需要彈出,答案是:可能不是。

需要注意的是,popover 屬性本身並未提供語意。雖然您現在可以使用彈出式視窗建構類似互動對話方塊的體驗,但兩者之間仍有以下幾個主要差異:

強制回應 <dialog> 元素

  • 使用 dialog.showModal() 開啟。
  • 已透過「dialog.close()」關閉。
  • 將網頁的其餘部分插入。
  • 不支援光源關閉行為。
  • 您可以使用 [open] 屬性設定開啟狀態的樣式。
  • 語意化代表互動式元件,可封鎖與網頁其他部分的互動。

[popover] 屬性

  • 可以透過宣告式叫用器 (popovertarget) 開啟。
  • 已透過 popovertarget (自動彈出式視窗) 或 popovertargetaction=hide (手動彈出式視窗) 關閉。
  • 不會影響網頁的其餘部分。
  • 支援燈光關閉行為。
  • 您可以使用 :popover-open 虛擬類別設定開啟狀態的樣式。
  • 無固有語意。

結論和延伸閱讀

popover 為平台帶來許多令人期待的功能。如要進一步瞭解這個 API,包括功能的無障礙功能以及功能集相關說明文件,建議您閱讀以下文章,進一步瞭解詳情: