>웹 프론트엔드 >CSS 튜토리얼 >한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

青灯夜游
青灯夜游앞으로
2022-04-12 11:24:562863검색

이 글은 CSS3::target-text 선택기의 새로운 기능에 대한 심층적인 이해를 제공하고 이 선택기의 기능과 사용법에 대해 이야기하는 것이 도움이 되기를 바랍니다.

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

최근 MDN 공식 웹사이트에서 한 번도 본 적이 없는 선택기인 ::target-text를 봤습니다.

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

간략한 조사 결과 조금 흥미롭고 실용적인 용도도 있다고 생각되어 지금 공유하겠습니다. [추천 학습: css 동영상 튜토리얼]

1. ::target-text의 기능

모든 사람이 :target 선택기를 사용했다고 생각합니다. URL 페이지의 콘텐츠를 일치시키고 앵커 위치 지정을 구현합니다. 예를 들어 문서 디렉터리 :target这个选择器,可以很方便的从URL中匹配到页面上的内容,并且实现锚定定位。比如文档目录上经常看到这样的

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

但是,:target必须要求页面中包含id为该目标的元素,如果不存在就没办法定位了。为了解决这个问题,于是,::target-text就出现了!

从字面意思上来看,::target-text 表示"锚定文本"选择器。官方MDN上的描述为:

如果浏览器支持滚动到文本片段这个特性,则会滚动到这部分文本所在的地方,并且允许用户自定义高亮显示该部分文本样式。

什么意思呢,这里官方有一个例子 scroll-to-text demo

Kapture 2022-03-11 at 15.40.37.gif

可以看到点击这个链接后,浏览器自动跳转到指定的文本片段,并且该文本会有高亮的样式(图中的紫色背景,白色文字)。

于是,::target-text可以用来自定义这部分的样式

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

不过,支持的样式比较有限,和::selection差不多,仅支持文本相关样式

二、如何指定跳转位置

我们都知道,:target是通过在URL上指定#加 id 来匹配的,如下

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

<section id="section2">Example</section>

回到刚才那个例子,可以看到跳转链接是这样的

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

可以看到,::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 是必填,其他都是可选。怎么用的呢?假设我们想定位这一段文本(不包含首尾标点)

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

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

단, :target에서는 페이지에 대상으로 id가 있는 요소가 포함되어 있어야 합니다. 존재하지 않는 경우 그것을 찾을 방법이 없습니다. 이 문제를 해결하기 위해 ::target-text가 등장했습니다!

말 그대로

::target-text

는 "앵커 텍스트" 선택기를 의미합니다. 공식 MDN에 대한 설명은 다음과 같습니다.

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

브라우저가 🎜텍스트 조각으로 스크롤🎜 기능을 지원하는 경우 텍스트의 이 부분이 있는 곳으로 스크롤하여 사용자가 텍스트의 이 부분에 대한 강조 스타일을 사용자 정의할 수 있습니다. . 🎜🎜🎜무슨 뜻인가요? 공식 예는 다음과 같습니다. 텍스트 스크롤 데모🎜🎜🎜한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.🎜🎜이 링크를 클릭하면 브라우저가 자동으로 지정된 텍스트 조각으로 이동하는 것을 볼 수 있습니다 , 그리고 텍스트는 강조된 스타일을 갖게 됩니다(사진의 배경은 보라색, 흰색 텍스트). 🎜🎜그러므로 ::target-text를 사용하여 이 부분의 스타일을 맞춤 설정할 수 있습니다🎜
#:~:text=Mlle,parachute
🎜그러나 지원되는 스타일은 ::selection과 마찬가지로 상대적으로 제한됩니다. , 텍스트 관련 스타일만 지원합니다🎜

🎜2. 점프 위치를 지정하는 방법🎜🎜🎜:target이 # URL에 다음과 같이 일치하는 ID를 추가합니다🎜
#:~:text=Mlle,parachute,-.
🎜지금 바로 예시로 돌아가면 점프 링크가 다음과 같은 것을 볼 수 있습니다🎜🎜한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.🎜🎜::target-text 에도 다음과 같은 해당 규칙이 있습니다🎜rrreee🎜여기서 <code>textStart는 이동해야 하는 페이지의 텍스트 콘텐츠를 나타냅니다. 그러나 여러 텍스트 조각이 일치할 수 있는 경우 첫 번째로 일치하는 텍스트를 찾습니다(id와 유사). 🎜

🎜3. 정확한 위치 지정 방법 🎜🎜🎜 단순히 작은 텍스트 조각을 지정하면 위치 지정이 부정확해질 수 있습니다(반복하기가 너무 쉽습니다). 이 문제를 해결하려면 두 가지 해결책이 있습니다🎜
  1. 반복되지 않도록 가능한 한 긴 텍스트를 지정하십시오.
  2. 텍스트 앞뒤에 제한을 추가하세요. 시작점 문자로
🎜첫 번째 옵션도 가능하지만 문제가 있습니다. 첫째, 주소 표시줄이 너무 길고 그다지 아름답지 않습니다. 하지만 이 작은 콘텐츠만 공유하면 됩니다. 너무 많이. 이제 옵션 2를 살펴보세요. 다음은 :~:text🎜rrreee
  • prefix- prefix text
  • textStart text start
  • 의 전체 구문에 대한 간략한 소개입니다. textEnd text end
  • -suffix suffix text
🎜구문적으로 textStart만 필수이고 나머지는 선택 사항입니다. 그것을 사용하는 방법? 이 텍스트(첫 번째 및 마지막 구두점 제외)를 찾고 싶다고 가정해 보겠습니다. 🎜🎜한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.🎜🎜시작 문자 Mlle,parachute🎜rrreee🎜🎜를 직접 지정할 수 있습니다. https://mdn.github.io/ 링크를 방문하세요. css-examples /target-text/index.html#:~:text=Mlle,parachute🎜🎜🎜효과는 다음과 같습니다🎜🎜🎜🎜

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

#:~:text=Mlle,parachute,-.

可以访问这个链接 https://mdn.github.io/css-examples/target-text/index.html#:~:text=Mlle,parachute,-.

效果如下

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

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

四、浏览器行为和兼容性

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

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

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

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

然后说一下兼容性。

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

한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

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

1한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.

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

比较适合在阅读一本书时,想分享某一章节的某一小段精彩文本给他人,这样就能快速定位到分享的地方了,还能高亮显示。是不是很方便呢?

五、简单总结一下

详细通过本文,应该可以了解到::target-text是什么了吧?下面简单总结一下

  • ::target-text 和 :target 类似,都可以跳转到指定位置

  • ::target-text 无需 id,可以指定任意文本

  • 地址栏匹配规则是 #:~:text=[prefix-,] textStart [,textEnd] [,-suffix],只有 textStart 是必填,其他都是可选

  • 浏览器支持“复制指向突出显示的内容的链接”操作,可以不必手动拼接

  • 兼容性有点差,安卓用户可以使用

当然这本身是一个渐进增强的属性,能够支持体验更好,不支持也没什么大事。最后,如果觉得还不错,对你有帮助的话,欢迎点赞、收藏、转发!

(学习视频分享:web前端

위 내용은 한 기사에서 CSS3::target-text 선택기의 새로운 기능에 대해 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제