文章

Text Fragments

Hash Tag

当读到一篇文章发现非常不错的段落想要分享给别人?通常我们知道在前端里面有个概念叫“锚点”,也就是 <a href="#SomeTitleId">Title</a> 可以点击直接定位到我们想要定位对应的位置(某个id 属性的值为 SomeTitleId 的标签,如 <div id="SomeTitleId"></div> )。此时网站开发着会将各个段落都会打好“锚点”,当我们点击后,浏览器 URL 栏里面的 URL 就会被追加这个锚点 https://example.com#SomeTitleId ,当我们分享的这个 URL 被打开时,就会被自动跳转到标记的位置。

大多数情况下,网站的维护人员会针对有标题或者小标题的文章标注了“锚点”,对于段落本身大多数情况下是没有的。

1
2
3
4
5
6
7
8
<h2 id="title1"><a href="#title1">This is a title</a></h2>
<p>this is paragraph 1.1</p>
<p>this is paragraph 1.2</p>
<p>this is paragraph 1.3</p>
<h2 id="title2"><a href="#title2">This is a title 2</a></h2>
<p>this is paragraph 2.1</p>
<p>this is paragraph 2.2</p>
<p>this is paragraph 2.3</p>

此时如果要想分享 ‘this is paragraph 2.1’ 的话,除非维护人员给每个段落都添加“锚点”,否则就没办法用此方法来定位具体位置,所以这里需要一个更加通用一点的方案。

Text Fragments

一种叫 Text Fragments 的标准可以满足上面描述的情况。

语法

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

:~:

表示接下来就是 Text Fragments 定义了,否则还是会以锚点 方式来解析。

text=

表示需要高亮的文字。

textStart

高亮文字开始部分。

textEnd

高亮位置结束。一般情况下只需要提供 textStart 。不过,当需要高亮的文字比较长的时候,就可以提供长文本的开始文字和结束文字以此来减少 URL 的长度。

比如下面一段文字:

As ominous music plays, a broad-faced, beady-eyed man disguises himself as a street fashion photographer, a lab technician, a businessman and a food delivery driver – he even sets up an online honey trap – to glean sensitive state secrets in various places and industries.

可以使用如下 URL 来匹配:

https://example.com#:~:text=As%20ominous%20music,places%20and%20industries.

prefix-

高亮位置前缀,一般用于区分如果高亮的文字在文章里面出现的位置比较多,就可以用前/后缀的方式给区分出来。

As ominous music plays, a broad-faced, beady-eyed man disguises himself as a street fashion photographer, a lab technician, a businessman and a food delivery driver – he even sets up an online honey trap – to glean sensitive state secrets in various places and industries.

如想要高亮 “a lab technician” 中的 a

https://example.com#:~:text=street%20fashion%20photographer%2C-,a,-lab%20technician%2C%20a

-suffix

高亮文字后缀。

textStart, textEnd, prefix- , 和 -suffix 的值都需要 URL encode 。

高亮文字样式

1
2
3
4
::target-text {
    background-color: blue;
    color: white;
}
本文由作者按照 CC BY 4.0 进行授权

热门标签