如图,宽度不固定的灰色容器中有N个固定宽高的div盒子
盒子均设置了右边距和下边距
最下面的两个盒子,希望盒子的下边缘能和灰色容器的下边缘重合
尝试方案:
- 首先想到css的边距塌陷,实际测试发现边距塌陷在这种布局中无效
- 给下面的两个盒子单独设置margin-bottom:0,由于灰色容器宽度不固定,最下层的盒子数量不固定,该方案不可
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>边距塌陷</title>
<style>
.main {
width: 700px;
margin: 100px auto;
background-color: #efefef;
}
.d1 {
/* */
}
.d2 {
width: 100px;
height: 100px;
border: 1px solid red;
margin-bottom: 50px;
margin-right: 50px;
display: inline-block;
}
</style>
</head>
<body>
<div class="main">
<div class="d1">
<div class="d2"></div>
<div class="d2"></div>
<div class="d2"></div>
<div class="d2"></div>
<div class="d2"></div>
<div class="d2"></div>
<div class="d2"></div>
<div class="d2"></div>
<div class="d2"></div>
<div class="d2"></div>
</div>
</div>
</body>
</html>
因为你的
.d2
的容器改变为了inline-block
破坏了margin
合并。所以我觉得想要实现你期望的布局,可以使用
flex
搭配gap
属性来实现,具体CSS代码如下:这里是 CodePen的在线Demo
但是
gap in flex
会有一些兼容问题,但可以用grid
布局来解决。