如何确定元素的尺寸

简介: 排查一个线上问题时发现 getBoundingClientRect() 方法返回的元素尺寸和元素实际渲染的尺寸不一致,而用 offsetWidth 和 offsetHeight 就是对的,有些奇怪,遂探究之。

我们借助万能的 stackoverflow 找到了 MDN 上的解释

元素占据了多大的空间?

通常情况下我们想要知道元素可见时占据的空间,可以使用 HTMLElement.offsetWidth 和  HTMLElement.offsetHeight。大多数情况和 Element.getBoundingClientRect() 获取到的值是一样的。

元素中有 transform 的样式时,HTMLElement.offsetWidth 和 HTMLElement.offsetHeight 返回的是实际布局计算出的宽高,即排除 transform 作用的值。而 Element.getBoundingClientRect() 获取到的是实际渲染的宽高。举个栗子,如果元素的宽度为 100px;transform(scale(0.5)); Element.getBoundingClientRect() 将返回 50 作为宽度,而 HTMLElement.offsetWidth 将返回 100。

也就解答了排查线上问题时的疑惑,文档还没完,再接着看看。

这里还有一个小的差异,HTMLElement.offsetWidth 和 HTMLElement.offsetHeight 返回的是整数,并且在 Windows 上并没有像规范说明的四舍五入,而是始终向下取整。而 Element.getBoundingClientRect() 返回的是小数,这在一些对精度要求较高的场景下会有用。

展示出的内容部分的大小是多少?

如果需要知道实际显示的内容占用多少空间(包括 padding 但不包括 border、margin 或 scrollbar),可以使用 Element.clientWidth 和 Element.clientHeight 属性。

内容区总共有多大?

如果需要知道内容的实际大小,而不管当前有多少内容是可见的,可以使用 Element.scrollWidth 和 Element.scrollHeight 属性。它们会返回元素包含滚动条时不可见区域的整个内容的宽度和高度。


目录
相关文章
|
8天前
|
前端开发
元素的宽度和高度
元素的宽度和高度。
15 4
|
16天前
在使用 Flexbox 布局实现自适应宽度的品字布局时,子元素的排列顺序是否可以调整?
【10月更文挑战第27天】使用Flexbox布局实现自适应宽度的品字布局时,可以通过调整HTML结构中的顺序或使用 `order` 属性来灵活地调整子元素的排列顺序,以满足不同的设计和布局需求。
|
4月前
|
JavaScript
js【图解】滚动条的位置(文档与屏幕间的距离),鼠标事件距离(位置),元素距离(位置)
js【图解】滚动条的位置(文档与屏幕间的距离),鼠标事件距离(位置),元素距离(位置)
107 7
|
4月前
div高度填满浏览器剩余空间(不出现纵向滚动条)
div高度填满浏览器剩余空间(不出现纵向滚动条)
48 0
【元素水平垂直居中的方法有哪些?元素不定宽高呢?】
【元素水平垂直居中的方法有哪些?元素不定宽高呢?】
【元素水平垂直居中的方法有哪些?元素不定宽高呢?】
|
前端开发 JavaScript API
固定元素宽度根据文本的长度缩小字号,超出缩小字号
固定元素宽度根据文本的长度缩小字号,超出缩小字号
425 0
固定元素宽度根据文本的长度缩小字号,超出缩小字号
|
JavaScript 前端开发 定位技术
百度地图元素宽度自适应的方法
百度地图元素宽度自适应的方法
371 0