晴明的博客园 GitHub      CodePen      CodeWars     

[css] flex 实例

元素布局


.box {
  display: flex;
}


    .box {
      display: flex;
      justify-content: center;
    }


    .box {
      display: flex;
      justify-content: flex-end;
    }


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


.box {
  display: flex;
  justify-content: center;
  align-items: center;
}


    .box {
      display: flex;
      justify-content: center;
      align-items: flex-end;
    }


    .box {
      display: flex;
      justify-content: flex-end;
      align-items: flex-end;
    }


.box {
  display: flex;
  justify-content: space-between;
}

    .box {
      display: flex;
      flex-direction: column;
      justify-content: space-between;
    }



    .box {
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      align-items: center;
    }


    .box {
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      align-items: flex-end;
    }


.box {
  display: flex;
}

.item:nth-child(2) {
  align-self: center;
}


    .box {
      display: flex;
      justify-content: space-between;
    }

    .item:nth-child(2) {
      align-self: flex-end;
    }


    .box {
      display: flex;
    }

    .item:nth-child(2) {
      align-self: center;
    }

    .item:nth-child(3) {
      align-self: flex-end;
    }


.box {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  align-content: space-between;
}

//html
    <div class="box">
      <div class="column">
        <span class="item"></span>
        <span class="item"></span>
      </div>
      <div class="column">
        <span class="item"></span>
        <span class="item"></span>
      </div>
    </div>



//css
    .box {
      display: flex;
      flex-wrap: wrap;
      align-content: space-between;
    }

    .column {
      flex-basis: 100%;
      display: flex;
      justify-content: space-between;
    }


    .box {
      display: flex;
      flex-wrap: wrap;
      align-content: space-between;
    }

    .box {
      display: flex;
      flex-direction: column;
      flex-wrap: wrap;
      align-content: space-between;
    }

//html
    <div class="box">
      <div class="row">
        <span class="item"></span>
        <span class="item"></span>
        <span class="item"></span>
      </div>
      <div class="row">
        <span class="item"></span>
      </div>
      <div class="row">
         <span class="item"></span>
         <span class="item"></span>
      </div>
    </div>



//css
    .box {
      display: flex;
      flex-wrap: wrap;
    }

    .row{
      flex-basis: 100%;
      display:flex;
    }

    .row:nth-child(2){
      justify-content: center;
    }

    .row:nth-child(3){
      justify-content: space-between;
    }


.box {
  display: flex;
  flex-wrap: wrap;
}

网格布局

基本网格布局

平均分布

//html
<div>
    <div class="Grid">
      <div class="Grid-cell">1/2</div>
      <div class="Grid-cell">1/2</div>
    </div>
    <div class="Grid">
      <div class="Grid-cell">1/3</div>
      <div class="Grid-cell">1/3</div>
      <div class="Grid-cell">1/3</div>
    </div>
    <div class="Grid">
      <div class="Grid-cell">1/4</div>
      <div class="Grid-cell">1/4</div>
      <div class="Grid-cell">1/4</div>
      <div class="Grid-cell">1/4</div>
    </div>
    <div class="Grid">
      <div class="Grid-cell">...</div>
      <div class="Grid-cell">...</div>
    </div>
</div>


//css
    .Grid {
      display: flex;
    }

    .Grid-cell {
      flex: 1;
    }

百分比布局

某个网格的宽度为固定的百分比,其余网格平均分配剩余的空间。

//html
<div>
    <div class="Grid">
      <div class="Grid-cell u-1of2">1/2</div>
      <div class="Grid-cell">auto</div>
      <div class="Grid-cell">auto</div>
    </div>
    <div class="Grid">
      <div class="Grid-cell">auto</div>
      <div class="Grid-cell u-1of3">1/3</div>
    </div>
    <div class="Grid">
      <div class="Grid-cell u-1of4">...</div>
      <div class="Grid-cell">...</div>
      <div class="Grid-cell u-1of3">...</div>
    </div>    
</div>

//css
    .Grid {
      display: flex;
    }

    .Grid-cell {
      flex: 1;
    }

    .Grid-cell.u-full {
      flex: 0 0 100%;
    }

    .Grid-cell.u-1of2 {
      flex: 0 0 50%;
    }

    .Grid-cell.u-1of3 {
      flex: 0 0 33.3333%;
    }

    .Grid-cell.u-1of4 {
      flex: 0 0 25%;
    }

圣杯布局

//html
    <body class="HolyGrail">
      <header>...</header>
      <div class="HolyGrail-body">
        <main class="HolyGrail-content">...</main>
        <nav class="HolyGrail-nav">...</nav>
        <aside class="HolyGrail-ads">...</aside>
      </div>
      <footer>...</footer>
    </body>



//css
    .HolyGrail {
      display: flex;
      min-height: 100vh;
      flex-direction: column;
    }

    header,
    footer {
      flex: 1;
    }

    .HolyGrail-body {
      display: flex;
      flex: 1;
    }

    .HolyGrail-content {
      flex: 1;
    }

    .HolyGrail-nav, .HolyGrail-ads {
      /* 两个边栏的宽度设为12em */
      flex: 0 0 12em;
    }

    .HolyGrail-nav {
      /* 导航放到最左边 */
      order: -1;
    }
    
    //如果是小屏幕,躯干的三栏自动变为垂直叠加。
    @media (max-width: 768px) {
      .HolyGrail-body {
        flex-direction: column;
        flex: 1;
      }
      .HolyGrail-nav,
      .HolyGrail-ads,
      .HolyGrail-content {
        flex: auto;
      }
    }

输入框的布局

在输入框的前方添加提示,后方添加按钮。

//html
    <div class="InputAddOn">
      <span class="InputAddOn-item">...</span>
      <input class="InputAddOn-field">
      <button class="InputAddOn-item">...</button>
    </div>


//css

    .InputAddOn {
      display: flex;
    }

    .InputAddOn-field {
      flex: 1;
    }

悬挂式布局

主栏的左侧或右侧添加一个图片栏。

//html
    <div class="Media">
      <img class="Media-figure" src="" alt="">
      <p class="Media-body">...</p>
    </div>



//css
    .Media {
      display: flex;
      align-items: flex-start;
    }

    .Media-figure {
      margin-right: 1em;
    }

    .Media-body {
      flex: 1;
    }

固定的底栏

让底栏总是出现在页面的底部。

//html
    <body class="Site">
      <header>...</header>
      <main class="Site-content">...</main>
      <footer>...</footer>
    </body>


//css
    .Site {
      display: flex;
      min-height: 100vh;
      flex-direction: column;
    }

    .Site-content {
      flex: 1;
    }

流式布局

每行的项目数固定,会自动分行。

.parent {
  width: 200px;
  height: 150px;
  background-color: black;
  display: flex;
  flex-flow: row wrap;
  align-content: flex-start;
}

.child {
  box-sizing: border-box;
  background-color: white;
  flex: 0 0 25%;
  height: 50px;
  border: 1px solid red;
}
posted @ 2017-04-18 19:00  晴明桑  阅读(256)  评论(0编辑  收藏  举报