:target-current で目次の「いま読んでいる項目」をCSSだけでハイライト
目次の親に scroll-target-group: auto を付けると、ページ内リンクが「スクロールマーカー」になり、表示中セクションのリンクに :target-current が当たる。
どんな時に使う?
- 記事ページのサイド目次やページ内ナビで、スクロール位置に合わせて現在地をハイライトしたいとき。
- これまで Intersection Observer で書いていた処理を置き換えたいとき。
コード
html
<nav class="toc">
<a href="#intro">はじめに</a>
<a href="#usage">使い方</a>
<a href="#faq">FAQ</a>
</nav>css
.toc {
scroll-target-group: auto; /* 中の a[href="#…"] がスクロールマーカーになる */
}
.toc a:target-before { color: #999; } /* 通過ずみ */
.toc a:target-current { color: #0066cc; font-weight: bold; } /* 表示中 */
.toc a:target-after { color: #333; } /* 未到達 */
/* :has() と組み合わせて親の li を装飾することもできる */
.toc li:has(a:target-current) { border-inline-start: 3px solid currentColor; }注意点・対応状況
- 実験的な機能で Chromium 系のみ対応(2026年時点)。Can I use で要確認。未対応ブラウザではハイライトが出ないだけなので、プログレッシブエンハンスメントとして使える。
:target-before/:target-afterはさらに新しいので対応状況を個別に確認。- 同じ仕組みは
::scroll-markerを使った CSS カルーセルのドット表示にも使われる。
出典
- @clockmaker · 2026-01-30 (ICS MEDIA 記事: ics.media/entry/260130/ )