广州总部电话:020-85564311
20年
互联网应用服务商
广州总部电话:020-85564311
20年
互联网应用服务商
请输入搜索关键词
知识库 知识库

优网知识库

探索行业前沿,共享知识宝库

【第3723期】用 CSS ::search-text 美化浏览器搜索高亮

发布日期:2026-06-24 13:52:01 浏览次数: 806 来源:前端早读课
推荐语
CSS ::search-text伪元素让浏览器搜索高亮不再单调,可自定义颜色与样式,提升页面交互体验。

核心内容:
1. ::search-text伪元素的基本用法与语法
2. 搭配:current伪类美化当前聚焦匹配项
3. 可用的样式属性限制与实践案例
小优 网站建设顾问
专业来源于二十年的积累,用心让我们做到更好!

前言

CSS 新增 ::search-text 伪元素,可自定义浏览器页面搜索的高亮样式,还能搭配 :current 单独美化当前聚焦匹配项。

今日前端早读课文章由 @Sunkanmi Fafowora 分享,@飘飘编译。

译文从这开始~~

CSS 的 ::search-text 伪元素可以选中浏览器 "页面内查找" 功能所匹配到的文本。举例来说,如果你在本页面中搜索 "search-text",所有匹配的文字都会高亮显示。借助这个伪元素,我们便能自定义高亮部分的样式。

【第3672期】CSS 迎来原生随机能力:random() 与 random-item() 初探

还有一个额外的妙用!当页面上存在多个匹配项时,可以将 ::search-text 与 :current 伪类搭配使用,单独为当前聚焦的匹配项设置样式。

你可以通过快捷键 Ctrl + F(Windows)或 ⌘F(Mac)来唤起 "页面内查找" 功能。

 ::search-text {
   background: oklch(87% 0.17 90) /* 黄色 */;
   color: black;
 }

 ::search-text:current {
   background: oklch(62% 0.22 38) /* 红色 */;
   color: white;
 }

CSS 的 ::search-text 伪元素定义于 CSS 伪元素模块第四级规范中。

语法

非常简洁明了!只需声明伪元素并添加样式规则即可:

 <元素选择器>::search-text {
   /* ... */
 }

用法

通常可以单独使用(::search-text),也可以附加到特定元素上:

 /* 所有文本 */
 ::search-text {}
 html::search-text {} /* 其实有些多余 */

 /* 特定元素 */
 section::search-text {}
 strong::search-text {}

在 ::search-text 中可声明的 CSS 属性有一定限制,目前支持以下属性:

  • background-color
  • color
  • text-decoration 及其相关属性(text-underline-position 和 text-underline-offset),以及其各组成子属性:
    • text-decoration-color
    • text-decoration-line:仅支持 grammar-errorspelling-errorline-throughnone 和 underline 这几个值。
    • text-decoration-skip-ink
    • text-decoration-style
    • text-decoration-thickness
  • text-shadow
  • 自定义属性

没错,我们也可以搭配自定义属性来使用,例如:

 :root {
   --color-blueberry: oklch(0.5458 0.1568 241.39);
 }

 ::search-text {
   background-color: var(--color-blueberry);
 }

基本用法

通过 ::search-text 伪元素,我们可以为 "页面内查找" 功能匹配到的文本自定义样式。此外,如果想要为当前聚焦的匹配文本单独设置样式,只需在 ::search-text 后面附加 :current 伪类即可。

【第3661期】不用 JS 也能精准定位?CSS Anchor Positioning 实战解析

 /* 匹配所有搜索到的文本 */
 ::search-text {
   color: green;
   background-color: white;
 }

 /* 匹配一级标题中搜索到的文本 */
 h1::search-text {
   text-shadow: 12px 1px lightgrey;
   background-color: black;
   color: white;
 }

 /* 当前聚焦的一级标题搜索文本 */
 h1::search-text:current {
   color: red;
   background: white;
 }

继承链

所有后代元素始终会继承通过高亮伪元素设置的样式。这意味着,在高亮伪元素上设置的各项属性会沿着 DOM 树向下层层级联。以下面的 HTML 为例:

 <article>
   <h2>高亮继承演示</h2>
   <p>Lorem ipsum dolor sit amet. <strong>Lorem</strong> appears again here. Another lorem appears here.
   </p>
 </article>

