在MDN的description of Element.clientWidth它說。clientWidth和clientHeight報告爲零,而getBoundingClientRect正確
注:我因爲更新MDN已經根據@potatopeelings答案。
的Element.clientWidth屬性是像素的元件的內部寬度。它包括填充,但不包括垂直滾動條(如果存在,如果呈現),邊框或邊距。
該屬性將四捨五入爲整數。如果您需要小數值,請使用element.getBoundingClientRect()。
從這個我明白,不是四捨五入clientWidth
應該是一樣getBoundingClientRect().width
等。
不過,我看到了許多元素(其中display
是inline
?)的clientWidth
(和高度)爲零,而由getBoundingClientRect
返回的值似乎是正確的。
搜索計算器上帶來了一些答案,說這發生之前的原稿爲準備狀態,但我看到這一切的時候,不只是當頁面正在加載。
此行爲對於我檢查過的所有瀏覽器都是一致的,它在哪裏指定這應該是行爲?
樣品:
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>
這就是它!你有什麼想法,爲什麼這是? – Motti
我相信它已經像在規範,因爲很長一段時間 - 我能找到的最早的參考是https://lists.w3.org/Archives/Public/www-style/2008Mar/0060.html(2008年),但是我敢肯定如果你使用瀏覽器特定的話會有更老的引用,甚至更老的引用。 – potatopeelings
謝謝,我已經更新了MDN。 – Motti