原则
兼容 IE8 float 其他 flex
- 不到万不得已,不要写死 width 和 height
- 尽量用高级语法,如 calc、flex
- 如果是 IE,就全部写死
口诀
- float
- 儿子全加 float: left (right)
- 老子加 .clearfix
- flex
- 老子加 display: flex
- 老子加 justify-content: space-between;
css
.clearfix:after{
content: '';
display: block;
clear: both;
}
.clearfix{
zoom: 1;
}<!--IE6-->
float 平均布局
html
<div class="super clearfix">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
css
.super{
width: 860px;
background: green;
margin: 0 auto;
}
.child{
width: 200px;
height: 200px;
background: #eee;
float: left;
margin: 10px;
}
.clearfix::after{
content: '';
display: block;
clear: both;
}
.child:nth-child(4n+1){
margin-left: 0;
}
.child:nth-child(4n){
margin-right: 0;
}
但是 ie 并没有完全支持 nth-child 所以还能多加一个 div 来包裹
html
<div class="super">
<div class="superchild clearfix">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
</div>
css
.super{
width: 860px;
background: green;
margin: 0 auto;
}
.child{
width: 200px;
height: 200px;
background: #eee;
float: left;
margin: 10px;
}
.clearfix::after{
content: '';
display: block;
clear: both;
}
.superchild {
margin-left: -10px;
margin-right: -10px;
}
flex 平均布局
html
<div class="super">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
css
.super{
width: 860px;
background: green;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.child{
width: 200px;
height: 200px;
background: #eee;
margin: 10px 0;
}
但如果最后一行不是一行该有个数少了几个看上去就很难看,这时候若果要有和之前一样的效果就换回 float, 或类似第二种
html
<div class="super">
<div class="superchild">
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
<div class="child"></div>
</div>
</div>
css
.super{
width: 860px;
background: green;
margin: 0 auto;
}
.superchild{
display: flex;
flex-wrap: wrap;
margin-left: -10px;
margin-right: -10px;
}
.child{
width: 200px;
height: 200px;
margin: 10px;
background: #eee;
}
但是到了手机端的话要记得 overflow: hidden
图片可以使用 background: url()
background-size:cover
使用 calc
用了 flex 那就可以不写死 width
可以这样 不过要注意 calc() 使用算术符号前后要空格
css
width:calc(25% - 20px)
一般不要将 class 命名 为 .ad
可能会被当做广告给屏蔽。
做了布局的 div 就不要在上面干别的事,另再加其他的 div