Skip to content

案例

多行可伸缩布局

需求:

  • 每一行 flex item数量为6个

  • item的宽度具备响应式。跟随窗口变化而变化

  • flex item之间存在间隙16px

  • 版心需要对齐

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
                /* 关键:padding属于width */
        box-sizing: border-box;
      }
      .w {
        width: 80%;
        margin: 0 auto;
      }
      .container {
        display: flex;
        margin-left: -8px;
        margin-right: -8px;
        flex-wrap: wrap;
      }
      .item {
        height: 200px;
        flex: 0 0 16.666667%;
        padding: 0 8px;
        margin-bottom: 16px;
      }
      .box {
        height: 100%;
        background-color: pink;
      }
      .footer {
        width: 80%;
        height: 100px;
        margin: 0 auto;
        background-color: #333;
      }
    </style>
  </head>
  <body>
    <div class="w">
      <div class="container">
        <div class="item">
          <div class="box">1</div>
        </div>
        <div class="item">
          <div class="box">2</div>
        </div>
        <div class="item">
          <div class="box">3</div>
        </div>
        <div class="item">
          <div class="box">4</div>
        </div>
        <div class="item">
          <div class="box">5</div>
        </div>
        <div class="item">
          <div class="box">6</div>
        </div>
        <div class="item">
          <div class="box">7</div>
        </div>
        <div class="item">
          <div class="box">8</div>
        </div>
        <div class="item">
          <div class="box">9</div>
        </div>
      </div>
    </div>

    <div class="footer"></div>
  </body>
</html>
html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
        /* 关键:padding属于width */
        box-sizing: border-box;
      }
      .w {
        width: 80%;
        margin: 0 auto;
      }
      .container {
        display: flex;
        margin-left: -8px;
        margin-right: -8px;
        flex-wrap: wrap;
      }
      .item {
        height: 200px;
        flex: 1;
        min-width: calc(16.666667% - 16px);
        max-width: calc(16.666667% - 16px);
        margin: 0 8px 16px;
        background-color: pink;
      }
      .footer {
        width: 80%;
        height: 100px;
        margin: 0 auto;
        background-color: #333;
      }
    </style>
  </head>
  <body>
    <div class="w">
      <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
      </div>
    </div>

    <div class="footer"></div>
  </body>
</html>

瀑布流

难点:

  • 图片圆角大小不同
  • 弹性盒子
html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <style>
    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
      background-color: gray;
    }
    .main {
      display: flex;
      width: 80%;
      margin: 20px auto;
      gap: 20px;
    }
    .item {
      flex: 1;
    }
    .item a {
      display: block;
      border-radius: 16px;
      overflow: hidden;
      margin-bottom: 20px;
    }
    .item img {
      /* 解决图片底部空白问题 */
      vertical-align: top;
      width: 100%;
    }
  </style>
  <body>
    <div class="main">
      <!-- 1 -->
      <div class="item">
        <a href="#"><img src="./img/1.jpeg" alt="" /></a>
        <a href="#"><img src="./img/2.jpeg" alt="" /></a>
        <a href="#"><img src="./img/3.jpeg" alt="" /></a>
      </div>
      <!-- 2 -->
      <div class="item">
        <a href="#"><img src="./img/2.jpeg" alt="" /></a>
        <a href="#"><img src="./img/3.jpeg" alt="" /></a>
        <a href="#"><img src="./img/1.jpeg" alt="" /></a>
      </div>
      <!-- 3 -->
      <div class="item">
        <a href="#"><img src="./img/1.jpeg" alt="" /></a>
        <a href="#"><img src="./img/2.jpeg" alt="" /></a>
        <a href="#"><img src="./img/3.jpeg" alt="" /></a>
      </div>
      <!-- 4 -->
      <div class="item">
        <a href="#"><img src="./img/2.jpeg" alt="" /></a>
        <a href="#"><img src="./img/3.jpeg" alt="" /></a>
        <a href="#"><img src="./img/1.jpeg" alt="" /></a>
      </div>
    </div>
  </body>
</html>