flex+margin

245 阅读1分钟

父盒子使用display: flex; 子盒子可以使用margin: auto 吃掉剩余空间,

实现一些单独使用flex布局很难实现的布局。

例1:最后一个盒子到最右边

只需要给最后一个盒子设置:margin-left: auto

<!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>
    .container {
      border: 1px solid #ccc;
      width: 100%;
      display: flex;
      flex-wrap: wrap;
    }

    .container .box {
      width: 50px;
      height: 50px;
    }

    .container .box.item1 {
      background-color: pink;
    }

    .container .box.item2 {
      background-color: #f40;
    }

    .container .box.item3 {
      background-color: skyblue;
    }

    .container .box.item4 {
      background-color: #008c8c;
      margin-left: auto;
    }
  </style>
</head>

<body>
  <div class="container">
    <div class="box item1"></div>
    <div class="box item2"></div>
    <div class="box item3"></div>
    <div class="box item4"></div>

  </div>
</body>

</html>

例2:中间2个盒子居中,其他2个盒子在两边

给第2个盒子设置:margin-left: auto;

给第3个盒子设置:margin-right: auto;

这样2,3两个盒子平分剩余空间

<!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>
    .container {
      border: 1px solid #ccc;
      width: 100%;
      display: flex;
      flex-wrap: wrap;
    }

    .container .box {
      width: 50px;
      height: 50px;
    }

    .container .box.item1 {
      background-color: pink;
    }

    .container .box.item2 {
      background-color: #f40;
      margin-left: auto;
    }

    .container .box.item3 {
      background-color: skyblue;
      margin-right: auto;
    }

    .container .box.item4 {
      background-color: #008c8c;
    }
  </style>
</head>

<body>
  <div class="container">
    <div class="box item1"></div>
    <div class="box item2"></div>
    <div class="box item3"></div>
    <div class="box item4"></div>

  </div>
</body>

</html>

例3:每多少个盒子均分每一行,超出的换行

给父盒子设置:flex-wrap: wrap;

使用calc((100% - 每个子盒子宽度 * 子盒子个数) / 子盒子个数 / 2) 计算出每个子盒子每边应该分配多少margin

可以使用变量--gap --w --n 方便以后调整

<!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>
      .container {
        border: 1px solid #ccc;
        width: 100%;
        display: flex;
        flex-wrap: wrap;
      }

      .container .box {
        width: 50px;
        height: 50px;
        --n: 6;
        --gap: calc((100% - 50px * var(--n))/var(--n)/2);
        margin: 10px var(--gap);
      }

      .container .box.item1 {
        background-color: pink;
      }

      .container .box.item2 {
        background-color: #f40;
      }

      .container .box.item3 {
        background-color: skyblue;
      }

      .container .box.item4 {
        background-color: #008c8c;
      }

    </style>
  </head>

  <body>
    <div class="container">
      <div class="box item1"></div>
      <div class="box item2"></div>
      <div class="box item3"></div>
      <div class="box item4"></div>
      <div class="box item1"></div>
      <div class="box item2"></div>
      <div class="box item3"></div>
    </div>
  </body>

</html>