带有滚动激活状态的粘性目录

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 $200 的免费积分!

假设您有一个双列布局:一列是带有内容的主列,另一列是边栏。假设它有大量内容,并且有需要滚动的部分。边栏列基本上是空的,因此您可以安全地在其中放置一个 position: sticky; 目录,用于主列中的所有内容。这是文档中一种相当常见的模式。

Bramus Van Damme 有 一个不错的教程,从语义标记开始,使用 HTML 和 CSS 实现大部分功能,最后用 JavaScript 完成活动导航增强。

例如,如果您没有点击自己向下滚动到某个部分(您可能可以使用 :target 样式来进行活动导航),则需要使用 JavaScript 来确定您滚动到的位置并突出显示活动导航。这部分活动内容使用 IntersectionObserver 处理得很好,它就像专为此类情况而设计的 API。

这是该结果

它让我想起了 Hakim El Hattab 的一个非常类似的演示,他称之为 Progress Nav。设计模式完全相同,但 Hakim 的版本具有这种超炫的 SVG 路径,它可以沿着路径自行绘制,并为子导航进行缩进。我会在这里嵌入一个视频

它没有使用 IntersectionObserver,因此如果您想对此进行修改,可以将它们组合在一起!