我在用Ant Design的Anchor组件做文档页导航,点击锚点后页面滚动的位置总是偏上一截,导致标题被顶部固定导航栏挡住。
试过给目标元素加padding-top,但这样会影响布局。也查了文档说可以用offsetTop,但设置之后好像没生效,代码是这样的:
<Anchor offsetTop={60}>
<Anchor.Link href="#section1" rel="external nofollow" title="章节一" />
</Anchor>
是不是哪里用错了?还有其他办法能精准控制滚动位置吗?
offsetTop是控制 Anchor 组件自身距离视口顶部的距离,不是滚动时的偏移量。你要用的是targetOffset这个属性。改成这样:
targetOffset的值设成你顶部导航栏的高度就行,这样滚动的时候会自动预留出这个偏移量,标题就不会被挡住了。如果上面改完还有问题,再检查一下你的滚动容器是不是
window。如果你的页面内容是在某个特定的div里滚动的,需要通过getContainer属性指定一下容器,不然 Anchor 找不到正确的滚动上下文,计算位置就会出问题。还有一种纯 CSS 的方案,不用管 Anchor 组件的属性,直接给锚点目标元素加
scroll-margin-top:这个方案更通用,不管是你手动触发滚动还是通过 Anchor 组件跳转都生效,而且不用改组件代码。我一般倾向于用这个,省得每次都要去翻文档查属性名。