IE6/IE7下绝对定位position:absolute和margin的冲突问题解决

首先我们来看一个代码:

复制代码代码如下:
<div id=”layer1″ style=”margin:20px; border:1px solid #F88;
width:400px; “> <div id=”layer2″ style=”position:absolute;
background-color:#ccc;”>Absolute (layer2)</div> <div id=”layer3″
style=”margin:30px auto; width:200px; height:80px;
background-color:#36F;”>Normal Text Content (layer3)</div>
</div>

这个代码的效果如下:

在FF和IE8下都没有任何问题的,但是在IE6和IE7下有人如下两个bug:

a,
绝对定义(position:absolute)的相邻元素margin-top失效,但如果相邻元素(layer3)去掉width属性,margin-top又会生效。
b, layer1无法靠左,距离左边的距离为layer1的第一个非绝对定义元素(layer3)的margin-left值。 解决方法:

1,添加代码:<!–[if lte IE
7]><div></div><![endif]–>,这也是网上找到的能够完全解决问题的方法。即代码变为:

复制代码代码如下:
<div style=”margin:20px; border:1px solid #F88; width:400px;
“> <div style=”position:absolute; background-color:#ccc;”>Absolute
(layer2)</div> <!–[if lte IE
7]><div></div><![endif]–> <div style=”margin:30px auto;
width:200px; height:80px; background-color:#36F;”>Normal Text Content
(layer3)</div> </div>

2,外围元素加position:relative定义,绝对定义元素加left和top定义。此方法可以解决第二个bug,无法解决第一个bug。也有说法用padding-top替代margin-top的,但是有时可以这样,有时候毕竟不行的。代码为:

复制代码代码如下:
<div style=”margin:20px; border:1px solid #F88; width:400px;
position:relative”> <div style=”position:absolute; background-color:#ccc;
left:0; top:0;”>Absolute (layer2)</div> <div style=”margin:30px
auto; width:200px; height:80px; background-color:#36F;”>Normal Text Content
(layer3)</div> </div>

3,这是本文所要阐述的方法,相对来说比较完美一些。给绝对定义元素添加“background-color:#CCC; float:left;
display:inline;”定义,背景色千万不可以去掉,如果没有背景色就加一个透明(background-color:transparent;)。即代码变为:

复制代码代码如下:
<div style=”margin:20px; border:1px solid #F88;
width:400px;”> <div style=”position:absolute; background-color:#ccc;
float:left; display:inline;”>Absolute (layer2)</div> <div
style=”margin:30px auto; width:200px; height:80px;
background-color:#36F;”>Normal Text Content (layer3)</div>
</div>

纠结了两天,时刻都在思考这个问题的解决思路,总算解决了。感谢桃子。

时间: 2024-10-27 01:19:22

IE6/IE7下绝对定位position:absolute和margin的冲突问题解决的相关文章

空a标签 a标签空的情况下 IE6 IE7下点击无效

最近做了好多网站专题页面,因为专题页面图片较多,个别banner上有1个到多个按钮,一种是用"图解img标签的usemap"的方法做链接,(图解img标签的usemap使用方法)[传送门] 另一种用则需要用空a标签来做,发现"a标签"在IE6与IE7中点击无效中点击不了("a标签"定义宽度和高度IE浏览器为零0),其他浏览器都正常(如果不正常请加"display:bolck;"(←推荐)或"float:left;&q

IE6 IE7 IE8(Q) 负边距 (margin) 导致元素溢出 hasLayout 容器时显示异常

标准参考 根据W3C CSS2.1规范第8.3节中的描述,边距属性设置了一个框的边距区的宽度.'margin' 缩写属性设置所有四边的边距,而其它的边距属性( 'margin-top' ,'margin-right' , 'margin-bottom' 及 'margin-left' )只设置它们代表的那一边的边距. 边距属性的取值可以是下面值之一: <length> 指定一个固定的宽度. <percentage> 百分比的计算基于生成的框的包含块的宽度. auto 其表现细节请参

绝对定位 position:absolute,相对定位 position:relative

<1> 当我们要使用绝对定位的时候,必须要有两个条件 1>必须给父元素加定位属性,一般建议使用 position:relative(即:给父元素设为相对定位); 2>给子元素,加绝对定位position:absolute(给子元素设置为绝对定位); 同时加方向属性(top ,left,rigth,bottom) 绝对定位是以父元素为基准点,进行定位(如果他没有父元素,或者它的父元素没有设置position:relative属性)它就会以<body>为基准点进行定位.绝对

IE6/IE7下margin-bottom失效兼容解决办法及双倍边距问题

(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期 2014-04-08) 一.IE6/IE7下margin-bottom失效兼容解决办法 1.用padding-bottom代替:2.在父标签中加入overflow:hidden:或zoom:100%示例代码: 不正常显示 ul{} li{ list-style:none; float:left; margin:10px;} 1. 你会发现左边10px 变成20px了, 解决办法:在li的CSS中加入:display:inline

IE6/IE7下:inline-block解决方案

IE6/IE7下对display:inline-block的支持性不好. 1.inline元素的display属性设置为inline-block时,所有的浏览器都支持: 2.block元素的display属性设置为inline-block时,IE6/IE7浏览器是不支持的: 对象呈递为内联对象,但是对象的内容作为块对象呈递.旁边的内联对象会被呈递在同一行,允许空格.(准确地说,应用此特性的元素现为内联对象,周围元素保持在同一行,但可以设置宽度和高度等块元素的属性) IE中对内联元素使用displ

块级元素IE6/IE7下inline-block解决方案

转:块级元素IE6/IE7下:inline-block解决方案 IE6/IE7下对display:inline-block的支持性不好. 1.inline元素的display属性设置为inline-block时,所有的浏览器都支持: 2.block元素的display属性设置为inline-block时,IE6/IE7浏览器是不支持的: 对象呈递为内联对象,但是对象的内容作为块对象呈递.旁边的内联对象会被呈递在同一行,允许空格.(准确地说,应用此特性的元素现为内联对象,周围元素保持在同一行,但可

IE6/IE7下:inline-block解决方案(转)

原文地址:http://blog.sina.com.cn/s/blog_60b35e8301019hk2.html 1.inline元素(比如span,em等)的display属性设置为inline-block时,所有的浏览器都支持: 2.block元素的display属性设置为inline-block时,IE6/IE7浏览器是不支持的:直接贴代码:<div class="list">  <span>无标题文档无标题文档</span>  <sp

JavaScript在IE6,IE7下报错&#39;expected identifier, string or number&#39;

问题: 代码在Forefox和IE8下工作正常,但是在IE6下报错: expected identifier, string or number 假如变量options有多个选项,那么我们可以用逗号分开:但是最后一个选项后不可以有逗号.虽然IE8和Firefox可以忽略这个逗号,但是IE6下会报错(据说IE7下也会报错) 解决方案: 解决方法很简单,把多余的逗号删除就可以了. var options = { target: '.content' //注重不可以加逗号 }; JavaScript在

IE6/IE7下position:absolute;绝对定位偏移、不显示问题

其实这个原因是因为IE6/IE7的解析是在position:absolute之后,仍然会按照普通文档流的解析来进行,而要打破这种方式,让它正常工作就需要给它一个定位,具体代码如下:方法一: CSS: html代码: 切记left:0px;必须两个都要写,少写一个都会造成不显示:  方法二: