这是demo代码
https://codepen.io/643104191/pen/GRwMEpX
打算使用IntersectionObserver
监听内容滚动到底部/顶部,
监听的root是.scroll
,
监听的target是.flag-body--top
or.flag-body--bottom
,
监听是符合预期的,
但是发现滚动到底部的时候,.flag-body--bottom
竟然可见并且再底部占了一块滚动距离!
(按理说position: absolute
应该是不占位置的,也不应该占用滚动距离)
如果希望.flag-body--bottom
不占滚动距离应该怎么处理?
元素
.flag
的去掉相对定位的属性就行了。但这样他会影响到更外部的滚动容器,也就是浏览器窗口(因为overflow
的默认值是visible
)。所以需要给元素
.flag
设置overflow:hidden
这样的样式,使溢出的内容隐藏就可以解决你说的这个问题。对于这种绝对定位元素溢出导致影响滚动容器的现象,可以看MDN上面关于这部分的解释是:
visible
的overflow
属性。这就是为什么我们可以看到溢出内容。所以在元素
.flag
有相对定位时,flag-body--bottom
元素就会相对于.flag
元素做偏移。那么因为.flag
元素的overflow
是默认值visible
所以内容在溢出同时也会显示,导致影响到.flag
的外部滚动容器.scroll
元素。如果元素
.flag
设置了overflow:hidden
那么溢出的内容(flag-body--bottom
元素)就会被隐藏掉,自然就不会影响到外部容器.scroll
元素了。相关阅读
溢出的内容 - 学习 Web 开发 | MDN
流布局和溢出 - CSS:层叠样式表 | MDN