Flex 佈局,能夠實現各類頁面佈局。目前,它已經獲得了全部瀏覽器的支持。Webkit 內核的瀏覽器,必須加上-webkit
前綴。
Flex 是 Flexible Box 的縮寫,意爲"彈性佈局"。css
採用 Flex 佈局的元素,稱爲 Flex 容器(flex container),簡稱"容器"。它的全部子元素自動成爲容器成員,稱爲 Flex 項目(flex item),簡稱"項目"。web
容器默認存在兩根軸:默認水平的爲主軸(main axis)和垂直的爲交叉軸(cross axis)。主軸的開始位置叫作main start
,結束位置叫作main end
;交叉軸的開始位置叫作cross start
,結束位置叫作cross end
。
項目默認沿主軸排列。單個項目佔據的主軸空間叫作main size
,佔據的交叉軸空間叫作cross size
。瀏覽器
須要注意的是:當元素設爲 Flex 佈局之後,子元素的float
、clear
和vertical-align
屬性將失效。佈局
能夠將任何容器指定爲Flex佈局flex
.box{ display: flex; }
行內元素也可使用 Flex 佈局。spa
.box{ display: inline-flex; }
Webkit 內核的瀏覽器,必須加上-webkit
前綴。code
.box{ display: -webkit-flex; /* Safari */ display: flex; }
容器的屬性有6個。繼承
flex-direction
屬性決定主軸的方向,即項目排列的方向。rem
可能有4個值頁面佈局
.container{ width: 100px; height: 100px; border: 1px solid black; border-radius: 10px; } .item{ margin-left: 1px; margin-top: 1px; display: inline-block; width: 20px; height: 20px; border: 1px solid black; border-radius: 20px; background: black; color: red; text-align: center; } <div class="container"> <span class="item">1</span> <span class="item">2</span> <span class="item">3</span> <span class="item">4</span> <span class="item">5</span> <span class="item">6</span> </div>
.container{ display: flex; border: 1px solid black; border-radius: 5px; flex-direction: column; }
默認狀況下,項目都排在一條線上,即主軸上。flex-wrap
屬性定義,當一條軸線排不下時,是否換行和方式。
可能有3個值
flex-flow
屬性是flex-direction
屬性和flex-wrap
屬性的簡寫形式,默認值爲row nowrap
。
justify-content
屬性定義了項目在主軸上的對齊方式。
可能的值有:flex-start(默認),flex-end,center,space-between,space-around。當主軸沿水平方向時,具體含義爲
align-items
屬性定義項目在交叉軸上如何對齊。
可能的值有:
align-content
屬性定義了多根軸線(即item不止一行時)的對齊方式。若是項目只有一根軸線,該屬性不起做用。
注意當有多行時,定義了align-content後,align-items屬性將失效。align-content可能值含義以下(假設主軸爲水平方向):
項目一共有六個屬性:
order
flex-grow
flex-shrink
flex-basis
flex
align-self
order的值是整數,默認爲0,整數越小,item排列越靠前。
.item:nth-child(1){ order: 4; } .item:nth-child(1){ order: 3; } .item:nth-child(1){ order: 2; } .item:nth-child(1){ order: 1; } <div class="container"> <span class="item">1</span> <span class="item">2</span> <span class="item">3</span> <span class="item">4</span> <span class="item">5</span> <span class="item">6</span> </div>
定義了當flex容器有多餘空間時,item是否放大。默認值爲0,即當有多餘空間時也不放大;可能的值爲整數,表示不一樣item的放大比例。
注意:當在容器中定義了flex-wrap: nowrap
,並且空間不足的狀況下,則沒有放大的效果。
定義了當容器空間不足時,item是否縮小。默認值爲1,表示當空間不足時,item自動縮小,其可能的值爲整數,表示不一樣item的縮小比例。
若是全部項目的flex-shrink
屬性都爲1,當空間不足時,都將等比例縮小。若是一個項目的flex-shrink
屬性爲0,其餘項目都爲1,則空間不足時,前者不縮小。
負值對該屬性無效。
注意:當在容器中定義了flex-wrap: wrap
,表示空間足夠,則沒有縮小的效果。
flex-basis
屬性定義項目佔據的主軸空間(main size)。瀏覽器根據這個屬性,計算主軸是否有多餘空間。它的默認值爲auto
,即項目的原本大小。
flex
屬性是flex-grow
, flex-shrink
和 flex-basis
的簡寫,默認值爲0 1 auto
。後兩個屬性可選。
align-self
屬性容許單個項目有與其餘項目不同的對齊方式,可覆蓋align-items
屬性。默認值爲auto
,表示繼承父元素的align-items
屬性,若是沒有父元素,則等同於stretch
。