float 和 flex 实现两栏布局和平均布局

363 阅读1分钟

flex 实现两栏、三栏和平均布局

  <header class='header'>
    <div class="logo">
      <img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bbcd58c08aba499dbd0cb8224db9a1b8~tplv-k3u1fbpfcp-zoom-1.image">
    </div>
    <ul>
      <li>首页</li>
      <li>课程</li>
      <li>优惠</li>
      <li>关于</li>
    </ul>
  </header>
  <main>
    <div class="left"></div>
    <div class="content"></div>
    <div class="right"></div>
  </main>
  <div class="imagelist">
    //为了实现平均布局,必须嵌套一层 inner
    <div class="inner">
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
    </div>
  </div>
  
  *{
  margin:0;
  padding:0;
  box-sizing:border-box;
}
ul,ol{
  list-style:none;
}

// 两栏布局
.header{
  display:flex;
  border:1px solid black;
  //justify-content:space-between;
  align-items:center;
}

.logo{
  display:flex;
  align-items:center;
}

img{
  max-width:40px;
  vertical-align:middle;
}

ul{
  display:flex;
  /* 推荐用 margin-left:auto ,和 justify-content:space-between 效果一样 */
  margin-left:auto;
}

ul>li{
  line-height:32px;
}

// 三栏布局
main{
  width: 800px;
  display:flex;
  margin-left:auto;
  margin-right:auto;
}
.left{
  width:200px;
  background-color:black;
}
.content{
  background-color:grey;
  height: 400px;
  flex-grow:1;
}
.right{
  width:100px;
  background-color:black;
}

//平均布局
//父元素 800,子元素 (191+12)*4=812,超出 12 px ,所以 Inner 的 margin 为 -12/2 px,此时 Inner 的 width = 812 px;
.imagelist{
  width: 800px;
  margin-right:auto;
  margin-left:auto;
}
.imagelist > .inner{
  display:flex;
  flex-wrap:wrap;
  margin:0 -6px;
}

.image{
  height: 190px;
  width: 191px;
  background-color:grey;
  border:1px solid red;
  margin:10px 6px; 
}

float 实现两栏、三栏和平均布局

border 调试时会占用宽度,可以用 outline 代替 border;

  <header class='header clearfix' >
    <div class="logo">
      <img src="https://static.jsbin.com/images/dave.min.svg">
    </div>
    <ul class='nav clearfix'>
      <li>首页</li>
      <li>课程</li>
      <li>优惠</li>
      <li>关于</li>
    </ul>
  </header>
  <main class="clearfix">
    <div class="left"></div>
    <div class="content"></div>
    <div class="right"></div>
  </main>
  <div class="imagelist">
    <div class="inner clearfix">
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
      <div class="image"></div>
    </div>
  </div>
  
  *{
  margin:0;
  padding:0;
  box-sizing:border-box;
}
ul,ol{
  list-style:none;
}

.clearfix::after{
  content:"";
  clear:both;
  display:block;
}

//两栏布局
.header{
  border:1px solid black;
}

.logo{
  float:left;
  margin-top:8px;
  margin-left:10px;
  display:inline-block;
}

.logo>img{
  width: 26px;
  vertical-align:middle;
}


.nav{
  float:right;
  margin-left:20px;
  display:inline-block;
}

.nav>li{
  float:left;
  padding:4px 0.5em;
  line-height:32px;
}

//三栏布局
main{
  margin:10px auto;
  width: 800px;
}
.left{
  height: 300px;
  width: 200px;
  float:left;
  background-color:grey;
}
.content{
  background-color:black;
  height: 300px;
  width: 500px;
  float:left;
}
.right{
  background-color:grey;
  height: 300px;
  width: 100px;
  float:left;
}

//平均布局
.imagelist{
  width: 800px;
  margin-left:auto;
  margin-right:auto;
}

.inner{
  outline:1px solid green;
  margin:0 -6px
}

.image{
  border:1px solid red;
  width: 191px;
  height: 191px;
  background-color:#000;
  float:left;
  margin:6px 6px;
}