天天看點

Flex布局總結

布局的傳統解決方案,基于盒狀模型,依賴 display 屬性 + position屬性 + float屬性。

它對于那些特殊布局非常不友善,比如,垂直居中就不容易實作。

1.定義

Flex 是 Flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活性。

任何一個容器都可以指定為 Flex 布局。

Webkit 核心的浏覽器,必須加上-webkit字首。

設為 Flex 布局以後,子元素的float、clear和vertical-align屬性将失效。

2.概念

Flex布局總結

父:Flex容器(容器)

子:Flex項目(項目)

容器預設存在兩根軸:水準的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開始位置(與邊框的交叉點)叫做main start,結束位置叫做main end;交叉軸的開始位置叫做cross start,結束位置叫做cross end。

項目預設沿主軸排列。單個項目占據的主軸空間叫做main size,占據的交叉軸空間叫做cross size。

3.容器

  • flex-direction(項目排列方向) :row(水準) / column(垂直)
  • flex-wrap(項目換行方式) :warp(換行)
  • flex-flow(簡寫)
  • justify-content(項目的橫軸對齊方式) :space-between(兩端對齊)
  • align-items(項目的豎軸對齊方式):center(垂直居中)
  • align-content(多軸)

具體屬性示範:

  • flex-direction(項目排列方向)
    Flex布局總結

    row(預設值): 主軸為水準方向,起點在左端。

    row-reverse: 主軸為水準方向,起點在右端。

    column: 主軸為垂直方向,起點在上沿。

    column-reverse: 主軸為垂直方向,起點在下沿。

  • flex-wrap(項目如何換行:預設都排在一條線上)

    nowrap(預設):不換行

    Flex布局總結
    wrap:換行,第一行在上方。
    Flex布局總結
    wrap-reverse:換行,第一行在下方。
    Flex布局總結
  • flex-flow(flex-direction和flex-wrap)

    flex-direction屬性和flex-wrap屬性的簡寫形式,預設值為row nowrap

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}
           
  • justify-content(項目的對齊方式)
    Flex布局總結

    flex-start(預設值):左對齊

    flex-end:右對齊

    center: 居中

    space-between:兩端對齊,項目之間的間隔都相等。

    space-around:每個項目兩側的間隔相等。是以,項目之間的間隔比項目與邊框的間隔大一倍。

  • align-items(項目在豎軸上的對齊方式)
    Flex布局總結

    flex-start:交叉軸的起點對齊。

    flex-end:交叉軸的終點對齊。

    center:交叉軸的中點對齊。

    baseline: 項目的第一行文字的基線對齊。

    stretch(預設值):如果項目未設定高度或設為auto,将占滿整個容器的高度。

  • align-content(多根軸線)

    如果項目隻有一根軸線,該屬性不起作用flex-start:與交叉軸的起點對齊。

    flex-end:與交叉軸的終點對齊。

    center:與交叉軸的中點對齊。

    space-between:與交叉軸兩端對齊,軸線之間的間隔平均分布。

    space-around:每根軸線兩側的間隔都相等。是以,軸線之間的間隔比軸線與邊框的間隔大一倍。

    stretch(預設值):軸線占滿整個交叉軸。

4.項目

屬性:

  • order(項目的排列順序)
.item {
  order: <integer>;
}
           
  • flex-grow(項目的放大比例)
.item {
  flex-grow: <number>; /* default 0 */
}
           
  • flex-shrink(項目的縮小比例)
.item {
  flex-shrink: <number>; /* default 1 */
}
           
  • flex-basis(項目占據的主軸空間)

    預設值auto(本來大小)。

    它可以設為跟width或height屬性一樣的值(比如350px),則項目将占據固定空間。

.item {
  flex-basis: <length> | auto; /* default auto */
}
           
  • flex(簡寫)

    flex-grow, flex-shrink 和 flex-basis的簡寫,預設值為0 1 auto

    兩個快捷值:auto (1 1 auto) 和 none (0 0 auto)。

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}
           
  • align-self(單個項目對齊方式)

    允許單個項目有與其他項目不一樣的對齊方式,可覆寫align-items屬性

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
           

文章内容參考:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool