打算使用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上面关于这部分的解释是:
- CSS 尽力减少“数据损失”
- 控制溢出行为的属性是初始值为
visible
的overflow
属性。这就是为什么我们可以看到溢出内容。
所以在元素 .flag
有相对定位时,flag-body--bottom
元素就会相对于 .flag
元素做偏移。那么因为 .flag
元素的 overflow
是默认值 visible
所以内容在溢出同时也会显示,导致影响到 .flag
的外部滚动容器 .scroll
元素。
如果元素 .flag
设置了 overflow:hidden
那么溢出的内容(flag-body--bottom
元素)就会被隐藏掉,自然就不会影响到外部容器 .scroll
元素了。