`
slikel
  • 浏览: 66058 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

IE6、7、8、9下 DIV 的 position:absolute

    博客分类:
  • CSS
 
阅读更多

今天看到这篇来自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。

分享到:
评论

相关推荐

    ie6下position:absolute不显示问题解决方法

    在其它版本我们测试的position:absolute属性都是正常显示,但是ie6下显示的却为空。 解决方法如下: 只需要在浮动层的下方或上方加上一个空的div即可。例子如下。 复制代码代码如下: /**浮动层**/ &lt;div class=”...

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

    在IE6和IE7浏览器中,存在一个与CSS布局相关的特殊问题,特别是在处理绝对定位(position:absolute)元素和其相邻元素的margin时。这个问题是由于这些老版本的Internet Explorer对CSS标准实现的不完善导致的。本文将...

    css中position:fixed实现div居中上下左右居中

    本篇文章主要探讨了如何利用CSS属性position:fixed来实现DIV的绝对居中。 首先,了解position:fixed属性的作用是关键。position:fixed表示元素相对于浏览器窗口进行定位,这意味着无论页面如何滚动,元素都将保持在...

    CSS中的position:relative;的作用示例介绍

    在某些旧版本的浏览器如IE5.5和NS6中可能不支持。 在你的场景中,你想要让`div#sub`相对于`div#demo`定位在右上角。正确的做法是设置`div#demo`的`position`为`relative`,这样`div#demo`成为`div#sub`的定位参考点...

    css中position:relative和overflow:hidden之间的问题

    在本问题中,我们主要关注`position:relative`和`overflow:hidden`之间的交互,以及在不同浏览器(尤其是IE6和IE7)中的表现差异。 `position`属性用于定义元素的定位模式,它有多种值,如`static`(默认值)、`...

    ie6下select覆盖div的解决办法

    这种方法在大多数现代浏览器中有效,但IE6可能会忽略z-index,除非元素也被定位(`position: absolute`或`relative`)。如果Select仍然在Div之上,可以尝试将Select也设置为`position: relative;`,并赋予一个比Div...

    DIV+CSS IE圆角

    然而,早期版本的Internet Explorer(尤其是IE6、IE7和IE8)并不支持CSS3的一些高级特性,比如圆角。这就意味着在这些浏览器中,我们无法直接使用CSS来创建圆角效果。"DIV+CSS IE圆角"这个主题就是针对这个问题,...

    JS 滚动事件[removed]与position:fixed写兼容IE6的回到顶部组件

    在本文中,我们将深入探讨如何使用JavaScript的滚动事件`window.onscroll`和CSS的`position: fixed`属性来创建一个兼容IE6的回到顶部组件。这个组件在用户滚动页面时,会在页面底部显示一个返回顶部的按钮,当用户...

    解决IE6 中select 穿透 div 等层的问题

    在互联网的早期,Internet Explorer 6 (简称IE6) 是一款广泛应用的浏览器,但它的兼容性和渲染机制存在诸多问题,其中一个问题就是“select穿透div”的现象。这个问题在现代浏览器中通常不会出现,但在IE6中,`...

    ie6下定位bug解决

    在其他现代浏览器中,CSS的`position`属性如`relative`、`absolute`和`fixed`能很好地实现元素的定位,但在IE6中,这些属性的处理方式却大不相同,导致开发者需要进行特殊的“hack”来解决这些问题。 首先,IE6不...

    IE6中列表挡住div的解决

    在IE6中,尽量避免使用`position:absolute`,或者确保有足够的空间以避免遮挡。 6. **更新或替换浏览器**:尽管这并不总是可行,但鼓励用户升级到更现代的浏览器,如IE8+或非IE浏览器,是解决此类问题的长远之计。...

    IE和谷歌浏览器下div宽度不一致的问题解决.txt

    1. **盒模型差异**:在默认情况下,IE6、IE7以及部分IE8采用的是“怪异模式”(Quirks Mode),而其他浏览器则遵循W3C标准的盒模型。这意味着在IE的“怪异模式”下,元素的实际宽度计算方式与标准模式有所不同。 2...

    解决IE6中 Div层挡不住Select组件

    3. **CSS Hack**:对IE6应用特定的CSS hack,例如使用`*html .myDiv { position: absolute; z-index: 1000; }`。这种方法不推荐,因为CSS hack可能导致维护问题和未来的兼容性问题。 4. **JavaScript解决方案**:...

    纯css带箭头div

    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;...

    跨浏览器的实践:position:fixed 层的固定定位

    首先,我们看到一个 ID 为 "menu" 的 `div` 使用了 `position: absolute`,这样在默认情况下,它会被绝对定位到页面的顶部。然后,通过一个媒体查询 `@media screen`,当页面在标准模式下显示(非 Quirksmode)时,...

    ie6下实现position:fixed效果实例介绍

    在IE6浏览器中,`position:fixed`是一个棘手的问题,因为这个浏览器并不原生支持这一CSS定位方式。`position:fixed`允许元素相对于浏览器窗口进行定位,即使页面滚动,该元素仍然保持在屏幕的固定位置。这对于创建如...

    兼容IE6的遮罩层

    在早期的Web开发中,IE6浏览器由于其市场份额和用户需求,经常...在当前浏览器环境已高度兼容的背景下,虽然IE6的使用已经非常少,但理解这些历史遗留问题对理解Web发展史和提升跨浏览器兼容性能力仍然具有重要意义。

Global site tag (gtag.js) - Google Analytics