如何确定元素的尺寸

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


目录
相关文章
|
1月前
|
前端开发
元素的宽度和高度
元素的宽度和高度。
23 4
|
1月前
|
容器
在 Flex 布局中,如何设置元素在侧轴上的初始对齐方式?
【10月更文挑战第22天】同时,还可以进一步探索其他 Flex 布局相关的属性和技巧,以更好地掌握 Flex 布局的强大功能,创造出更具创意和适应性的页面布局。
35 2
|
1月前
在使用 Flexbox 布局实现自适应宽度的品字布局时,子元素的排列顺序是否可以调整?
【10月更文挑战第27天】使用Flexbox布局实现自适应宽度的品字布局时,可以通过调整HTML结构中的顺序或使用 `order` 属性来灵活地调整子元素的排列顺序,以满足不同的设计和布局需求。
|
5月前
|
前端开发 容器
css 动态文本对齐自适应 — 文本宽度小于容器宽度时居中对齐,文本宽度大于容器宽度时居左对齐
css 动态文本对齐自适应 — 文本宽度小于容器宽度时居中对齐,文本宽度大于容器宽度时居左对齐
45 2
|
7月前
使用SDAutoLayout实现控件根据内容进行宽度自适应和高度自适应
使用SDAutoLayout实现控件根据内容进行宽度自适应和高度自适应
123 2
【元素水平垂直居中的方法有哪些?元素不定宽高呢?】
【元素水平垂直居中的方法有哪些?元素不定宽高呢?】
【元素水平垂直居中的方法有哪些?元素不定宽高呢?】
|
前端开发 JavaScript API
固定元素宽度根据文本的长度缩小字号,超出缩小字号
固定元素宽度根据文本的长度缩小字号,超出缩小字号
442 0
固定元素宽度根据文本的长度缩小字号,超出缩小字号
|
JavaScript 前端开发 定位技术
百度地图元素宽度自适应的方法
百度地图元素宽度自适应的方法
377 0