这里有一个 <article> 容器,包含两个子元素:<h2> 和 <p>,其中 <p> 内部还嵌套了一个 <strong> 后代元素。我们可以通过以下 CSS 为 <article> 中的 ::search-text 设置样式,这些样式会应用到 <article> 内的所有元素:

 article::search-text {
   background: gold;
   color: black;
   text-decoration: underline;
 }

然后,仅针对 <p> 及其后代元素覆盖 color 属性:

 p::search-text {
   color: orange;
 }

再对 <strong> 元素的 text-decoration 做同样的覆盖:

 strong::search-text {
   text-decoration: line-through;
 }

当你搜索 "lorem" 时,第一个匹配项(位于 <p> 内但在 <strong> 外)会从 <article> 继承 background 和 text-decoration 的值,同时将 color 覆盖为自身设定的橙色。

【第3627期】从媒体查询到样式查询:Chrome 142 如何让 CSS 更懂“数值”

再看 <strong> 中的 "lorem" 文本,它会继承其父元素 <p> 和祖父元素 <article> 上设置的属性。其中,color 和 background 的值直接从父元素继承而来,由于未被覆盖,所以保持不变;而 text-decoration 的值则被覆盖为 line-through(删除线)。

这个例子的核心要点在于:高亮伪元素的各项属性同样遵循逐一继承与逐一覆盖的规则。

定位特定文本

在下面的示例中,我们将 text-decoration 设置为 underline,为所有搜索匹配到的文本添加一条蓝色下划线。这样一来,我们既能自定义匹配文本的样式,又保留了默认的背景色,避免用户对视觉效果产生困惑。

 ::search-text {
   text-decoration: underline;
   text-decoration-color: oklch(65% 0.18 240);
   text-decoration-thickness: 0.22em;
   text-underline-offset: 0.15em;
 }

使用 :current

将 ::search-text 与 :current 搭配使用,我们可以为当前聚焦的匹配项设置独特的样式。例如,在下面的示例中,我们为当前匹配的搜索文本应用了浅橙色的文本装饰线,并将线条粗细设为 0.3em

 ::search-text:current {
   text-decoration-color: oklch(85% 0.22 38);
   text-decoration-thickness: 0.3em;
 }

无障碍注意事项

根据 WCAG 的对比度标准,文本与背景之间的对比度至少需要达到 4.5:1。此外,建议不要对搜索高亮的颜色做过大的改动。事实上,这一特性应当谨慎使用,因为它可能会给有认知障碍的用户带来困扰,而且作为浏览器的核心功能之一,过度修改反而容易让人感到困惑。我个人的建议是,仅使用 text-decoration 及其相关属性来做调整,因为它们的视觉效果相对其他属性更为含蓄、不突兀。

还有 :past 和 :future

:past 和 :future 伪类原本应当分别匹配 :current 元素之前和之后的所有元素。

然而,规范中明确指出:

:past 和 :future 伪类保留供将来类似用途使用。任何将这些伪类与 ::search-text 进行的不受支持的组合,都必须视为无效。

这意味着,你不能将 :past:future 或任何其他伪类与 ::search-text 伪元素搭配使用。如果你的浏览器碰巧支持了这些组合,请通过提交 issue 来报告这一异常行为。

规范

CSS ::search-text 伪元素定义于 CSS 伪元素模块第四级规范中,目前仍处于测试和完善阶段。

浏览器支持

已获得广泛支持:

关于本文
译者:@飘飘
作者:@Sunkanmi Fafowora
原文:https://css-tricks.com/almanac/pseudo-selectors/s/search-text/

这期前端早读课
对你有帮助,帮” 
 “一下,
期待下一期,帮”
 在看” 一下。

优网科技,优秀企业首选的互联网供应服务商

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!

优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、微信小程序定制开发、移动端应用(手机站APP开发)、微信定制开发(微信官网、微信商城、企业微信)等一系列互联网应用服务。


我要投稿

姓名

文章链接

提交即表示你已阅读并同意《个人信息保护声明》

专属顾问 专属顾问
扫码咨询您的优网专属顾问!
专属顾问
马上咨询
联系专属顾问
联系专属顾问
联系专属顾问
和我们在线交谈!