IE7忽略绝对定位div后的div中的边距

时间:2010-07-05 09:48:43

标签: html css internet-explorer internet-explorer-7

我在容器中有两个div,第一个具有绝对定位。在ie7中,第二个div明显忽略了上边距。填充似乎工作正常,但出于视觉原因,我必须使用保证金。

我知道罪魁祸首是绝对定位的div,因为如果我删除它,下面的div工作正常。

这仅发生在ie7中(甚至不在ie6中)。

帮助!

编辑:我刚刚找到了一个解决方案,它包括为ie7提供父div填充顶部。所以我想知道为什么会发生这种情况,如果有的话,这是一个更清洁的解决方案,但我不需要更多的肮脏黑客......

3 个答案:

答案 0 :(得分:5)

这就是我们所说的保证金崩溃。您也可以尝试定位第二个div。

您可以找到有关保证金折叠的更多信息。

在开始阅读整篇文章之前,如果您的代码中有任何条件,请检查以下条件。

  

BODY元素从不参加   保证金崩溃,因为它们是   被认为是神奇的,意思是   有时奇怪的差距没有表现出来   在它上面的Internet Explorer   在其他浏览器中崩溃时   发生在身体的顶部。这个   通常很容易解决;只是防止   另一方的利润率下降   浏览器,它在Internet上工作   探险家也是。 (注意HTML   元素的边缘永远不会崩溃   任何浏览器,这是正确的   行为)。

     

在极少数情况下,保证金在哪里崩溃   内部元素具有底部边框   外容器有一个底部   边界,可以导致背景   中间元素溢出   Internet Explorer中的容器。

     

更有问题的错误是由   Internet Explorer的奇怪hasLayout   行为。这是一个基本的错误   在Internet Explorer 7-并影响   其他几件事,但是这个   文章只涉及保证金   崩溃。设置某些样式   一个元素使它“有布局”(a   Internet Explorer独有的概念,   并且不符合任何标准)。   导致最常见的风格   问题是宽度。当一个元素   hasLayout突然假设了一个   最小高度为1em,如果设置为   Internet Explorer 6中少了一些,   例如0.5em,它仍然使用1em。

     

当满足下列条件之一时,元素具有布局:

     
      
  • 指定宽度和/或高度
  •   
  • 这是一个内联块(显示:内联块)
  •   
  • 它具有绝对定位(位置:绝对)
  •   
  • 它是一个浮动(浮动:左,浮动:右)
  •   
  • 这是一个表格元素
  •   
  • 它被转换(style =“zoom:1”)
  •   
     

高度通常不会导致   问题,因为设置高度会   防止在其他浏览器中崩溃   无论如何。但是,触发hasLayout   在父级的嵌套元素上   防止边缘崩溃使用   边框或填充,可能会导致边距   消失,或崩溃   父母与填充无关   或边界。通常,hasLayout是一个   一团糟,最好避免它   利润率至关重要的地方。

我希望这能帮助你解决问题。

答案 1 :(得分:1)

就我而言,上面没有任何帮助。我在这些元素之间使用了额外的DIV。这个额外的DIV有明确的:两者,flot:none等。有关详细信息,请参阅http://starikovs.com/2010/12/24/ie7-margin-top-and-absolute-pos-element/

答案 2 :(得分:0)

我使用的位置:静态;对于IE7修复程序忽略的边距上较大的div(位置:内部内容的相对值)。较小的左侧列保持位置:绝对。这是在Jquery垂直选项卡上使用的。

http://code.google.com/p/jquery-vert-tabs/downloads/detail?name=jQuery%20Vertical%20Tabs%201.1.4.zip&can=2&q=