如何实现元素滚动至滚动父容器顶部后固定?我的代码问题在哪?
问题原因与修正方案
你的核心问题是把position: sticky用在了高度1000px的长元素上,违背了sticky定位的工作逻辑:
sticky元素会先随内容滚动,当它的顶部到达top:0位置时固定在该位置,但一旦这个元素的底部完全离开滚动容器的可视区域,它就会继续跟着内容向上滚动。你的绿色容器高度远大于滚动容器的200px,所以它没办法一直固定在顶部。
修正方案一:拆分sticky头部与长内容
把显示foobar的头部和长内容分开,只给头部加sticky属性:
<p>my page</p> <div style="overflow: auto; height: 200px; background: red; isolation: isolate;"> <div style="height: 100px; background: yellow;"> header </div> <!-- 仅给foobar头部设置sticky --> <div style="position: sticky; top: 0; background: green; padding: 8px;">foobar</div> <!-- 长内容单独放在容器里 --> <div style="height: 1000px; background: #f0f0f0;"> 这里是长内容区域,滚动时foobar会一直留在顶部 </div> </div>
修正方案二:让绿色容器固定且内部内容滚动
如果希望绿色容器整体固定,内部的长内容单独滚动,可以设置绿色容器的高度为滚动容器剩余高度,开启内部滚动:
<p>my page</p> <div style="overflow: hidden; height: 200px; background: red; isolation: isolate;"> <div style="height: 100px; background: yellow;"> header </div> <!-- 绿色容器固定在顶部,高度适配剩余空间,内部内容滚动 --> <div style="position: sticky; top: 0; height: calc(200px - 100px); background: green; overflow: auto;"> foobar <div style="height: 1000px; margin-top: 10px;"> 这里是内部长内容,滚动时foobar始终可见 </div> </div> </div>
内容的提问来源于stack exchange,提问作者Fez Vrasta
相关产品推荐
相关产品推荐

