Skip to content

原则

兼容 IE8 float 其他 flex

  • 不到万不得已,不要写死 width 和 height
  • 尽量用高级语法,如 calc、flex
  • 如果是 IE,就全部写死

口诀

  1. float
    1. 儿子全加 float: left (right)
    2. 老子加 .clearfix
  2. flex
    1. 老子加 display: flex
    2. 老子加 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