Open yangbo5207 opened 8 years ago
父元素的第一个子元素如果设置了margin-top值,而父元素与第一个子元素之间没有其他属性或者元素隔开,就会发生折叠。
<div class="box"> <p class="gr">hello world.</p> </div>
.box { background: red; /* border: 1px solid red; */ /* height: 100px; */ /* 无效 */ /* padding-top: 1px; */ /* padding-top: 0; */ /* margin-top: 30px; */ } .gr { margin-top: 20px; color: #fff; background: #ccc; }
只有设置了border-top: 1px solid #ccc 或者 padding-top: 1px; 时,才会避免这种情况。
border-top: 1px solid #ccc
padding-top: 1px;
查看运行效果
margin在垂直方向上的重叠表现不止于此,只要2个元素的margin-top或者margin-bottom相邻,无论他们的关系是什么,都会发生折叠现象,具体的最准确的说法是两个或多个毗邻的普通流中的块元素垂直方向上的 margin 会折叠 其中的重点词为:
margin-top或者margin-bottom
当两个值都为正时,取大值,当两个值一正一负,则相加, 当都为负时,取小值
在实际使用当中,我们应该尽量避免2个margin值在垂直方向上相邻,可采取的方式如下
margin-bottom
padding-top
padding-bottom
当然,有很多方法可以避免折叠,很多文章也列出了发生折叠的特性等,很多文章也给出了计算折叠距离的详细方法,不过在实际情况中,折叠发生了会影响我们的开发效率,因此在垂直方向上避免2个margin值相邻,使用padding替代是最OK的方法。
关于margin在垂直方向上的表现详细说明
margin 在垂直方向上的特性
父元素的第一个子元素如果设置了margin-top值,而父元素与第一个子元素之间没有其他属性或者元素隔开,就会发生折叠。
只有设置了
border-top: 1px solid #ccc
或者padding-top: 1px;
时,才会避免这种情况。查看运行效果
margin在垂直方向上的重叠表现不止于此,只要2个元素的
margin-top或者margin-bottom
相邻,无论他们的关系是什么,都会发生折叠现象,具体的最准确的说法是两个或多个毗邻的普通流中的块元素垂直方向上的 margin 会折叠 其中的重点词为:在实际使用当中,我们应该尽量避免2个margin值在垂直方向上相邻,可采取的方式如下
margin-bottom
值,或者给下方元素添加padding-top
值padding-top
值padding-bottom
值关于margin在垂直方向上的表现详细说明