Popover API 進入基準版本

異動即將生效!我最引頸期盼的功能之一,就是在所有新版瀏覽器上推出,並正式在 Baseline 2024 中推出。這項功能是 Popover API。Popover 提供許多出色的基本功能,以及為開發人員提供多層式介面,例如工具提示、選單、教學 UI 等。

瀏覽器支援

  • 114
  • 114
  • 125
  • 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,包括功能詳細資訊,以及功能集的說明文件,請參閱下列文章,進一步瞭解詳細資訊: