为什么锚点定位后页面总是偏移固定导航栏的高度?
我在做单页滚动时用了锚点跳转,但每次点击导航链接后,内容区域总会被固定在导航栏下方几像素的位置,导致文字被遮挡。已经试过给锚点元素加padding-top和margin-top,但滚动位置反而更乱了。
这是我的CSS代码:
/* 固定导航栏 */
nav {
position: fixed;
top: 0;
width: 100%;
height: 60px;
background: white;
}
/* 锚点目标 */
.section {
height: 100vh;
position: relative;
}
用的是这种原生锚点跳转方式,但计算滚动位置时好像没考虑导航栏的高度,有什么不用JS的方法能自动补偿偏移吗?
一个不用 JS 的简单方法是用伪元素来调整锚点的位置:
然后在 CSS 里这样写:
这样每个 .section 元素前面都会生成一个看不见的占位符,刚好补偿了导航栏的高度,锚点就会停在正确的位置了。
不过要提醒一下,这种方法依赖于你导航栏的高度固定不变。如果导航栏有动态变化(比如响应式设计下高度不同),还是得用 JS 来动态计算和设置偏移量。另外确保导航栏的高度值没有用到用户输入的数据,防止注入等安全问题,虽然这里看似不太可能,但养成好习惯总是没错的。
这样就不用JS,完美解决。