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

Joey Arhar
Joey Arhar

收合內容部分 (有時稱為「摺疊」) 是常見的 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 的容器內,為巢狀元素加上框線。