我找到了一种从隐藏元素中生成getBoundingClientRect的方法:将其display样式更改为initial,以便浏览器可以正确计算。然后立即隐藏该元素,使其永远不会向用户显示。

但这在IE上不起作用。它总是返回0

如何在IE上进行这项工作?

var element = document.querySelector('#foo');

console.log('Element is hidden', element.getBoundingClientRect());

element.style.display = 'initial';
console.log('Element shows for little time', element.getBoundingClientRect());
element.style.display = 'none';
<div id="foo" style="display: none;">Guess my size, I'm hidden !</div>

最佳答案

可悲的是,IE不支持initial值(mdn)。因此赋值不执行任何操作,并且元素保持隐藏,这就是为什么将高度高度设为0的原因。

但是,即使这样做,也无法达到您预期的效果:display: initial为所有受影响的元素设置display的通用初始值-inlinediv都为span。这是这种行为的少许proof-of-concept

相反,您必须先隐藏自己的代码来缓存display的原始值,然后再隐藏它。实际上,这正是jQuery和其他流行框架对其.hide()的实现所做的:

09-25 17:48
查看更多