flex 布局

一、介绍

  • Flexible Box 的缩写,译为「弹性布局」
  • 任何一个容器都可以指定为 Flex 布局
    .box {
      display: flex;
    }
    
  • 行内元素也可以使用 Flex 布局
    .box {
      display: inline-flex;
    }
    
  • Webkit 内核浏览器必须加上 -webkit- 前缀
    .box {
      display: -webkit-flex;
      display: flex;
    }
    

设为 Flex 布局之后,元素的 float、clear 和 vertical-align 属性将失效

二、概念

  • 采用 Flex 布局的元素称为 Flex 容器(flex contanier),简称“容器”;
  • 它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称“项目”;
  • 容器默认存在水平的主轴(main axis)和垂直交叉轴(cross axis)两根轴;
  • 主轴的开始位置(与边框的交叉点)叫做 main start,结束位置叫做 main end;
  • 交叉轴的开始位置叫做 cross start,结束位置叫做 cross end;
    -项目默认沿主轴排列;
  • 单个项目占据的主轴空间叫做 main size,占据的交叉轴控件叫做 cross size;

三、容器属性

  • flex-direction:
    主轴方向;(项目排列方向)
    • row:水平从左至右;(默认)
    • row-reverse:水平从右向左;
    • column:垂直从上往下;
    • column-reverse:垂直从下往上;
  • flex-wrap:
    定义如果一条轴线排不下如何换行;
    • nowrap:不换行;(默认)
    • wrap:从上往下换行;
    • wrap-reverse:从下往上换行;
  • flex-flow:
    flex-direction 属性和 flex-wrap 属性的合并简写形式;(默认值为 row nowrap)
  • justify-content:
    定义了项目在主轴上的对齐方式;
    每个属性定义的对其方式和轴的方向有关;
    下面设以主轴从左到右;
    • flex-start:左对齐;(默认)
    • flex-end:右对齐;
    • center:居中;
    • space-between:两端对齐,项目之间间隔相等;
    • space-around:每个项目两侧的间隔相等;(项目间的间隔比项目与边框的间隔大一倍)
  • align-items:
    定义项目在交叉轴上如何对齐;
    每个属性定义的对齐方式和交叉轴方向有关;
    下面设交叉轴从上到下;
    • flex-start:交叉轴的起点对齐;
    • flex-end:交叉轴的终点对齐;
    • center:交叉轴的中点对齐;
    • baseline:项目的第一行文字的基线对齐;
    • stretch:若项目未设置高度或设为 auto,将占满整个容器高度;(默认)
      flex 布局_第1张图片
      flex-align-item.jpg
  • align-content:
    定义了多根轴线的对齐方式;
    如果项目只有一根轴线,该属性不起作用;
    • flex-start:与交叉轴的起点对齐;
    • flex-end:与交叉轴的终点对齐;
    • space-between:与交叉轴的中点对齐;
    • space-around:与交叉轴两端对齐,轴线之间间隔平均分布;
    • stretch:轴线占满整个交叉轴;(默认)


      flex 布局_第2张图片
      flex-align-content.jpg

四、项目的属性

1、order:

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

2、flex-grow:

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

3、flex-shrink:

定义了项目的缩小比例;(默认为1)
即如果空间不足,该项目将缩小;
如果所有项目的 flex-shrink 属性都为 1,空间不足时都等比缩小;
如果一个项目的 flex-shrink 属性为 0,其他项目都为 1,空间不足时,前者不缩小,其他等比缩小;
负值对该属性无效;

4、flex-basis:

定义了在分配多余空间之前,项目占据的主轴空间(main size);
浏览器根据这个属性计算主轴是否有多余空间;
默认值为 auto,即项目的本来大小;
可以设为跟 widthheight 属性一样的值,则项目占据固定空间;

5、flex

flex-growflex-shrinkflex-basis 的简写,默认值为 0 1 auto
第一个必填,后两个可选;
该属性有两个快捷值 auto (1 1 auto)none (0 0 auto)

6、align-self

允许单个项目有与其他项目不同的对齐方式,可覆盖 align-item 属性;
默认值为 auto,表示继承父元素的 align-items 属性;
属性值除了多出一个 auto,其他完全和 align-item 相同;

你可能感兴趣的:(flex 布局)