flex佈局

網頁佈局,是css的一個重要應用。css

傳統的網頁佈局,主要是基於盒模型,和display、position、float屬性,這些屬性的一個優點就是簡單,容易理解,但也有一些不方便的地方,好比在實現垂直居中的時候。html

2009年,W3C提出了一種新的解決方案:Flex(Flexible Box,彈性佈局)佈局。瀏覽器

設置爲flex佈局的容器稱爲flex容器,flex容器的子元素稱爲容器項目(flex item)。佈局

將元素設置爲flex佈局後,子元素的float、clear、vertical-align屬性將失效。flex

Flex佈局的一些基本概念spa

Flex容器默認有兩根軸,水平的主軸(main axis)和垂直的交叉軸(cross asix)。主軸的開始位置叫作main start,主軸的結束位置叫作main end。交叉軸的開始位置叫作cross axis,交叉軸的結束位置叫作cross end。code

容器項目默認沿主軸排列,單個項目佔據的主軸空間叫作main size,佔據的交叉軸空間叫作cross size。htm

Flex容器的一些屬性blog

flex-direction排序

flex-wrap

flex-flow

justify-content

align-items

align-content

1.flex-direction:容器的方向

有4個值:

row(默認值):主軸爲水平方向,起點在左側

row-reverse:主軸爲水平方向,起點在右側

column:主軸爲垂直方向,起點在頂部

column-reverse:主軸爲垂直方向,起點在底部

2.flex-wrap:項目排列

有3個值:

nowrap(默認):不換行

wrap:換行,第一行結束後,另起一行開始排列

wrap-reverse:換行,第一行結束後在上面一行開始排列

3.flex-flow:flex-direction和flex-wrap的簡寫形式,默認值爲row nowrap

.ele{flex-flow:<flex-direction>||<flex-wrap>}

取值請看例子:

.container{

  flex-flow:row nowrap;

}

4.justify-content:項目在主軸上的對齊方式

有5個值:

flex-start(默認):左對齊

flex-end:右對齊

center:居中

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

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

5.align-items:項目在交叉軸上的對齊方式

有5個值,與交叉軸的方向有關,具體以下:

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

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

center:交叉軸的中點對齊

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

stretch(默認值):若是項目未定義或height爲auto,將佔滿整個容器的高度

6.aglin-content:多根軸線的對齊方式,若是隻有一根軸線,該屬性不起做用

.box{
    align-content: flex-start || flex-end || center || space-between || space-around || stretch;
}

有6個值:

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

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

center:與交叉軸的中點對齊

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

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

stretch(默認值):軸線佔滿整個交叉軸

項目的屬性

項目能夠設置如下這些屬性:

order

flex-grow

flex-shrink

flex-basis

flex

align-self

1.order:項目的排列順序。數值越小,排序越靠前,默認爲0

.item {
    order: <integer>;
}

2.flex-grow:定義項目的放大比例,默認爲0,即若是存在剩餘空間,也不放大。

.item {
    flex-grow: <number>; /*default 0*/
}

若是全部項目的flex-grow都爲1,則它們將等分剩餘空間。若是一個項目的flex-grow爲2,其餘項目的flex-grow爲1,那麼前者將佔有的剩餘空間比後者多一倍。

3.flex-shrink:定義項目的縮小比例,默認爲1,即若是空間不足,該項目將被縮小。

.item {
    flex-shrink: <number>; /*default 1*/
}

若是全部項目的flex-shrink都爲1,當空間不足時,都將等比例縮小。可是若是一個項目的flex-shrink爲0,其餘項目的flex-shrink爲1,那麼當空間不足時,前者不縮小,後者則將等比例縮小。

屬性值不能爲負值。

4.flex-basis:在定義剩餘空間以前,項目佔據的主軸的空間。瀏覽器根據這個屬性,計算主軸是否有剩餘空間,它的默認值爲auto,即項目的原本大小。

.item {
    flex-basis: <length> || auto; /*default auto*/
}

5.flex:flex-grow、flex-shrink、flex-basis的簡寫,默認爲0 1 auto,後兩個屬性爲可選屬性。

flex屬性有兩個快捷值:auto(1 1 auto)、none(0,0,auto)。

建議使用簡寫方式。

6.align-self:容許單個項目有與其餘項目不同的對齊方式,能夠覆蓋align-items屬性,默認值爲auto,表示繼承父元素的align-items屬性,若是沒有父元素,等同於stretch。

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

該屬性能夠取6個值,除了auto之外,其餘都與align-items徹底相同。

 

分享自:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

相關文章
相關標籤/搜索