Skip to content

flex+margin 的神奇布局

左右分部
1
2
3
4
5
3号居中
1
2
3
4
5
34号居中
1
2
3
4
5
全离散
1
2
3
4
5
换行离散
1
2
3
4
5
6
7
8
9
10
11
12
13
代码实现 点击展开
vue
<template>
  <div class="flexMargin">
    <div>左右分部</div>
    <div class="container demo1">
      <div class="item" v-for="item in 5" :key="item">{{ item }}</div>
    </div>
    <div>3号居中</div>
    <div class="container demo2">
      <div class="item" v-for="item in 5" :key="item">{{ item }}</div>
    </div>
    <div>34号居中</div>
    <div class="container demo3">
      <div class="item" v-for="item in 5" :key="item">{{ item }}</div>
    </div>
    <div>全离散</div>
    <div class="container demo4">
      <div class="item" v-for="item in 5" :key="item">{{ item }}</div>
    </div>
    <div>换行离散</div>
    <div class="container demo5">
      <div class="item" v-for="item in 13" :key="item">{{ item }}</div>
    </div>
  </div>
</template>

<style lang="scss" scoped>
.flexMargin {
  width: 100%;
  --itemWidth: 50px;

  .container {
    margin-bottom: 10px;
    width: 100%;
    display: flex;

    .item {
      width: var(--itemWidth);
      height: var(--itemWidth);
      background-color: cadetblue;
      line-height: 50px;
      text-align: center;

      &:nth-child(3n + 1) {
        background-color: var(--jk-color-yellow);
      }

      &:nth-child(3n + 2) {
        background-color: var(--jk-color-blue);
      }

      &:nth-child(3n + 3) {
        background-color: var(--jk-color-purple);
      }
    }
  }

  .demo1 {
    .item:nth-child(4) {
      margin-left: auto;
    }
  }

  .demo2 {
    .item:nth-child(3) {
      margin: auto;
    }
  }

  .demo3 {
    .item:nth-child(3) {
      margin-left: auto;
    }

    .item:nth-child(4) {
      margin-right: auto;
    }
  }

  .demo4 {
    .item {
      margin: auto;
    }
  }

  .demo5 {
    flex-wrap: wrap;
    --n: 5;

    .item {
      margin: 4px calc((100% - var(--n) * var(--itemWidth)) / (var(--n) * 2));
    }
  }
}
</style>