Margin塌陷(Margin Collapse)是CSS中一个常见的布局现象,当两个垂直相邻的块级元素的margin相遇时,它们会合并成一个margin,其大小为两者中较大的那个值。
<div class="box1">Box 1</div>
<div class="box2">Box 2</div>
.box1 {
margin-bottom: 30px;
}
.box2 {
margin-top: 20px;
}
实际效果:两个盒子之间的间距不是50px(30+20),而是30px(取较大值)
.box1 {
padding-bottom: 30px;
}
.box2 {
padding-top: 20px;
}
.box1 {
margin-bottom: 30px;
border-bottom: 1px solid transparent;
}
.box1 {
margin-bottom: 30px;
padding-bottom: 0.1px; /* 微小padding即可 */
}
.box1 {
margin-bottom: 30px;
float: left;
width: 100%;
}
.container {
overflow: hidden; /* 或 auto */
}
.parent {
display: flex;
flex-direction: column;
}
创建新的BFC可以防止margin塌陷:
.container {
display: flow-root; /* 最干净的BFC创建方式 */
/* 其他创建BFC的方式:
overflow: hidden/auto;
display: inline-block;
position: absolute/fixed;
float: left/right;
*/
}
当父元素和第一个/最后一个子元素之间没有border、padding、inline content分隔时,也会发生margin塌陷。
解决方案:
.parent {
padding-top: 1px; /* 微小padding */
/* 或 */
border-top: 1px solid transparent;
/* 或 */
overflow: auto/hidden;
}
理解margin塌陷机制可以帮助开发者更精准地控制页面布局间距,避免意外的布局问题。