網頁佈局,是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