2012-03-29 24 views
0

我调整使用javascript一个div的风格:为什么Internet Explorer会在某些情况下自动调整div的style.left值?

div.style.left = "486px"; 

I输出值:

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

输出:

LOG:离开后:486px

看起来不错。但我看到div不在那里。我使用开发人员工具检查内联样式:

left: 852px 

这不会总是发生。左值的某些更改正常工作。但在其他人身上,一些“额外”调整是在之后做出的。

它只发生在Internet Explorer(测试版本8)。经过Firefox,Chrome,Opera和Safari测试,并没有发生。任何想法?

我正在做这个调整作为浏览​​器缩放使用$(窗口).resize函数的反应。 我在最后使输出“在......之后:”。我假设浏览器已完成所有缩放和重新定位的内容。我设定我的价值,我输出它的最后,然后期望在CSS中看到这个值。这在大多数情况下都会发生,但有时(大变焦)我会得到这些不同的值。

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

+0

并没有多说这个问题。你知道谁是元素的抵消父母吗?据我所知,IE工具显示相对于屏幕的偏移量,以及偏移父级。 – Joseph 2012-03-29 17:17:01

+0

div是从身体直接的小孩。抵消父母应该是身体。 – Ixx 2012-03-29 17:24:51

+0

我知道在IE8中有一个错误会导致一个有效的调整大小,直到你点击屏幕或其他东西(我相信它是垂直调整大小)不触发调整大小。如果您要添加这样的样式元素,您应该能够使用DOM检查器查看内联样式。 – 2012-03-29 17:34:13

回答

1

Absolute Positioning

的元件,其位置属性有绝对的被说成是绝对定位的值,并完全从文件流中除去的:它根本不会影响随后的元素。 它相对于其包含块被定位,并且它为正常流儿童以及位置属性被设置为绝对的后代建立了一个新的包含区块。

Containing Block

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

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

+0

不起作用,没有变化 – Ixx 2012-03-29 17:46:55

+0

你可以发布你的其他代码吗? – Joseph 2012-03-29 17:50:30

0

您正在修改的元素需要位置为absoluterelative以便定位工作。

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

相关问题