我在容器中有两个div,第一个具有绝对定位。在ie7中,第二个div明显忽略了上边距。填充似乎工作正常,但出于视觉原因,我必须使用保证金。
我知道罪魁祸首是绝对定位的div,因为如果我删除它,下面的div工作正常。
这仅发生在ie7中(甚至不在ie6中)。
帮助!
编辑:我刚刚找到了一个解决方案,它包括为ie7提供父div填充顶部。所以我想知道为什么会发生这种情况,如果有的话,这是一个更清洁的解决方案,但我不需要更多的肮脏黑客......
答案 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垂直选项卡上使用的。