Html 内分区';s影响包含div和x27的保证金;s边距

Html 内分区';s影响包含div和x27的保证金;s边距,html,css,Html,Css,在包含div的内部有一个内部div HTML 不停摆弄 我希望这会使一个小黑匣子在一个更大的红匣子中垂直和水平居中。取而代之的是,我在红色框的顶部粘了一个黑色框,红色框的顶部留有空白 有人能解释一下CSS认为它在这里做什么吗?方法1 位置:内部div的绝对值,因此它知道什么是30px的边距 方法2 显示:内部div的内联块 方法3 边框:实心0透明到外部div 选择:)将overflow:auto添加到#容器中 或 将边框添加到#容器div 您可以在网站上阅读更多有关这种折叠式保证

在包含div的内部有一个内部div

HTML 不停摆弄

我希望这会使一个小黑匣子在一个更大的红匣子中垂直和水平居中。取而代之的是,我在红色框的顶部粘了一个黑色框,红色框的顶部留有空白


有人能解释一下CSS认为它在这里做什么吗?

方法1

位置:内部div的绝对值,因此它知道什么是30px的边距


方法2

显示:内部div的内联块


方法3

边框:实心0透明
到外部div


选择:)

overflow:auto
添加到
#容器中

将边框添加到
#容器
div


您可以在网站上阅读更多有关这种折叠式保证金行为的信息。

虽然提供的解决方案是可行的,但没有人解释这个问题。这被称为保证金崩溃,在几种情况下都会发生

场景1-这些项目之间的间隔仅为30像素,因为利润率一起崩溃,而较大的项目占优势

<div style="margin-bottom: 20px"></div>
<div style="margin-top: 30px"></div>
检查这个

您需要
float
内部
div
才能工作

#inner {    
    margin:30px;
    float:left;   /* give float */
    width: 40px;
    height: 40px;
    background-color: black;
 }​
或者将
overflow:auto
属性赋予
div#container

首先选中此项,
#容器
具有
页边距顶部:0
#内部
具有
页边距顶部:30px
。这些元素的关系是父元素和第一个子元素的关系

如果没有边框、填充、内联内容或对的清除 将块的边距顶部与其第一个块的边距顶部分开 子块,或无边框、填充、内联内容、高度、, “最小高度”或“最大高度”来分隔块的页边距底部 随着最后一个子元素的边距底部,边距将崩溃。 折叠的页边距最终位于父页边距之外

保证金折叠意味着这些保证金被合并成一个保证金,其大小是合并成保证金中最大的一个

这些规则甚至适用于零的保证金,因此 第一个/最后一个子项结束于其父项之外(根据规则 以上)母公司的保证金是否为零

这就是为什么您最终会在小提琴的
#container
元素之外应用30px的上边距:


我猜你错过了我文章中关于W3C关于页边数崩溃的解释的链接。@j08691-如果你看一下你的原始文章的时间,以及你的补遗(参考W3C)的时间,你可以看到我当时正在写我的答案(是的,我花了5分钟以上的时间来写我的答案b/c我在发布之前测试了我的代码)。在提出指控之前,我总是仔细阅读。很抱歉时间安排不方便。@j08691此处的解释总是比裸链接好。@toscho-如果简短,请确认,但是当链接足够时,粘贴整个崩溃页边距的解释是没有意义的。另外,我很确定W3C不会很快消失。不确定是谁否决了这一点,但如果你认为这个答案没有什么用处,请大声说出来。只是说不是我,尽管你否决了我的答案;)再次道歉。你对我的解决方案的评论和一个否决票在几秒钟之内就出现了。。。所以我只是做了个假设。我的错。我也希望人们能够解释反对票的原因,而不是只是随意地做出否定的手势。感谢这个伟大而简单的答案。对于这个超级奇怪的CSS“边际崩溃”逻辑,有什么隐藏的原因吗???这似乎是我遇到的最违反直觉的行为,我敢打赌数百万开发人员已经陷入了这个陷阱,并尝试了不必要的解决方法,如
填充
溢出
等,造成了不必要的副作用。。。请原谅我的直言不讳,但有时CSS似乎是世界上最愚蠢的语言之一。谢谢你,这个问题已经解决了。我花了很长时间才发现我的代码中发生了什么。
<div style="margin-bottom: 20px"></div>
<div style="margin-top: 30px"></div>
<div class="outer">
    <div style="margin-top: 20px"></div>
</div>
.outer {
    margin-top: -1px;
    border-top: 1px solid transparent;
}
#inner {    
    margin:30px;
    float:left;   /* give float */
    width: 40px;
    height: 40px;
    background-color: black;
 }​