元素的大小和滚动
2025年1月10日大约 3 分钟
offsetParent
获取最接近的祖先元素,在浏览器渲染期间,它被用于计算坐标
当我们创建了一个元素,但尚未将其插入文档中,或者它(或它的祖先)具有
display:none时,offsetParent为null,并且offsetWidth和offsetHeight为0
<div id="div" style="position: relative;">
  <span id="span">Test</span>
</div>
<script>
  var oSpan = document.getElementById('span')
  console.log(oSpan.offsetParent) // <div id="div" style="position: relative;">…</div>
</script>最近的祖先元素为下列之一
- CSS 定位的 
position为relative、absolute、fixed - 或 
<body> - 或 
<table>、<th>、<td> 
- CSS 定位的 
 以下几种情况,
offsetParent的值为null- 对于未显示的元素(
display:none或者不在文档中) - 对于 
<body>与<html> - 对于带有 
position:fixed的元素 
- 对于未显示的元素(
 
offsetLeft
相对于
offsetParent元素左上角的x坐标
offsetTop
相对于
offsetParent元素左上角的y坐标
offsetWidth
表示元素本身的宽度 = boder + padding + width
offsetHeight
表示元素本身的高度 = border + padding + height
clientLeft
表示内侧与外侧的相对的
x坐标(边框加滚动条宽度)
clientTop
表示内侧与外侧的相对的
y坐标(边框加滚动条宽度)
clientWidth
元素边框内区域的宽度 = content width + padding (不包括滚动条宽度)
clientHeight
元素边框内区域的宽度 = content height + padding (不包括滚动条高度)
scrollWidth
元素完整内部宽度,包括滚动出的部分(不包括滚动条宽度)
scrollHeight
元素区域的完整内部高度,包括滚动出的部分(不包括滚动条高度)
scrollLeft
元素水平方向滚动距离,是可修改的,并且浏览器会滚动该元素
scrollTop
元素垂直方向滚动距离,是可修改的,并且浏览器会滚动该元素
getBoundingClientRect()
返回最小矩形的窗口坐标,该矩形将 elem 作为内建
DOMRect类的对象,返回属性如下
x:矩形原点相对于窗口的 X 坐标y:矩形原点相对于窗口的 Y 坐标width:矩形的宽度(可以为负)height:矩形的高度(可以为负)top:矩形顶部的 Y 坐标bottom:矩形底部的 Y 坐标left:矩形左边缘的 X 坐标right:矩形右边缘的 X 坐标
注意
- 坐标可能是小数
 - 坐标可能是负数。例如滚动页面,使 
elem现在位于窗口的上方,则elem.getBoundingClientRect().top为负数 - 负的 
width/height值表示矩形从其右下角开始,然后向左上方“增长” - 由于历史原因,IE 浏览器不支持 
x/y属性 
CSS width 与 clientWidth 的不同点
getComputedStyle(elem).width与elem.clientWidth
clientWidth值是数值,而getComputedStyle(elem).width返回一个以px作为后缀的字符串。getComputedStyle可能会返回非数值的 width,例如内联(inline)元素的"auto"。clientWidth是元素的内部内容区域加上 padding,而 CSS width(具有标准的box-sizing)是内部内容区域,不包括 padding。- 如果有滚动条,并且浏览器为其保留了空间,那么某些浏览器会从 CSS width 中减去该空间(因为它不再可用于内容),而有些则不会这样做。
clientWidth属性总是相同的:如果为滚动条保留了空间,那么将减去滚动条的大小。