CSS学习笔记——外边距坍塌

1.坍塌发生的情况

外边距坍塌(margin collapsing)是指两个元素紧挨着时,两个外边距会缩小到一个外边距,这个词在《精通CSS》(第2版)这本书中也被称为“外边距叠加”。这个现象只会发生在Normal flow布局中,不会发生在绝对定位布局和浮动布局。(详情可参看CSS学习笔记——布局)

1.1 两个块级元素上下布局时发生坍塌

上下两个元素外边距接壤时,下面的元素会上移。他们之间的距离(边框到边框)会坍塌到一个外边距x,这个外边距x是两个外边距的较大值。




下面看一个实例

//index.html html5中head body标签可以省略
<div class="test1">Class test1</div>
<div class="test2">Class test2</div>
<link rel="stylesheet" type="text/css" href="test.css">

//test.css
.test1{
    color: red;
    background-color: black;
    margin: 10px;
    padding: 5px;
    border: 10px solid;
}

.test2{
    color: blue;
    margin: 20px;
    padding: 10px;
    border: 10px solid;
}

橙色的是chrome浏览器指示工具,指示了test2元素的外边距是20px,刚好到达test1元素的边框。test1元素的10px外边距坍塌消失。
backgroud-color显示的区域由内边距padding决定。外边距margin无颜色设置。



1.2 父子元素坍塌

如果父元素没有内边距和边框,即父子元素之间没有缓冲的东西阻挡一下,那么子元素的外边距就会坍塌。在下面例子中,两处css都注释掉,会出现上面那张图;如果放开任一个注释,那么就会出现中间那张图;如果父元素有上内边距没有下内边距,那么就会出现不对称坍塌的情况,上面不坍塌,下面坍塌,正如下面那张图。

//index.html
<div class="test1">Class test1</div>
<div class="test2">Class test2</div>
<link rel="stylesheet" type="text/css" href="test.css">

.test1{
    color: red;
    background-color: grey;
    margin: 10px;
      /*padding: 1px;*/
      /*border: 1px solid;*/
}

.test2{
    color: blue;
    margin: 20px;
    background-color: black;
}








2.自身不会坍塌

在《精通CSS》(第二版)的第42页中,文中说空元素(无内容、边框、内边距)会自身坍塌,但经过试验,发现空div元素不会自身坍塌。



3.坍塌作用

外边距坍塌这个现象很奇怪,为什么会有这么一个隐含的潜规则呢,《精通CSS》中给出了一个应用场景:在文章中,如果没有外边距坍塌作用,那么第一段的上边距会显得跟其他段落间距不一致。
这里写图片描述

【Reference】
1. 《精通CSS》(第2版)

posted @ 2017-04-23 18:51  水煮海鲜  阅读(223)  评论(0编辑  收藏  举报