【IE6的疯狂之十】父级使用padding后子元素绝对定位的BUG
2011-04-28 15:38
513 查看
在前端开发中,经常会用到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进行重设。
另:IE6 BUG大全: http://www.css88.com/archives/579
===========================以下内容2010年3月30日更新=============================
今天收到robertsky123的留言(见留言区):
一些样例请测试好再传,会误导读者的,还有ie与其他主流浏览器的盒模式是一样的,不是ie定了width在加padding就不会改变宽度也是改变的, 网上有些东西很容易误导读者,请博主对读者负责啊!
非常感谢robertsky123的留言和建议!由于robertsky123当头棒喝使我重新对该问题进行了测试。
确实该问题还有其他的解决:不过这些方案很和实际项目有关,比如这个父级容器是否顶宽定高等其他原因。
首先看问题的产生,HTML和CSS如下:
显示如图:
robertsky123在留言中说的“ie与其他主流浏览器的盒模式是一样的”我真不敢苟同,我始终觉得IE6的盒模式就是和其他主流浏览器盒模式存在差异,如果是一样的,那么试问这个例子IE6为什么会和其他浏览器不同呢?
虽然相对定位的父级容器加宽度,高度,zoom:1都能使本来中定位的test box圆点和其他主流浏览器一致,例如:
如图:
注:这里如果加宽度和zoom:1,padding-top:20px和padding-bottom:20px的效果就没了,如图:
如果在实际项目中定死高度的,那么加个高度是很好的选择,但是杯具的是往往很多时候这个高度是自动撑的,那么我还是觉得用hack方式比较好!比如:
view source
print?
在父层使用position:relative;和padding(当然0值除外)后,ie6中层的定位起始坐标是从padding后的位置算起,而其他则从层的真实位置算起,而非被padding改变后的那个位置。这点造成使用position:absolute进行层定位时ie6与其他浏览器的表现不一样。
目前解决办法,使用csshack,_left针对ie6进行重设。
另:IE6 BUG大全: http://www.css88.com/archives/579
===========================以下内容2010年3月30日更新=============================
今天收到robertsky123的留言(见留言区):
一些样例请测试好再传,会误导读者的,还有ie与其他主流浏览器的盒模式是一样的,不是ie定了width在加padding就不会改变宽度也是改变的, 网上有些东西很容易误导读者,请博主对读者负责啊!
非常感谢robertsky123的留言和建议!由于robertsky123当头棒喝使我重新对该问题进行了测试。
确实该问题还有其他的解决:不过这些方案很和实际项目有关,比如这个父级容器是否顶宽定高等其他原因。
首先看问题的产生,HTML和CSS如下:
1 | < div style = "position:relative; padding:20px; border:2px solid #F00;" > |
2 |
3 | < div style = "position:absolute; top:0; left:0; border:1px solid #690;" >test box</ div > |
4 |
5 | </ div > |
robertsky123在留言中说的“ie与其他主流浏览器的盒模式是一样的”我真不敢苟同,我始终觉得IE6的盒模式就是和其他主流浏览器盒模式存在差异,如果是一样的,那么试问这个例子IE6为什么会和其他浏览器不同呢?
虽然相对定位的父级容器加宽度,高度,zoom:1都能使本来中定位的test box圆点和其他主流浏览器一致,例如:
1 | < div style = "position:relative; padding:20px; border:2px solid #F00;height:20px" > |
2 | < div style = "position:absolute; top:0; left:0; border:1px solid #690;" >test box</ div > |
3 | </ div > |
注:这里如果加宽度和zoom:1,padding-top:20px和padding-bottom:20px的效果就没了,如图:
如果在实际项目中定死高度的,那么加个高度是很好的选择,但是杯具的是往往很多时候这个高度是自动撑的,那么我还是觉得用hack方式比较好!比如:
view source
print?
1 | < div style = "position:relative; padding:20px 20px; border:2px solid #F00;" > |
2 | < div style = "position:absolute; top:0;_top:2px; left:0;_left:-20px; border:1px solid #690;" >test box</ div > |
3 | </ div > |
相关文章推荐
- 【IE6的疯狂之十】父级使用padding后子元素绝对定位的BUG(2010年3月30日更新)
- 【IE6的疯狂之十】父级使用padding后子元素绝对定位的BUG
- IE6父级使用padding后子元素绝对定位的BUG
- 【转】父级使用padding后子元素绝对定位的BUG
- IE6 下父级(relative)使用padding后,子元素绝对定位(absolute)的bug
- IE6下绝对定位元素父级宽高是奇数,绝对定位元素的right和bottom值会有1个像素的偏差
- IE6,7局部滚动条中元素position:relative或绝对定位滚动无效BUG
- 【兼容ie6笔记】当li为父级元素,子级元素使用了position:absolute,并用left定位时
- IE6 绝对定位元素的 1px 间距 bug(转自:http://www.99css.com/archives/53)
- 在IE6下绝对定位元素的父级宽高是奇数的时候,元素的right值和bottom值会有1px的偏差
- ie6使用绝对定位position:absolute,box不显示
- IE6使用jquery.bgiframe.js解决select元素不会正常隐藏的BUG
- 郁闷的1px - IE6绝对定位的神奇bug
- IE6中绝对定位元素消失问题
- ie6绝对定位的块会被select元素遮挡的解决方案
- css基础 出现层叠的两个绝对定位元素 使用z-index属性设置层叠顺序
- 【CSS】IE7局部滚动区域下绝对定位或相对定位元素不随滚动条滚动的bug
- ie6中,里面元素绝对定位时,外层元素一定要给高度。
- 绝对定位九宫格IE6bug不完整解决方案
- IE6绝对定位的bug及其解决办法