我有一个奇怪的问题,我的头部(h1
、h2
、h3
、h4
等)边距在我身上塌陷,但仅在 IE8 中。我花了很多时间试图查明我遇到的问题,并将其缩小到这个例子。
我几乎完全可以肯定,DOCTYPE
在仍然表示此错误的同时,不能删除任何其他页面对象(包括声明)。为了使代码尽可能紧凑,bug 只在修改 display 属性几次后出现,但实际页面每次修改 display 属性时都会出现问题(即在任何“nav”之后立即出现)。
我尝试将其发布为 jsFiddle,但无法从结果窗格中复制。因此,我将内联发布整个简化的测试用例,尽可能小/干净地编写:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Bug Test of IE8 Collapsing Margin problem</title>
<style type="text/css">
h2 {
margin: 20px 0 15px -10px;
background: red;
} h3 {
margin: 10px 0 15px -10px;
background: green;
} h4 {
margin-bottom: -15px;
background: blue;
} .noShow {
display: none;
}
</style>
<script type="text/javascript">
function show(theDiv) {
theDiv = document.getElementById(theDiv);
Div1 = document.getElementById('div1');
Div2 = document.getElementById('div2');
Div1.style.display = 'none';
Div2.style.display = 'none';
theDiv.style.display = 'block';
}
</script>
</head>
<body>
<ul>
<li><a href="javascript: show('div1');">Nav1</a></li>
<li><a href="javascript: show('div2');">Nav2</a></li>
</ul>
<div id="div1">
<h1>Head1</h1>
<h2>Head2</h2>
<h3>Head3</h3>
<h4>Head4</h4>
<br><br>
Click on "Nav2," then "Nav1," then "Nav2" a second time to see the shift
in header margins/padding.<br>
</div>
<div id="div2" class="noShow">
<h1>Head1</h1>
<h2>Head2</h2>
<h3>Head3</h3>
<h4>Head4</h4>
</div>
</body>
</html>
我已经开始阅读一些关于保证金崩溃以及它应该如何以这种方式运行的内容,但如果是这样的话,为什么 IE8 是我测试过的唯一具有这种行为的浏览器,为什么它不一致?我还尝试使用填充切换边距以在没有折叠问题的情况下获得类似的结果,但除非我做错了什么,否则也没有效果。
我试过申请overflow:hidden
声明noShow
。这解决了问题,但我不能在我的设计中使用它。(即使在示例中对此进行了调整,它看起来也是错误的,并且它的位置仍然不一致。)
有没有人对如何解决这个问题有什么好的建议?我不想关闭DOCTYPE
并强制使用 IE7 模式,因为我失去了其他功能(例如 pseudo-element :before
)。