问题: 是否有这样的情况,
getBoundingClientRect
和window.getComputedStyle
在width
或height
方面会有差异?
我在IE中发现了一个不一致的宽度(见下文),当一个元素有box-sizing
时,window.getComputedStyle
返回错误的值。
所以我想覆盖只有width
和height
从getBoundingClientRect
的值,但不确定是否有失败的情况。
问题示例(在IE中无法正常显示):http://jsfiddle.net/bwPM8/
var box = document.querySelector('.box');
var gBCR_width = box.getBoundingClientRect().width; // always 200
var wGCS = window.getComputedStyle(box).width; // 200 some browsers, 160 in IE
getComputedStyle
中的IE似乎会将padding和border计算在盒子内部,而其他浏览器则会将其计算在外部。200px -(10 + 10边框)-(10 + 10填充)= 160px
- erosmangetComputedStyle()
从 CSS 中获取数据,因此数据在 CSS 中是硬编码的。getBoundingClientRect()
是一个文本矩形对象,它包含一组文本矩形。换句话说,它似乎是从对象的渲染中获取数据的。这种差异来自于 CSS 盒子模型,正如该页面所述:“IE8 及更早版本的 IE 在 width 属性中包括填充和边框。要解决此问题,请将 <!DOCTYPE html> 添加到 HTML 页面中。” - erosman