flex布局和grid (flex grid区别)

flex布局

<template>
  <div class="container">
    <div class="item" :style="{
    'background': `rgb(${Math.floor(Math.random()*255)}, 
    ${Math.floor(Math.random()*255)}, 
    ${Math.floor(Math.random()*255)}`}" 
    v-for="i in 6">{{i}}</div>
  </div>
</template>

.item{
    background: #ddd;
    margin: 5px;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 30px;
    color: #fff;
    height: 50px;
    flex-grow: 1;
    min-width: 100px;
  }
  .container{
    display: flex;
    flex-wrap: wrap;
  }

flexgrid区别,grid和flex哪个好看

效果虽好,不过最后一个元素铺满整行的样式却不是需求,希望跟其他元素保持相同比例。

grid布局

<template>
  <div class="container">
    <div class="item" :style="{
    'background': `rgb(${Math.floor(Math.random()*255)}, 
    ${Math.floor(Math.random()*255)}, 
    ${Math.floor(Math.random()*255)}`}" 
    v-for="i in 6">{{i}}</div>
  </div>
</template>
​
<style>
  .item{
    background: #ddd;
    margin: 5px;
    box-sizing: border-box;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 30px;
    color: #fff;
    height: 50px;
  }
  .container{
    display: grid;
    grid-template-columns: 100px 100px 100px;
  }
  .container{
    display: grid;
    grid-template-columns: 1fr 2fr 1fr;
  }
  .container{
    display: grid;
    grid-template-columns: repeat(3, 100px);
  }
  .container{
    display: grid;
    grid-template-columns: repeat(auto-fit, 100px);
  }
  .container{
    display: grid;
    grid-template-columns: repeat(auto-fit,minmax(100px, 1fr));
  }
</style>

grid-template-columns

N种姿势概览:

grid-template-columns: 100px 100px 100px;
grid-template-columns: 100px 1fr
grid-template-columns: 1fr 2fr 1fr;
grid-template-columns: repeat(3, 100px);
grid-template-columns: repeat(auto-fit, 100px);
grid-template-columns: repeat(auto-fit,minmax(100px, 1fr));

fr

grid-template-columns: 1fr 2fr 1fr;

全拼:flex fraction——伸缩系数,它允许你将容器分割成您想要的任意多个份数。

可类比于【flex】布局的flex:1

flexgrid区别,grid和flex哪个好看

reapeat()

这是一种更强大的指定列和行的方法。

repeat(3,100px) 等于100px 100px 100px。第一个参数指定你想要多少列或行,第二个参数指定它们的宽度。

auto-fit

grid-template-columns: repeat(auto-fit, 100px)

网格现在会随着容器的宽度而改变列的数量。

它尝试在容器中容纳尽可能多的100px宽的列。然而,如果我们将所有列固定为100px,将永远无法获得想要的灵活性,因为它们很少会加到全宽度。如下图gif所示,网格的右边经常会留出空白。

flexgrid区别,grid和flex哪个好看

minmax(min, max)

grid-template-columns: repeat(auto-fit,minmax(100px, 1fr));

定义了大于或等于min和小于或等于max的大小范围,所以每列都至少是100px。然而,如果有更多的可用空间,网格将简单地将其平均分配给每一列,列将变成一个小数单位,而不是100 px。

flexgrid区别,grid和flex哪个好看