为什么Internet Explorer会在某些情况下自动调整div的style.left值?

时间:2012-03-29 17:13:58

标签: javascript css internet-explorer

我正在用javascript调整div的样式:

div.style.left = "486px";

我输出值:

console.log("left after:" + div.style.left);

输出:

日志:左后:486px

看起来很好。但我发现div并不存在。我使用开发人员工具检查内联样式:

left: 852px

这不会永远发生。左值的某些更改正常工作。但在其他人之后,会有一些“额外”的调整。

它只发生在Internet Explorer中(使用版本8测试)。在Firefox,Chrome,Opera和Safari中测试过,这种情况不会发生。有什么想法吗?

我正在做这个调整,作为使用$(window).resize函数对浏览器缩放的反应。 我在结尾处输出“left after:”。我假设浏览器已完成所有缩放和重新定位的东西。我设置了我的值,我在最后输出它,然后期望在CSS中看到这个值。在大多数情况下会发生这种情况,但有时候(大变焦)我会得到这些不同的值。

编辑:仅当浏览器缩放设置为150%或175%时才会发生。以150%为例,我将左值设置为567px。但是在CSS中我得到851px 当回到125%或更低的缩放级别时它再次起作用。从200%开始它也有效(设置425px)。

2 个答案:

答案 0 :(得分:1)

Absolute Positioning

  

其position属性值为absolute的元素被称为绝对定位,并且完全从文档流中删除:它根本不会影响后续元素。 它的位置相对于其包含块 ,它为正常流子节点以及position属性设置为绝对值的后代建立了一个新的包含块。

Containing Block

  

如果position属性的值是绝对值, 包含的块是最近的定位祖先 - 换句话说,最近的祖先,其position属性具有绝对值,固定值或相对值之一。 包含块由该祖先的填充边缘构成。

元素自然具有static的位置,因此默认情况下不会使其成为包含块。证明,check this demo。尝试将position:relative添加到正文中,这应该使其成为一个包含块。

答案 1 :(得分:0)

您要修改的元素需要具有absoluterelative的位置才能使定位正常工作。

此外,由于您使用的是jQuery,请使用$(element).css('left', "852")代替div.style.left。 jQuery更优雅地处理这个(以及IE的异常)。