如何确定元素的尺寸

简介: 排查一个线上问题时发现 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 属性。它们会返回元素包含滚动条时不可见区域的整个内容的宽度和高度。


目录
相关文章
|
5天前
|
前端开发
元素的宽度和高度
元素的宽度和高度。
9 3
|
2月前
自定义视口高度,多余的部分使用滚动
自定义视口高度,多余的部分使用滚动
|
8月前
|
容器
【元素水平垂直居中的方法有哪些?元素不定宽高呢?】
【元素水平垂直居中的方法有哪些?元素不定宽高呢?】
【元素水平垂直居中的方法有哪些?元素不定宽高呢?】
|
9月前
|
前端开发 容器
如何使用 CSS 来控制 img 标签在父元素中自适应宽度或高度,并按比例显示
如何使用 CSS 来控制 img 标签在父元素中自适应宽度或高度,并按比例显示
301 1
|
前端开发 JavaScript API
固定元素宽度根据文本的长度缩小字号,超出缩小字号
固定元素宽度根据文本的长度缩小字号,超出缩小字号
335 0
固定元素宽度根据文本的长度缩小字号,超出缩小字号
|
JavaScript
问题解决:百分比宽度页面缩放会变形
问题解决:百分比宽度页面缩放会变形
170 1
问题解决:百分比宽度页面缩放会变形
|
JavaScript 前端开发 定位技术
百度地图元素宽度自适应的方法
百度地图元素宽度自适应的方法
292 0
|
Web App开发 XML 编解码
01-CSS中的长度尺寸单位和颜色
01-CSS中的长度尺寸单位和颜色
197 0
01-CSS中的长度尺寸单位和颜色