点目录里的第三节,页面跳过去了,标题却藏在六十四像素高的固定导航下面,只露出下半行,用户还得手动往上拨一点。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
:root { --header-h: 64px; }
html { scroll-padding-top: calc(var(--header-h) + 16px); }
.entry-content h2 {
scroll-margin-top: calc(var(--header-h) + 16px);
}
锚点滚动把目标元素的顶边对齐到视口顶部,固定头是浮在上面的,不占文档流,正好盖住目标。浏览器不会自动为固定头留出偏移。这一点先确认清楚,后面就不用反复试。
「锚点被固定头遮挡」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,给正文标题加 scroll-margin-top,值等于固定头高度加一点间距;或者在 html 上写 scroll-padding-top,一次管所有锚点;固定头高度会随断点变化时,用 CSS 变量存高度,两处共用。
改完照着核一遍,点任意目录项,标题完整出现在固定头下方,不再需要手动补滚。
