【发布时间】:2015-12-03 00:11:22
【问题描述】:
在 MDN 的 description of Element.clientWidth 中它说。
注意:我已经根据@potatopeelings 的答案更新了 MDN。
Element.clientWidth 属性是元素的内部宽度(以像素为单位)。它包括填充,但不包括垂直滚动条(如果存在,如果呈现)、边框或边距。
此属性会将值四舍五入为整数。如果需要小数值,请使用 element.getBoundingClientRect()。
据我了解,除了四舍五入之外,clientWidth 应该与getBoundingClientRect().width 相同。
但是我发现对于许多元素(display 是 inline?)clientWidth(和高度)为零,而 getBoundingClientRect 返回的值似乎是正确的。
在 stackoverflow 上搜索会得到一些答案,说这发生在文档处于 ready 状态之前,但我一直都看到这种情况,而不仅仅是在页面加载时。
我检查过的所有浏览器的这种行为都是一致的,它在哪里指定应该是这种行为?
示例:
function str(name, width, height) {
return name + ': (' + width + ', ' + height + ')';
}
function test() {
var s = document.getElementById('s');
var rect = s.getBoundingClientRect();
document.getElementById('out').innerHTML =
str('client', s.clientWidth, s.clientHeight) + '<br/>' +
str('bounding', rect.width, rect.height);
}
<span id="s">A span</span><br/> <button onclick="test()">Test</button>
<hr />
<div id="out"></div>
【问题讨论】:
标签: javascript html css