- 使用float布局时,如图当需要对800px长的父盒子,中间的子盒子每行铺平4个时,如何做到?
对子元素以及元素之间的距离之间的计算,假设子元素的长度为
x,它们之间的间距为y,可得4x + 3y = 800,大概计算子元素的宽度191px,之间的距离为12px。
这时候使用float布局,将父元素清除浮动,并给子元素设置float:left以及右边距margin-right:12px,代码如下:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.clearfix:after {
content: '';
clear: both;
display: block;
}
.content {
width: 800px;
margin-left: auto;
margin-right: auto;
}
.content>div {
margin-top: 10px;
float: left;
height: 191px;
width: 191px;
margin-right: 12px;
border: 1px solid red;
}
<div class="content clearfix">
<div class="child1"></div>
<div class="child2"></div>
<div class="child3"></div>
<div class="child4"></div>
<div class="child5"></div>
<div class="child6"></div>
<div class="child7"></div>
<div class="child8"></div>
</div>
这时候可以看到效果:
这是因为给每个元素加上了一个
margin-right:12px,这时候只需要取消4的倍数元素的margin-right就可以了
.content>div:nth-child(4n) {
margin-right: 0px;
}
当时这只是建立在不考虑兼容性的情况下,在class为content的元素中加上一个元素div并加上一个margin-right:-12px;
完整代码:
<!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>Document</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.clearfix:after {
content: '';
display: block;
clear: both;
}
.content {
outline: 1px solid red;
width: 800px;
margin-left: auto;
margin-right: auto;
}
.content>.x>div {
margin-top: 10px;
float: left;
height: 191px;
width: 191px;
margin-right: 12px;
border: 1px solid red;
}
.x {
margin-right: -12px;
}
</style>
</head>
<body>
<div class="content">
<div class="x clearfix">
<div class="child1"></div>
<div class="child2"></div>
<div class="child3"></div>
<div class="child4"></div>
<div class="child5"></div>
<div class="child6"></div>
<div class="child7"></div>
<div class="child8"></div>
</div>
</div>
</body>
</html>