我正在用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)。
答案 0 :(得分:1)
其position属性值为absolute的元素被称为绝对定位,并且完全从文档流中删除:它根本不会影响后续元素。 它的位置相对于其包含块 ,它为正常流子节点以及position属性设置为绝对值的后代建立了一个新的包含块。
如果position属性的值是绝对值, 包含的块是最近的定位祖先 - 换句话说,最近的祖先,其position属性具有绝对值,固定值或相对值之一。 包含块由该祖先的填充边缘构成。
元素自然具有static
的位置,因此默认情况下不会使其成为包含块。证明,check this demo。尝试将position:relative
添加到正文中,这应该使其成为一个包含块。
答案 1 :(得分:0)
您要修改的元素需要具有absolute
或relative
的位置才能使定位正常工作。
此外,由于您使用的是jQuery,请使用$(element).css('left', "852")
代替div.style.left
。 jQuery更优雅地处理这个(以及IE的异常)。