<div class="container">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
</div>

flex容器存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)

容器的属性

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

flex-direction

决定了主轴的方向,可选值:

  • row
  • row-reverse
  • column
  • column-reverse

flex-wrap

当容器内的元素的宽度或者高度之和大于容器的宽度或高度的时候,这个属性决定容器类元素是否折行,以及如何折行。

有三个值可选:

  • nowrap:不折行,容器内的弹性子元素的宽度或者高度会被压缩,以至于容器能够容纳所有子元素
  • wrap:折行,放不下的元素折行在下面(flex-direction:row)或者右面(flex-direction:column)显示
  • wrap-reverse:折行,放不下的元素折行在上面(flex-direction:row)或者左面(flex-direction:column)显示

flex-flow

这个属性是 flex-direction 和 flex-flow 的简写形式。写法形如:flex-flow:row wrap

justify-content

定义了子元素在主轴上的对齐方式,可选值为:

  • flex-start
  • flex-end
  • center
  • space-between:两端对其
  • space-around:每个项目两侧具有同样的间隔

align-items

定义了子元素在交叉轴上的对齐方式,可选值为:

  • flex-start
  • flex-end
  • center
  • baseline:以文字的基线对齐
  • stretch:如果元素的高度或者宽度为 auto 将占满整个容器的高度(flex-direction:row)或者宽度(flex-direction:column)

align-content

定义了多根轴线的对齐方式,可选值为:

  • flex-start
  • flex-end
  • center
  • space-between
  • space-around
  • stretch

当存在多根轴线的时候,这个属性才生效,且设置了这个属性以后,align-items 将不起作用

项目的属性

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

order

定义项目的排列顺序。数值越小,排列越靠前,默认为0

flex-grow

定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

如果一个弹性元素其宽度为200px,其中包含两个元素,两个元素的宽度都是 50px 且 flex-grow 都是 1,那么这两个元素将平分余下的 100px ,所以结果是两个元素的实际宽度都是 100px。

flex-shrink

属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

如果一个弹性元素其宽度为200px,其中包含两个元素,两个元素的宽度都是 200px 且 flex-shrink 都是 1。因为两个元素一共超出了父元素 200px,所以这两个元素将缩小 100px ,所以结果是两个元素的实际宽度都是 100px。

如果其中一个元素的 flex-shrink 是 0 另外一个是 1,那么 flex-shrink 为 1 的元素将独自减小 200px。

flex-basis

取值同 width 属性,可以是具体的像素值,也可以是百分比,还可以是 auto ,默认是 auto。用于定义元素占据主轴的宽度。width 也可以描述元素的宽度,但如果同时设置了 width 和 flex-basis 那么 flex-basis 会覆盖 width 属性。

flex

flex-grow, flex-shrink 和 flex-basis 的简写形式,写法形如:flex:1 1 auto

align-self

允许单个项目与其他项目有不同的对其方式,可以覆盖 align-items 属性。可选值如下:

  • auto
  • flex-start
  • flex-end
  • center
  • baseline
  • stretch