布局的傳統解決方案,基于盒狀模型,依賴 display 屬性 + position屬性 + float屬性。
它對于那些特殊布局非常不友善,比如,垂直居中就不容易實作。
1.定義
Flex 是 Flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活性。
任何一個容器都可以指定為 Flex 布局。
Webkit 核心的浏覽器,必須加上-webkit字首。
設為 Flex 布局以後,子元素的float、clear和vertical-align屬性将失效。
2.概念

父: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(預設):不換行
wrap:換行,第一行在上方。Flex布局總結 wrap-reverse:換行,第一行在下方。Flex布局總結 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