CSS 保证金恐怖; Margin 在父元素之外添加空间

新手上路,请多包涵

我的 css 边距不符合我想要或期望的方式。我的页眉边距顶部似乎影响了它周围的 div 标签。

这就是我想要和期望的:我想要的是….

…但这就是我最终得到的:我得到什么…

资源:

 <!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Margin test</title>

<style type="text/css">
body {
    margin:0;
}
#page {
    margin:0;
    background:#FF9;
}
#page_container {
    margin:0 20px;
}
h1 {
    margin:50px 0 0 0;
}
</style>

</head>

<body>

<div id="page">
    <div id="page_container">
        <header id="branding" role="banner">
            <hgroup>
                <h1 id="site-title"><span><a href="#" title="Title" rel="home">Title</a></span></h1>
                <h2 id="site-description">Description</h2>
            </hgroup>
        </header>
    </div>
</div>

我在这个例子中夸大了边距。 h1-tag 上的默认浏览器边距有点小,在我的例子中,我使用 Twitter Bootstrap,Normalizer.css 将默认边距设置为 10px。没那么重要,重点是;我不能、不应该、 不想 更改 h1 标签上的边距。

我想这与我的其他问题相似; 为什么这个 CSS margin-top 样式不起作用? .问题是我该如何解决这个具体问题?

我已经阅读 了一些关于类似问题的主题,但没有找到任何真正的答案和解决方案。我知道添加 padding:1px;border:1px; 可以解决问题。但这只会增加新的问题,因为我不想在我的 div 标签上添加填充或边框。

必须有更好的最佳实践解决方案吗?这一定很常见。

原文由 jamietelin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 313
2 个回答

添加以下任一规则:

 float: left/right;
position: absolute;
display: inline-block;
overflow: auto/scroll/hidden;
clear: left/right/both;

这是由 collapsing margins 引起的。请 在此处 查看有关此行为的文章。

根据这篇文章:

W3C 规范定义折叠边距如下:

“在本规范中,表达折叠边距意味着两个或多个框(可能彼此相邻或嵌套)的相邻边距(没有非空内容、填充或边框区域,或间隙分隔它们)组合形成一个保证金。”

对于父子元素也是如此。

所有答案都包括一种可能的解决方案:

在其他情况下,元素的边距不会折叠:

  • 浮动元素
  • 绝对定位元素
  • 行内块元素
  • 溢出设置为可见以外的任何元素(它们不会折叠其子元素的边距。)
  • 已清除的元素(它们不会将其上边距与其父块的下边距折叠起来。)
  • 根元素

原文由 Ziarno 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题