yym-yumeng123 / Interview

学习中的一些问题
3 stars 1 forks source link

外边距合并 #34

Open yym-yumeng123 opened 7 years ago

yym-yumeng123 commented 7 years ago

什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例

块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距,这种行为称为外边距塌陷(margin collapsing),有的地方翻译为外边距合并。

什么场景下会出现外边距合并?如何合并?

  • 相邻的兄弟姐妹元素
  • 毗邻的两个兄弟元素之间的外边距会塌陷(除非后者兄弟姐妹需要清除过去的浮动)。
    这两个段落中间的距离,两个中大的那一个
    <p style="margin-bottom: 30px;">这个段落的下外边距被合并...</p>
    <p style="margin-top: 20px;">...这个段落的上外边距被合并。</p>
  • 块级父元素与其第一个/最后一个子元素
  • 如果块级父元素中,不存在上边框、上内边距、内联元素、 清除浮动 这四条属性(也可以说,当上边框宽度及上内边距距离为0时),那么这个块级元素和其第一个子元素的上边距就可以说”挨到了一起“。此时这个块级父元素和其第一个子元素就会发生上外边距合并现象,换句话说,此时这个父元素对外展现出来的外边距将直接变成这个父元素和其第一个子元素的margin-top的较大者。
  • 类似的,若块级父元素的 margin-bottom 与它的最后一个子元素的margin-bottom 之间没有父元素的 border、padding、inline content、height、min-height、 max-height 分隔时,就会发生 下外边距合并 现象。
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>JS Bin</title>
    <style> 
    .box1{
    width: 300px;
    height: 100px;
    background-color: red;
    }
    .box2{
    width:200px;
    height:50px;
    margin:20px auto 0;
    background-color:blue;
    }
    </style>
    </head>
    <body>
    <div class="box1">
    <div class="box2">子元素</div>
    </div>
    </body>
    </html>
  • 空块元素
  • 如果存在一个空的块级元素,其 border、padding、inline content、height、min-height 都不存在。那么此时它的上下边距中间将没有任何阻隔,此时它的上下外边距将会合并。
    <p style="margin-bottom: 0px;">这个段落的和下面段落的距离将为20px</p>
    <div style="margin-top: 20px; margin-bottom: 20px;"></div>
    <p style="margin-top: 0px;">这个段落的和上面段落的距离将为20px</p>

BFC会阻止元素外边距合并。

yym-yumeng123 commented 7 years ago

margin负值