sticky有时候会存在无效的情况,因素有
- 任一祖先元素不能存在overflow: hidden;
- sticky其实是相对于外层滚动盒子来定位的,外层盒子出视窗时,sticky就无效了,如果外层盒子的高度是body的总高度,那么就能实现我们理想的吸顶效果
.child {
position: sticky;
top: 0;
}
1、body的高度最够高,屏幕上滑时,父元素会向上滚动,在没有触达顶部时,sticky元素会跟随父元素滚动,相当于relative定位。
2、父元素到达顶部时,sticky元素开始固定,相当于fixed定位
3、继续上滑,到某一位置时,父元素已经在视窗上方,那么sticky元素一会跟着划走,而不会固定了。也就是相当于会跟随父盒子来做定位。
可能我们布局的时候,sticky元素不会在外层盒子中,可能父盒子层级可能很深,子元素直接使用sticky达不到吸顶的效果,可以将父元素设置定位,例如absolute(定位之后下面的元素会挤上来,设置padding来充填),高度设置为全部内容的高度,那么子元素就可以一直跟随父元素滚动了