使用此示例从MDN's Introduction to CSS layout,CSS float为P和H2元素添加边距。这是代码示例:为什么CSS浮动为子元素添加边距?
<h1>2 column layout example</h1>
<div>
<h2>First column</h2>
<p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla luctus aliquam dolor, eu lacinia lorem placerat vulputate. </p>
</div>
<div>
<h2>Second column</h2>
<p>Nam vulputate diam nec tempor bibendum. Donec luctus augue eget malesuada ultrices. Phasellus turpis est, posuere sit amet dapibus ut.</p>
</div>
这是CSS(我加了背景颜色,使其容易看到):
div:nth-of-type(1) {
background-color: blue;
width: 48%;
float: left;
}
div:nth-of-type(2) {
background-color: red;
width: 48%;
float: right;
}
如果您使用完全相同的代码减去浮动, H2元素没有顶部边界,P元素没有底部边界。有色的DIV紧紧围绕文本。但是,如果确实包含浮动块,则不仅DIV的布局会发生变化(从堆叠到并排,如预期的那样),而且会向H2元素和底部边距添加顶部边距被添加到P元素。您可以清楚地看到,彩色DIV不再紧贴文字在顶部和底部。
我可以删除这些利润很轻松地用:
h2 {
margin-top: 0;
}
p {
margin-bottom: 0;
}
它很容易固定,但我的问题是,为什么呢?为什么添加浮动会导致不需要的边距自动插入子元素?这种行为是预期的还是期望的?这是一个错误吗?一个特征?对我来说这似乎很奇怪和不可预测。
选择此作为最佳答案,因为它使我得到正确的答案,但从我所知道的情况来看,这不是由于相邻的兄弟姐妹,而是由于“父母和第一个/最后一个孩子”崩溃的边际规则。另外,关于浮动元素和绝对定位元素的注释从不崩溃。现在我懂了。谢谢。 – AlwaysLearning