外边距合并在实际应用中存在一定意义。但有时会造成一些意想不到的效果。(有点乱,有时间再改)
1.2个多更多个相邻块级元素在垂直外边距相遇时,会将垂直方向上的2个外边距合并为一个外边距
现象:如果发生合并的外边距全部为正值,则合并后的外边距的高度等于这些发生合并的外边距的高度值中的较大者;如果发生合并的外边距不全是正值,则会拉近2个块级元素的垂直距离,甚至会发生重叠现象。
2.父子元素外边距合并:
现象:当父元素没有内容 或 内容在子元素的后面且没有内边距或没有边框时,子元素的上外边距将和父元素的上外边距合并为1个上外边距,且值为最大的那个上外边距,同时该上外边距作为父元素的上外边距。
2.如何防止这种情况:
只需在子元素前面设置父元素内容 或 保持父元素内容不变的情况下添加内边距或添加边框或使用浮动或绝对定位或使用一些条件触发BFC。
如下例子所示:原来是想设置b和c之间的边距,最后的效果是a和b的边距:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ height:100px; font-size:36px; color:#000; text-align: center; } .a{ width:100px; background: pink; } .b{ width:200px; height:160px; background :yellow; } .c{ width:100px; background: #aae8ae; margin-top:20px;/*对盒子添加上外边距,目的是b和c之间的边距,但是效果却是a和b之间的边距*/ } </style> </head> <body> <div class="a">A</div> <div class="b"> <div class="c">C</div> B </div> </body> </html>
所以要取消B和C的外边距合并,且保持内容位置不变的情况下,可以给父级盒子B加内边距、给父级B加上边框、使用浮动或绝对定位、触发BFC来防止外边距合边。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> div{ height:100px; font-size:36px; color:#000; text-align: center; } .a{ width:100px; background: pink; } .b{ width:200px; height:160px; background :yellow; display: inline-block;/*触发BFC*/ } .c{ width:100px; background: #aae8ae; margin-top:20px;/*对盒子添加上外边距,目的是b和c之间的边距*/ } </style> </head> <body> <div class="a">A</div> <div class="b"> <div class="c">C</div> B </div> </body> </html>