如何确定元素的尺寸

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


目录
相关文章
|
JavaScript 前端开发
addEventListener()方法中的参数,以及作用
addEventListener()方法中的参数,以及作用
461 1
|
前端开发 JavaScript UED
深入理解requestAnimationFrame函数及其应用
深入理解requestAnimationFrame函数及其应用
|
监控 前端开发 JavaScript
Sentry 监控部署与使用(详细流程)
Sentry 监控部署与使用(详细流程)
2972 0
|
11月前
|
移动开发 前端开发 API
React 拖拽上传组件 Drag & Drop Upload
拖拽上传(Drag & Drop Upload)是现代文件上传方式,允许用户通过简单拖拽操作将文件上传至网页。本文介绍如何在React应用中实现拖拽上传组件,涵盖HTML5拖放API、React状态管理、组件构建及常见问题解决。包括视觉反馈、文件类型和大小限制等优化措施,确保组件的用户体验和稳定性。
475 27
|
JavaScript 前端开发
`addEventListener` 方法的第三个参数有什么作用?
【10月更文挑战第29天】`addEventListener` 方法的第三个参数提供了对事件传播阶段的精细控制,使开发人员能够根据具体的业务场景和需求,灵活地处理事件的触发顺序和执行逻辑,从而实现更加丰富和精确的交互效果。
|
Linux Python Windows
Python虚拟环境virtualenv安装保姆级教程(Windows和linux)
Python虚拟环境virtualenv安装保姆级教程(Windows和linux)
1978 2
|
缓存 安全 应用服务中间件
Nginx的反向代理功能有哪些应用场景呢
【8月更文挑战第22天】Nginx的反向代理功能有哪些应用场景呢
797 0
|
JavaScript 前端开发 API
JS案例:在浏览器实现自定义菜单
JS案例:在浏览器实现自定义菜单
183 0
|
负载均衡 前端开发 中间件
nginx安装配置 - 全网最细学习nginx
nginx安装配置 - 全网最细学习nginx
178 0
|
应用服务中间件 Linux 网络安全
阿里云服务器购买和使用图文详解
本文重点讲解如何使用阿里云服务器部署项目