文字片段

文字片段可以直接連結到網頁中的特定文字,而無需頁面作者新增 ID。它們在 URL 片段中使用特殊語法。此功能允許您建立到您不控制且可能沒有相關 ID 的內容的深度連結。透過直接指向特定詞語,還可以使共享連結更有用。瀏覽器在突出顯示連結文字的方式上可能有所不同——通常,文字會被滾動到檢視中並用顏色高亮顯示。

概念與用法

歷史上,Web 的關鍵功能之一一直是其在不同文件之間提供連結的能力——這就是使其成為“Web”的原因。

連結到特定文件片段的問題在於,連結頁面的作者需要放置一個錨點來實際進行連結。上面的第二個示例連結到一個 ID 為 browser_compatibilityh2 元素。

html
<h2 id="browser_compatibility">
  <a href="#browser_compatibility">Browser compatibility</a>
</h2>

並非所有文件都有這樣的錨點,即使有,連結到一個標題可能也比直接連結到您引用的特定文字要不明顯得多。這就是文字片段的作用:它們允許連結作者完全控制要連結到的文字,而無需目標文件中的任何特殊標記。例如,搜尋引擎可能在其搜尋結果中引用特定句子,單擊連結將直接帶您到該句子。

但是,文字片段也有一個侷限性:文件中的文字不如文件結構穩定。如果連結文件中的文字被更新,片段將不再匹配,瀏覽器將導航到頁面頂部。這對於搜尋結果中的瞬時連結來說是可以的,但如果您打算讓連結隨著時間的推移而工作,文件片段可能更可靠。

語法

url
https://example.com#:~:text=[prefix-,]textStart[,textEnd][,-suffix]

文字片段是一種 URL 片段,寫在 # 之後。要理解的關鍵部分如下:

:~:

也稱為片段指令,這一系列字元告訴瀏覽器接下來的是一個或多個使用者代理指令,它們在載入過程中從 URL 中剝離,以便作者指令碼無法直接與它們互動。使用者代理指令也稱為指令。

text=

一個文字指令。這向瀏覽器提供了一個文字片段,定義了在連結文件中要連結的文字。

textStart

一個指定連結文字開頭的文字字串。

textEnd 可選

一個指定連結文字結尾的文字字串。

prefix- 可選

一個後跟連字元的文字字串,指定什麼文字應緊跟在連結文字之前,只允許兩者之間存在空格。這有助於瀏覽器選擇正確的連結文字,在有多個匹配項的情況下。

-suffix 可選

一個後跟文字字串的連字元,指定什麼文字應緊跟在連結文字之後,只允許兩者之間存在空格。這有助於瀏覽器選擇正確的連結文字,在有多個匹配項的情況下。

支援的瀏覽器將滾動到並高亮顯示連結文件中與指定指令匹配的第一個文字片段。請注意,可以透過分隔符(&)字元在同一 URL 中指定多個要高亮的文字片段。

用法說明

  • 用於 textStarttextEndprefix--suffix 值的文字字串需要進行百分比編碼。此外,標準要求 URL 安全的連字元 '-' 也進行類似百分比編碼。

  • 匹配不區分大小寫。

  • 單個 textStarttextEndprefix--suffix 字串需要完全位於同一個塊級元素內,但完整的匹配可以跨越多個元素邊界。

  • 出於安全原因,在使用此功能連結到跨域頁面時,應在 noopener 上下文中開啟連結——您需要將 rel="noopener" 新增到您的 <a> 元素中,並在使用此功能時將 noopener 新增到您的 window.open() 呼叫中。

  • 文字片段僅在使用者發起的導航時呼叫。

  • 文字片段僅應用於主框架;文字將不會在 <iframe> 中搜索,並且 iframe 導航不會呼叫文字片段。

  • 對於希望選擇退出的網站,基於 Chromium 的瀏覽器支援一個 Document Policy 標頭值,它們可以傳送該值,以便使用者代理不會處理文字片段。

    http
    Document-Policy: force-load-at-top
    

注意:如果提供的文字片段在連結文件中未匹配到任何文字,或者瀏覽器不支援文字片段,則整個文字片段將被忽略,並連結到文件頂部。

示例

帶有 textStart 的文字片段

textStart 和 textEnd

帶字首和/或字尾的示例

帶多個文字片段的 URL

您可以透過分隔符(&)字元在同一 URL 中指定多個要高亮的文字片段。讓我們看幾個例子:

如果您沒有看到一個或多個文字片段被高亮顯示,並且您確信語法是正確的,那麼您可能只是高亮了與您預期的不同的例項。它可能已被高亮顯示,但螢幕外。

樣式化匹配的文字片段

瀏覽器可以自由地以任何預設方式樣式化高亮顯示的文字。 CSS 偽元素模組級別 4 定義了一個偽元素 ::target-text,它允許您指定自定義樣式。

例如,在我們的 滾動到文字演示中,我們有以下 CSS:

css
::target-text {
  background-color: rebeccapurple;
  color: white;
}

嘗試在支援的瀏覽器中開啟上面的連結,看看它的效果。

功能可檢測性

可以透過 Document.fragmentDirective 屬性訪問的 FragmentDirective 物件,可用於測試瀏覽器是否支援文字片段。

嘗試在支援的瀏覽器開發者工具中執行以下程式碼,在帶有一個或多個匹配文字片段的標籤頁中:

js
document.fragmentDirective;
// returns an empty FragmentDirective object, if supported
// undefined otherwise

目前,此功能主要用於功能檢測。將來,FragmentDirective 物件可能會包含其他資訊。

參考

API

FragmentDirective

表示文字片段的物件。目前為空,主要用於功能檢測。

Document.fragmentDirective

返回當前文件的 FragmentDirective

CSS

::target-text

表示當前文件中高亮顯示的文字片段。它允許作者自定義文字片段的樣式。

規範

規範
URL Fragment Text Directives
# fragmentdirective
CSS 偽元素模組 Level 4
# selectordef-target-text

瀏覽器相容性

html.elements.a.text_fragments

api.FragmentDirective

css.selectors.target-text

另見