那些年我们分不清的元素尺寸(偏移尺寸、客户端尺寸和滚动尺寸)

160 阅读2分钟

这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

我最开始接触到元素尺寸是在实现吸顶、吸底效果的时候,又是offset又是scroll的,傻傻分不清楚。今天希望通过这篇文章来梳理一下几种尺寸,强化认知。

偏移尺寸

偏移尺寸包含元素在屏幕上占有的所有的视觉空间,包括内边距、滚动条和边框,但不包括外边距。

  • offsetWidth:元素在水平方向上占有的像素尺寸,包括它的宽度、左右边框的宽度和垂直滚动条的宽度(如果存在的话)
  • offsetHeight:元素在垂直方向上占有的像素尺寸,包括它的高度、上下边框的高度和水平滚动条的高度(如果存在的话) 我认为下面这两个属性更能体现“偏移”的概念:
  • offsetTop:元素上边框的外侧距离它的包含元素的上边框内侧的像素数
  • offsetLeft:元素左边框的外侧距离它的包含元素的左边框内侧的像素数 用图形来标识这些属性会更好理解些:

image.png

(红色为元素的外边框,绿色为其包含元素的外边框)

注意:元素的包含元素不一定是其父元素,可以通过offsetParent属性得到。

客户端尺寸

客户端尺寸包含元素内容及其内边距所占的空间,只有两个属性:

  • clientHeight:内容区高度加上上下内边距高度
  • clientWidth:内容区宽度加上左右内边距宽度 图示如下:

image.png

滚动尺寸

我认为这个尺寸是这三个中较难理解的,它提供的是元素内容滚动距离的信息。

  • scrollTop:内容区顶部隐藏的像素数,也就是内容滚动的垂直距离
  • scrollLeft:内容区左侧隐藏的像素数,也就是内容滚动的水平距离
  • scrollHeight:没有滚动条出现时元素内容的总高度(包括padding)
  • scrollWidth:没有滚动条出现时元素内容的总宽度(包括padding) 那么scrollHeight和scrollWidth既然也包括padding,那他们和上面提到的客户端尺寸有何区别呢?实际上在不需要滚动的文档上两者是分不清的,而如果文档尺寸超过视口尺寸,那么clientWidth和clientHeight等于视口的大小,scrollHeight和scrollWidth等于文档内容的大小。