今天看到这篇来自http://www.light-star.net/itemid3id155atpage.html的文章。上面说到了margin-top和position:absolute的冲突问题。标题引起了我的好奇。我们一起来看看吧
先看一个代码:
<div id="layer1" style="margin:20px; border:1px solid #F88; width:400px; ">
<div id="layer2" style="position:absolute; background-color:#ccc;">Absolute</div>
<div id="layer3" style="margin:30px auto; width:200px; height:80px; background-color:#36F;">Normal</div>
</div>
这个代码在FF和IE8下都没有任何问题的,但是在IE6和IE7下有人如下两个bug:
1,绝对定义(position:absolute)的相邻元素margin-top失效,但如果相邻元素(layer3)去掉width属性,margin-top又会生效。
2,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</div>
<!--[if lte IE 7]><div></div><![endif]-->
<div style="margin:30px auto; width:200px; height:80px; background-color:#36F;">Normal</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</div>
<div style="margin:30px auto; width:200px; height:80px; background-color:#36F;">Normal</div>
</div>
3,这也是我这个文章所要说的最完美的解决方法,就是给绝对定义元素添加“float:left; display:inline;”定义。即代码变为:
<div style="margin:20px; border:1px solid #F88; width:400px;">
<div style="position:absolute; background-color:#ccc; float:left; display:inline;">Absolute</div>
<div style="margin:30px auto; width:200px; height:80px; background-color:#36F;">Normal</div>
</div>
好了,到我发言了,首先第3个解决方案我认为也有不太正确的地方,所以既然用个容器来包裹绝对定位的容器,那为啥不要父元素上加个 position:relative;呢?这样更符合标准啊,不是吗?
另外position:absolute和float:left一起使用我还是第一次看到,原谅我的肤浅吧。感觉用float:left 还不如用left:0更好呢。至于margin-top失效我还真的不太明白原因,所以我有了padding-top来代替。下面贴出我重新改过的代码,希望各位大侠路过可以看看,有不对的也顺便提一提纠正一下:
<div style=" position:relative; margin:20px; border:1px solid #F88; width:400px; padding-top:30px">
<div style="position:absolute; background-color:#ccc; left:0; top:0;">Absolute</div>
<div style="margin:0 auto 30px auto; width:200px; height:80px; background-color:#36F;">Normal</div>
</div>
(源自http://blog.sina.com.cn/s/blog_77dbebbb0100u7hy.html)
我解决的办法是在父DIV上添加position: relative,在子DIV(包含属性position:absolute)与之兄弟DIV之间添加一个空白的DIV。
分享到:
相关推荐
在其它版本我们测试的position:absolute属性都是正常显示,但是ie6下显示的却为空。 解决方法如下: 只需要在浮动层的下方或上方加上一个空的div即可。例子如下。 复制代码代码如下: /**浮动层**/ <div class=”...
在IE6和IE7浏览器中,存在一个与CSS布局相关的特殊问题,特别是在处理绝对定位(position:absolute)元素和其相邻元素的margin时。这个问题是由于这些老版本的Internet Explorer对CSS标准实现的不完善导致的。本文将...
本篇文章主要探讨了如何利用CSS属性position:fixed来实现DIV的绝对居中。 首先,了解position:fixed属性的作用是关键。position:fixed表示元素相对于浏览器窗口进行定位,这意味着无论页面如何滚动,元素都将保持在...
在某些旧版本的浏览器如IE5.5和NS6中可能不支持。 在你的场景中,你想要让`div#sub`相对于`div#demo`定位在右上角。正确的做法是设置`div#demo`的`position`为`relative`,这样`div#demo`成为`div#sub`的定位参考点...
在本问题中,我们主要关注`position:relative`和`overflow:hidden`之间的交互,以及在不同浏览器(尤其是IE6和IE7)中的表现差异。 `position`属性用于定义元素的定位模式,它有多种值,如`static`(默认值)、`...
这种方法在大多数现代浏览器中有效,但IE6可能会忽略z-index,除非元素也被定位(`position: absolute`或`relative`)。如果Select仍然在Div之上,可以尝试将Select也设置为`position: relative;`,并赋予一个比Div...
然而,早期版本的Internet Explorer(尤其是IE6、IE7和IE8)并不支持CSS3的一些高级特性,比如圆角。这就意味着在这些浏览器中,我们无法直接使用CSS来创建圆角效果。"DIV+CSS IE圆角"这个主题就是针对这个问题,...
在本文中,我们将深入探讨如何使用JavaScript的滚动事件`window.onscroll`和CSS的`position: fixed`属性来创建一个兼容IE6的回到顶部组件。这个组件在用户滚动页面时,会在页面底部显示一个返回顶部的按钮,当用户...
在互联网的早期,Internet Explorer 6 (简称IE6) 是一款广泛应用的浏览器,但它的兼容性和渲染机制存在诸多问题,其中一个问题就是“select穿透div”的现象。这个问题在现代浏览器中通常不会出现,但在IE6中,`...
在其他现代浏览器中,CSS的`position`属性如`relative`、`absolute`和`fixed`能很好地实现元素的定位,但在IE6中,这些属性的处理方式却大不相同,导致开发者需要进行特殊的“hack”来解决这些问题。 首先,IE6不...
在IE6中,尽量避免使用`position:absolute`,或者确保有足够的空间以避免遮挡。 6. **更新或替换浏览器**:尽管这并不总是可行,但鼓励用户升级到更现代的浏览器,如IE8+或非IE浏览器,是解决此类问题的长远之计。...
1. **盒模型差异**:在默认情况下,IE6、IE7以及部分IE8采用的是“怪异模式”(Quirks Mode),而其他浏览器则遵循W3C标准的盒模型。这意味着在IE的“怪异模式”下,元素的实际宽度计算方式与标准模式有所不同。 2...
3. **CSS Hack**:对IE6应用特定的CSS hack,例如使用`*html .myDiv { position: absolute; z-index: 1000; }`。这种方法不推荐,因为CSS hack可能导致维护问题和未来的兼容性问题。 4. **JavaScript解决方案**:...
div.container{position:absolute; top:30px; left:40px; font-size: 9pt; display:block; height:100px; width:200px; background-color:transparent; *border:1px solid #666; } s{ position:absolute; top:-20px;...
首先,我们看到一个 ID 为 "menu" 的 `div` 使用了 `position: absolute`,这样在默认情况下,它会被绝对定位到页面的顶部。然后,通过一个媒体查询 `@media screen`,当页面在标准模式下显示(非 Quirksmode)时,...
在IE6浏览器中,`position:fixed`是一个棘手的问题,因为这个浏览器并不原生支持这一CSS定位方式。`position:fixed`允许元素相对于浏览器窗口进行定位,即使页面滚动,该元素仍然保持在屏幕的固定位置。这对于创建如...
在早期的Web开发中,IE6浏览器由于其市场份额和用户需求,经常...在当前浏览器环境已高度兼容的背景下,虽然IE6的使用已经非常少,但理解这些历史遗留问题对理解Web发展史和提升跨浏览器兼容性能力仍然具有重要意义。