偏移量比较
top
top
用于 CSS 元素设置位置顶部偏移量。
position:static
(初始值):无效果position:relative
:元素margin box
相对于其正常流布局位置的顶部偏移量,在正常流布局中,块级盒子会在父元素的padding box
内部从左往右从上往下放置。position:absolute
:子元素的margin box
外边缘和最近的非position:static
的父元素的border box
内边缘之间的距离
position:fixed
:子元素的margin box
相对于视口顶部的偏移量,如果有iframe
则是相对于iframe
内部的视口
当top
的值设置成百分比时,相对的是容器元素的高度。
scrollTop writeable
获取或设置一个父元素内部content
区域顶部垂直向上滚动的高度,同理scrollLeft
也是这样的原理。
const intElemScrollTop = someElement.scrollTop;
element.scrollTop = someValue;
需要注意以下两点:
scrollTop
作用在父元素上,也就是产生滚动条的元素,一般其overflow
属性不为visible
scrollTop
表示content
区域顶部向上滚动的像素数,不要管什么可见不可见的问题
clientTop readonly
clientTop
表示元素本身border
上边缘高度加上顶部滚动条高度,如果没有滚动条就是顶部border
的宽度。如果也没有border
,那就是0
。
offsetTop readonly
offsetTop
是一个相对距离,表示元素自身顶部border
外边缘到offsetParent
顶部border
内边缘的距离。
offsetParent
指的是最靠近的定位祖先元素:
position
不为默认值static
的祖先元素- 或者
position
为static
的td
,th
,table
这些元素;
如果找不到最近的祖先元素,则返回body
元素。
在以下情况中,offsetParent
会返回null
:
- 元素本身或者其父元素设置了
display:none
position:fixed
元素的offsetParent
是null
body
或者html
元素的offsetParent
也是null
window.innerHeight
表示浏览器视口高度像素值,包括水平方向滚动条的高度,不包括浏览器 UI 组件(地址栏,书签栏等),会随着浏览器窗口的缩放比例,以及浏览器本身调节窗口大小而改变。
window.outerHeight
整个浏览器的高度,包括地址栏,书签栏等部分,且不会随着浏览器缩放比例或者浏览器标签页大小改变而改变,所以这是一个固定值。
scrollHeight readonly
一个四舍五入的整数值,表示元素内容区域的完整高度,包括溢出父元素的隐藏区域;包含元素的padding
部分,不包含border
,margin
以及水平方向滚动条的高度,如果有伪元素::before
,::after
等,也会包含在内。
scrollHeight
这个属性在使用虚拟滚动渲染大量子元素时非常有用,是进行性能优化最关键的点。
clientHeight readonly
CSS height + CSS padding - 水平方向滚动条高度
一个四舍五入的整数值,表示元素内部可视内容区域的像素高度,包含padding
,但不包括水平滚动条高度、border
和margin
。
根元素html
的clientHeight
就是viewport
的高度,也不包含水平方向滚动条高度。
offsetHeight readonly
一个四舍五入的整数值,包含元素padding
,border
和水平滚动条高度,不包含margin
,伪元素的高度。如果元素隐藏了,例如display:none
,这个值就是0
。