javascript - 与浏览器 ui 相比,Clientwidth 和 offsetWidth 返回不同的值
问题描述
我的 javascript 代码有一个奇怪的行为。我想<div>
通过 javascript 代码获取容器的宽度,但它不会像 chrome/firefox sais 的 ui 那样返回相同的大小。我尝试以三种不同的方式获取特定 div 容器的宽度: 1. Width .offsetWidth 2. 宽度 getBoundingClientRect() 函数 3. 使用 jquery 和 width()
这三个都给了我相同的背部,但浏览器向我显示了不同的宽度。我通过右键单击获得浏览器宽度-> 检查元素-> 将鼠标悬停在特定元素上,它将向您显示 px 宽度。
例如,浏览器 div 宽度为 971px,而 javascript 宽度返回我 761px。这里做错了什么?
我在下面有实际的代码(但真的不知道如何正确使用它:()。
let container = document.getElementById('container');
let offsetWidth = container.offsetWidth;
let boundingWidth = container.getBoundingClientRect().width
let jqueryWidth = $('#container').width();
.container {
display: flex;
flex-flow: column nowrap;
}
.rows {
display: block;
position: relative;
overflow: auto hidden;
height: 60px;
}
<div id="container" className={styles.container}>
<div className={styles.rows}> {/* Here is some code */}</div>
</div>
我希望你能帮助我,如果你需要任何进一步的信息,请告诉我。
解决方案
JS 方法(我测试过.clientWidth
,.clientHeight
但其他应该类似)包括填充和边距值。
例如,我们在 chrome 中的 div 宽度为 638px,宽度水平填充 8px,运行clientWidth
将产生 654。(638 base + 8 padding-left + 8 padding-left)。然后,让我们添加margin-left:10px
我们现在从我们的值松散10px 到现在得到 644。(638 base + 8 padding-left + 8 padding-right - 10 margin-left)
这有帮助吗?
编辑:您可以像我一样在 Chrome 检查器中自己测试它。使用 Chrome 控制台轻松运行本地 JS。
推荐阅读
- python - 如何在 spaCy v3 中正确使用变压器模型进行自定义 NER?
- notepad++ - 在我的用户定义语言中定义折叠标记时遇到问题
- javascript - 使用输入过滤器在长下拉列表中搜索项目,但只允许用户从下拉列表中提交选项
- python - 如何在 Google 我的地图中导入 CSV 文件?
- csv - 由于某种原因,附加到 CSV 失败
- azure-devops - Azure DevOps API 从发布 ID 获取所有测试运行
- sql - 根据同一表中另一列中的唯一值更新多行
- flutter - 使用flutter web将数据加载到firebase存储中的文件内存中
- java - 你什么时候会在 postgres 可序列化隔离级别上使用 Hibernate 乐观锁?
- javascript - 如何在 HTML 中重叠两个 div(登录时的成功消息)?