透過隱藏=until-found 存取收合內容

Joey Arhar
Joey Arhar

收合式內容區段 (有時稱為「Accordion」) 是常見的 UI 模式。不過,如果內容隱藏在摺疊區域中,就無法透過「在頁面中搜尋」功能搜尋。此外,您也無法連結至收合區域內的文字片段

hidden=until-found HTML 屬性和 beforematch 事件可解決這些問題。只要在隱藏內容的容器中加入 hidden=until-found,瀏覽器就能在該隱藏區域中搜尋文字,並在找到相符項目時顯示該區段。

這些功能可在 Chrome 102 以上版本使用,讓我們一起來瞭解這些功能的運作方式。

使用方式

如果網站已有可折疊的部分,而您想讓這些部分可供搜尋,請將隱藏該部分的樣式替換為 hidden=until-found 屬性。如果您的網頁還有其他狀態需要與顯示/隱藏區段的狀態保持同步,請新增 beforematch 事件事件監聽器,在瀏覽器顯示該元素之前,在 hidden=until-found 元素上觸發事件。

注意事項

為提供一致的使用者體驗,hidden=until-found 內容應可在未使用頁面內搜尋功能的情況下顯示。並非所有使用者都會使用「在頁面中尋找」功能,且不支援 hidden=until-found 的瀏覽器會獲得隱藏內容的原始體驗,而不會透過「在頁面中尋找」功能顯示內容。

如要確保隱藏內容可在不支援 hidden=until-found 的瀏覽器中搜尋,您可以隨時在這些瀏覽器中展開隱藏內容。您可以檢查 beforematch 事件處理常式是否存在,藉此執行功能偵測:

if (!(onbeforematch' in document.body)) {
  // expand all hidden content
}

hidden=until-found 會套用 content-visibility:hidden CSS 屬性,而非一般隱藏屬性套用的 display:none 屬性。這項功能可在內容關閉時搜尋內容,但也會產生以下副作用:

  • 部分版面配置 API (例如 getBoundingClientRect) 會回報 hidden=until-found 元素內的隱藏內容會佔用空間,並在頁面中佔有位置。
  • hidden=until-found 元素的子節點不會算繪,但 hidden=until-found 元素本身仍會顯示方塊。也就是說,邊框和明確大小等 CSS 屬性仍會影響算繪作業。

以下範例會在套用 hidden=until-found 的元素中加入邊距、邊框和邊框間距。在隱藏內容顯示的位置,會出現一個灰色邊框的方塊,當隱藏內容顯示時,這個方塊會填入隱藏內容。這是隱藏元素的方塊。

為避免這個問題,請在包含 hidden=until-found 的容器內嵌元素中加入邊框。