Material-UI的AppBar固定顶部后内容被遮挡怎么办?
我在用Material-UI的AppBar做导航栏时,设置position:fixed后虽然能固定顶部,但页面内容还是被导航栏遮住了。试过给内容区域加margin-top=”64px”,但滚动时会出现错位,有没有更好的解决办法?
<AppBar position="fixed" style={{ backgroundColor: '#3f51b5' }}>
<Toolbar>
<Typography variant="h6">我的网站</Typography>
</Toolbar>
</AppBar>
<div style={{ marginTop: '64px', padding: '20px' }}>
这里的内容被导航栏遮挡了...
</div>
发现当页面有滚动条时,margin-top会导致内容在滚动时上下跳动,可能是计算高度的方式有问题,但不知道该怎么调整样式才能让内容始终在AppBar下方显示
别直接写死 margin-top,因为不同屏幕、不同分辨率下 AppBar 高度可能不一样(比如移动端折叠后高度变小)。正确的做法是给 body 或根容器留出一个等高间距。
最简单的方案是在 AppBar 下面加一个占位元素,高度等于 AppBar 的高度:
但更好的方式是动态获取 AppBar 高度,避免写死 64px:
你可以用 useRef 拿到 AppBar 实例,或者直接使用 theme.spacing 计算:
这样滚动也不会跳动,因为占位元素稳定撑开了空间。记住:fixed 元素要靠外部结构留白,不是让内容自己去 margin。
AppBar 固定定位脱离文档流,撑开 body 才能避免滚动跳动。就这样。