- IE6的使用padding后子元素绝对定位的BUG
-
在前端开发中,经常会用到css的position:absolute来使层浮动,前通过left,top,right等属性来对层进行定位,但ie6对left,top,right等属性的解释和ie7,ie8及firefox、chrome等不一致。
在父层使用position:relative;和padding(当然0值除外)后,ie6中层的定位起始坐标是从padding后的位置算起, 而其他则从层的真实位置算起,而非被padding改变后的那个位置。这点造成使用position:absolute进行层定位时ie6与其他浏览器的 表现不一样。
目前解决办法,使用csshack,_left针对ie6进行重设。
一些样例请测试好再传,会误导读者的,还有ie与其他主流浏览器的盒模式是一样的,不是ie定了width在加padding就不会改变宽度也是改变的, 网上有些东西很容易误导读者,请博主对读者负责啊!
非常感谢robertsky123的留言和建议!由于robertsky123当头棒喝使我重新对该问题进行了测试。
确实该问题还有其他的解决:不过这些方案很和实际项目有关,比如这个父级容器是否顶宽定高等其他原因。
首先看问题的产生,HTML和CSS如下:
1
<divstyle="position:relative; padding:20px; border:2px solid #F00;">
2
3
<divstyle="position:absolute; top:0; left:0; border:1px solid #690;">test box</div>
4
5
</div>
“ie与其他主流浏览器的盒模式是一样的”我真不敢苟同,我始终觉得IE6的盒模式就是和其他主流浏览器盒模式存在差异,如果是一样的,那么试问这个例子IE6为什么会和其他浏览器不同呢?
虽然相对定位的父级容器加宽度,高度,zoom:1都能使本来中定位的test box圆点和其他主流浏览器一致,例如:
1
<divstyle="position:relative; padding:20px; border:2px solid #F00;height:20px">
2
<divstyle="position:absolute; top:0; left:0; border:1px solid #690;">test box</div>
3
</div>
注:这里如果加宽度和zoom:1,padding-top:20px和padding-bottom:20px的效果就没了,
如果在实际项目中定死高度的,那么加个高度是很好的选择,但是杯具的是往往很多时候这个高度是自动撑的,那么我还是觉得用hack方式比较好!比如:
1
<divstyle="position:relative; padding:20px 20px; border:2px solid #F00;">
2
<divstyle="position:absolute; top:0;_top:2px; left:0;_left:-20px; border:1px solid #690;">test box</div>
3
</div>