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

喬伊阿哈爾
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 的容器內巢狀結構元素加上邊框。

主頁橫幅由 Thomas Bormans 製作。