CSS边距折叠
示例
当两个边距垂直相互接触时,它们将被折叠。当两个边缘水平接触时,它们不会塌陷。
相邻垂直边距的示例:
考虑以下样式和标记:
div{ margin: 10px; }
<div> some content </div> <div> some more content </div>
由于垂直边距会相互重叠,因此它们之间的距离将为10px。(间距将不是两个边距的总和。)
相邻水平边距的示例:
考虑以下样式和标记:
span{ margin: 10px; }
<span>some</span><span>content</span>
它们之间的间距为20px,因为水平边距不会彼此重叠。(间距将是两个边距的总和。)
重叠大小不同
.top{ margin: 10px; } .bottom{ margin: 15px; }
<div class="top"> some content </div> <div class="bottom"> some more content </div>
这些元素在垂直方向上的间距为15px。边距尽可能多地重叠,但是较大的边距将确定元素之间的间距。
重叠保证金陷阱
.outer-top{ margin: 10px; } .inner-top{ margin: 15px; } .outer-bottom{ margin: 20px; } .inner-bottom{ margin: 25px; }
<div class="outer-top"> <div class="inner-top"> some content </div> </div> <div class="outer-bottom"> <div class="inner-bottom"> some more content </div> </div>
两种文字之间的间距是多少?(悬停以查看答案)
间距为25像素。由于所有四个边距彼此接触,因此它们将崩溃,从而使用四个边距中的最大边距。
现在,如果我们在上面的标记中添加一些边框呢?
div{ border: 1px solid red; }
两种文字之间的间距是多少?(悬停以查看答案)
间距将为59px!现在,只有.outer-top和.outer-bottom的边距彼此接触,并且是唯一折叠的边距。其余边距由边框分隔。所以我们有1px+10px+1px+15像素+20像素+1像素+25像素+1像素。(1px是边界...)
父子元素之间的折叠边距:
HTML:
<h1>Title</h1> <div> <p>Paragraph</p> </div>
的CSS
h1 { margin: 0; background: #cff; } div { margin: 50px 0 0 0; background: #cfc; } p { margin: 25px 0 0 0; background: #cf9; }
在上面的示例中,仅适用最大边距。您可能希望该段落位于距h160px的位置(因为div元素的边距顶部为40px,而p的边距顶部为20px)。这不会发生,因为边距一起塌陷以形成一个边距。