::target-textセレクターについて学ぶ

私の公開アカウントへようこそ:フロントエンドの探偵

最近、MDNの公式ウェブサイトで今まで見たことのないセレクターを見ました。:: target-text

画像-20220315130133817

簡単な調査の結果、少し面白くて実用的だと思いますので、ここで共有します。

1.::target-textは何をしますか

誰もが:targetこのセレクターを使用している必要があります。これにより、URLからページのコンテンツを簡単に照合し、アンカーの配置を実現できます。たとえば、これはドキュメントディレクトリでよく見られます

画像-20220311152329530

ただし、:targetページにはターゲットである要素が含まれている必要がありid、存在しない場合、ページを見つける方法はありません。この問題を解決するために、::target-textそれが登場しました!

文字通り、::target-textは「アンカーテキスト」セレクターを意味します。公式MDNの説明は次のとおりです。

ブラウザがテキストフラグメントへのスクロール機能をサポートしている場合、ブラウザはテキストのこの部分が配置されている場所にスクロールし、ユーザーがテキストのこの部分を強調表示するスタイルをカスタマイズできるようにします。

どういう意味ですか、これが公式の例ですスクロールしてテキストへのデモ

Kapture 2022-03-11 at 15.40.37.gif

このリンクをクリックすると、ブラウザが自動的に指定されたテキストフラグメントにジャンプし、テキストのスタイルが強調表示されます(図の紫色の背景、白いテキスト)。

したがって、::target-textこのパーツのスタイルをカスタマイズするために使用できます

::target-text {
  background-color: rebeccapurple;
  color: white;
}
复制代码

ただし、サポートされるスタイルは比較的制限されており、::selectionほとんどの場合、テキスト関連のスタイルのみがサポートされます。

2.ジャンプ位置の指定方法

次のように、URLでIDを:target指定することで照合が行われることは誰もが知っています。#

http://www.example.com/index.html#section2

<section id="section2">Example</section>
复制代码

今の例に戻ると、ジャンプリンクは次のようになっていることがわかります。

画像-20220314110815216

ご覧の::target-text とおり、次のような対応するルールもあります。

http://www.example.com/index.html#:~:text=textStart
复制代码

这里的textStart就是表示页面中需要跳转的文本内容。不过需要注意的是,如果有多段文本都能够匹配,那么会定位到第一个相匹配的文本(和 id 有点类似)。

三、如何精准的定位

单纯的指定一小段文本,很容易出现定位不准的情况(太容易重复了)。为了解决这个问题,有两个方案

  1. 尽量指定长的文本,这样就不会重复了
  2. 在文本前后加上限制,比如起始点字符

方案一虽然可行,但是也有问题,一是地址栏太长,不太美观,而是我只需要分享这一小段内容出去,不需要那么多。现在看下方案二。这里简单介绍下:~:text的完整语法

#:~:text=[prefix-,]textStart[,textEnd][,-suffix]
复制代码
  • prefix- 前缀文本
  • textStart 文本开始
  • textEnd 文本结束
  • -suffix 后缀文本

从语法上,只有 textStart 是必填,其他都是可选。怎么用的呢?假设我们想定位这一段文本(不包含首尾标点)

画像-20220314112203389

可以直接指定起始字符,Mlle,parachute

#:~:text=Mlle,parachute
复制代码

可以访问这个链接 mdn.github.io/css-example…

效果如下

image-20220314112457339

可以看到定位区域在第一个parachute处就结束了,并没有定位到后面的。这时可以继续限制一下,比如把后面的.加进来,作为后缀

#:~:text=Mlle,parachute,-.
复制代码

可以访问这个链接 mdn.github.io/css-example…

效果如下

02f20245e91b84986ea217ad021bcf66

这样就能精准的定位到想要的内容了

四、浏览器行为和兼容性

虽然有上面的语法,但实际上浏览器已经内置了快捷操作。选中一段文本,右键会出现这样的菜单,有一个“复制指向突出显示的内容的链接”选项(Edge浏览器提示略有不同),如下

企业微信截图_e3b74bf4-fe77-4d91-9f11-e3846feb40aa

点击这个会自动复制一段包含#:~:text=的链接,浏览器会自动处理选中文本的前后限制,保证结果的唯一性。如下,将刚才复制的地址直接粘贴在浏览器打开

image-20220314185719577

然后说一下兼容性。

这个属性非常新,可以在 MDN 官网看到具体的兼容信息,需要 Chrome 89+ 以上才行

image-20220314190545722

试了一下安卓系统上也是没有问题的,比如在微信中打开的效果如下

image-20220314192411864

默认是一个黄色背景(貌似无法自定义),点击任意地方就消失了。

本を読んでいて、特定の章のすばらしいテキストの小片を他の人と共有したい場合に適しています。これにより、共有する場所をすばやく見つけて強調表示できます。とても便利ですか?

5、簡単な要約

この記事を通して、あなたはそれが何であるかを理解することができるはず::target-textですよね?以下は簡単な要約です

  1. :: target-textは:targetに似ており、どちらも指定された位置にジャンプできます
  2. :: target-text IDは必要ありません、任意のテキストを指定できます
  3. アドレスバーの一致ルールは#:〜:text = [prefix-、] textStart [、textEnd] [、-suffix]で、textStartのみが必要で、その他はオプションです。
  4. ブラウザは「ハイライトされたコンテンツへのリンクのコピー」操作をサポートしているため、手動でステッチする必要がありません。
  5. 互換性は少し悪いです、Androidユーザーはそれを使うことができます

もちろん、これはそれ自体がプログレッシブエンハンスメントプロパティであり、エクスペリエンスをより適切にサポートできます。サポートされていなくても大したことではありません。最後に、それがあなたにとって良くて役立つと思うなら、いいね、ブックマーク、そして転送してください❤❤❤

私の公開アカウントへようこそ:フロントエンドの探偵

おすすめ

転載: juejin.im/post/7085172697419743246