css - DIV之间存在差距的原因是什么

标签 css

我有一个简单的 HTML 页面,如下所示:

<html>
    <head>
        <style>
            BODY { margin:0px; padding:0px; background-color:#000000; color:#FFFFFF;}
            /*H1 { margin:0px; }*/
            .t-head { padding:10px; background-color:#0000FF; }
            .t-body { background-color:#FFFFFF; color:#000000; /*padding:10px;*/}
            .t-footer { padding:10px; background-color:#0000FF; color:#FFFFFF;}
        </style>
    </head>
    <body>
        <div class="t-head">Header content</div>
        <div class="t-body">
            <h1>Content Header</h1>
            Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
            Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris 
            nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in 
            reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla 
            pariatur. Excepteur sint occaecat cupidatat non proident, sunt in 
            culpa qui officia deserunt mollit anim id est laborum.
        </div>
        <div class="t-footer">Footer content</div>
    </body>
</html>

页面的正文分为三部分——页眉DIV(t-header)、正文DIV(t-body)和页脚DIV(t-footer)。为了便于讨论,我将 BODY 的背景设置为黑色。如果您在浏览器中查看此页面,会发现页眉 DIV 和主体 DIV 之间存在间隙(即黑色水平带)。此行为在 IE、Chrome 和 Firefox 中是一致的。

我知道差距的罪魁祸首 - 它是 H1 标签的边距。如果您从页面的样式部分取消注释 H1 样式,您会看到间隙消失了。或者,您可以保留 H1 样式的注释并取消注释 t-body 类上的填充样式,这样间隙就会消失。我不明白的是,为什么 H1 边距会导致 t-head DIV 和 t-body DIV 之间出现间隙。我对 CSS 的理解(这显然是错误的)是 H1 margin 应该从 t-body DIV 的顶部开始计算。我也不明白为什么向 t-body DIV 添加填充可以解决问题。

谁能解释为什么 H1 边距似乎导致 t-head DIV 和 t-body DIV 之间存在差距的原因? ...另外,为什么向 t-body DIV 添加填充可以解决问题?

最佳答案

原因是利润率下降。

看看这篇文章,尤其是“折叠父元素和子元素之间的边距”一章:http://reference.sitepoint.com/css/collapsingmargins你可能会看到。


您可以使用 overflowvisible 不同的值来取消折叠边距,例如溢出:隐藏溢出:自动
http://jsfiddle.net/5w4gp/

.t-body {
    overflow: auto;
}

如果您不喜欢溢出技术,您可以添加

.t-body {
    padding-top: 1px;
    margin-top: -1px;
}

.t-body
http://jsfiddle.net/68785/


还有第三种使用floatclear 的解决方案:http://jsfiddle.net/z2RNF/

.t-head {
    float: left;
    width: 100%;
}
.t-body {
    clear: both;
}

为什么这些有效?它们防止折叠的垂直边距相互“接触”。

这是规范:http://www.w3.org/TR/CSS2/box.html#collapsing-margins

关于css - DIV之间存在差距的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22097875/

相关文章:

html - Internet Explorer 中图像的大小问题

html - rails 4 : link_to broken in Bootstrap context

python - 当网站部署在 Google 应用引擎上时 TemplateNotFound : templates/HomePage. html 错误,但网站在本地主机中运行时运行正常

css - 悬停时如何更改CSS中子菜单的颜色而不是父菜单的颜色?

javascript - 响应式移动导航栏(导航)jquery/javascript

html - 获取内容以清除响应图像

css - 如何使用带样式组件的默认 Bootstrap 类?

css - 多重背景 : Semi-Transparent Color on a BG

html - 为什么我的 DIV 不居中?

css - 排列 Bootstrap 响应图像