You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅用CSS为当前:target对应的锚点链接添加样式?

仅用HTML和CSS高亮指向当前:target的锚点链接方案

要实现给触发跳转的锚点链接添加样式(而非目标元素),目前有两种可行的纯CSS方案,具体如下:

方案一:使用:has()选择器(现代主流浏览器支持)

:has()是CSS选择器的新特性,能让我们基于兄弟元素的状态来选择当前元素,完美解决原结构中导航在目标元素前的反向选择问题。

代码示例

/* 高亮对应当前target的锚点链接 */
nav:has(~ section#foo:target) a[href="#foo"],
nav:has(~ section#bar:target) a[href="#bar"] {
  color: #e53e3e;
  font-weight: bold;
  border-bottom: 2px solid #e53e3e;
}

/* 保留原有的target元素样式(可选) */
:target {
  border: 2px solid red;
}
<nav>
  <a href="#foo">Foo</a>
  <a href="#bar">Bar</a>
</nav>

<section id="foo">This is foo.</section>
<section id="bar">This is bar.</section>

说明:

  • 无需修改原有HTML结构,直接通过:has(~ section#xxx:target)检测对应目标元素是否激活,然后匹配导航中对应的锚点链接。
  • 兼容性:Chrome 101+、Firefox 121+、Safari 15.4+,覆盖绝大多数现代浏览器。

方案二:调整HTML结构,利用兄弟选择器(兼容老浏览器)

如果需要兼容不支持:has()的老浏览器,可以调整HTML结构,将导航移至所有目标元素之后,再通过兄弟选择器实现样式关联。

代码示例

/* 当目标元素激活时,高亮对应的锚点链接 */
section#foo:target ~ nav a[href="#foo"],
section#bar:target ~ nav a[href="#bar"] {
  color: #e53e3e;
  font-weight: bold;
  border-bottom: 2px solid #e53e3e;
}

/* 保留原有的target元素样式(可选) */
:target {
  border: 2px solid red;
}
<section id="foo">This is foo.</section>
<section id="bar">This is bar.</section>

<nav>
  <a href="#foo">Foo</a>
  <a href="#bar">Bar</a>
</nav>

说明:

  • 利用CSS的后续兄弟选择器~,当目标元素被标记为:target时,选中后续导航中对应的锚点链接。
  • 兼容性极佳,支持所有支持:target选择器的浏览器(IE9及以上)。

内容的提问来源于stack exchange,提问作者Jens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:23:21