2009年,W3C提出了一種新的方案--Flex佈局,能夠簡便、完整、響應式地實現各類頁面佈局。目前已獲得全部如今瀏覽器的支持。web
flex瀏覽器支持瀏覽器
Flex是Flexible Box的縮寫,翻譯成中文就是「彈性盒子」,用來爲盒裝模型提供最大的靈活性。任何一個容器均可以指定爲Flex佈局。佈局
.box{ display: -webkit-flex; /*在webkit內核的瀏覽器上使用要加前綴*/ display: flex; //將對象做爲彈性伸縮盒顯示 }
固然,行內元素也可使用Flex佈局。flex
.box { display: inline-flex; //將對象做爲內聯塊級彈性伸縮盒顯示 } 兼容性寫法
.box { display: flex || inline-flex; }
採用Flex佈局的元素,被稱爲Flex容器(flex container),簡稱「容器」。其全部子元素自動成爲容器成員,成爲Flex項目(Flex item),簡稱「項目」。spa
結構示意圖翻譯
容器默認存在兩根主軸:水平方向主軸(main axis)和垂直方向交叉軸(cross axis),默認項目按主軸排列。3d
設置在容器上的屬性有6種。code
.box { flex-direction: row | row-reverse | column | column-reverse; }
主軸的4個方向對象
默認狀況下,項目都排列在一條軸線上,但有可能一條軸線排不下。blog
一條軸線排不下
.box{ flex-wrap: nowrap | wrap | wrap-reverse; }
nowrap(默認):不換行;
不換行nowrap
wrap:換行,第一行在上方;
換行,第一行在上
wrap-reverse:換行,第一行在下方。
換行,第一行在下
.box{ flex-flow: <flex-direction> || <flex-wrap>; }
對齊方式與軸的方向有關,本文中假設主軸從左到右。
.box { justify-content: start | end | flex-start | flex-end | center | left | right | space-between | space-around | space-evenly | stretch | safe | unsafe | baseline | first baseline | last baseline; }
flex-start(默認值):左對齊;
左對齊
flex-end:右對齊;
右對齊
center:居中;
居中對齊
兩端對齊
兩側間隔相等
對齊方式與交叉軸的方向有關,假設交叉軸從下到上。
.box{ align-items: flex-start | flex-end | center | baseline | stretch; }
起點對齊
終點對齊
中點對齊
基線對齊
若是項目只有一根軸線,該屬性不起做用。
因此,容器必須設置flex-wrap:···;
.box{ align-content: flex-start | flex-end | center | space-between | space-around | stretch; }
起點對齊
終點對齊
中點對齊
軸線之間等間距
軸線兩側等間距
項目未設置高度時
有意思的是,當你不給項目設置高度可是給容器設置align-content不爲stretch時,同一軸線上的項目的高度將等於項目中高度最高的項目。
設置在項目上的屬性也有6個。
數值越小,排列越靠前,默認爲0,能夠是負值。
.item { order: <整數>; }
展現效果不明顯,直接盜圖
默認值爲0,即若是空間有剩餘,也不放大。
能夠是小數,按比例佔據剩餘空間。
默認狀況
.item{ flex-grow: <數字>; }
若全部項目的flex-grow的數值都相同,則等分剩餘空間
等分剩餘空間
若果有一個項目flex-grow爲2,其他都爲1,則該項目佔據剩餘空間是其他的2倍
不等分佔據
默認值都爲1,即若是空間不足將等比例縮小。
若是有一個項目的值爲0,其餘項目爲1,當空間不足時,該項目不縮小。
負值對該屬性無效,容器不該該設置flex-wrap。
.item{ flex-shrink: <非負整數>; }
若是一個項目設置flex-shrink爲0;而其餘項目都爲1,則空間不足時,該項目不縮小。
設置flex-shrink爲0的項目不縮小
若是全部項目都爲0,則當空間不足時,項目撐破容器而溢出。
不縮小
若是設置項目的flex-shrink不爲0的非負數效果同設置爲1。
默認值爲auto,瀏覽器根據此屬性檢查主軸是否有多餘空間。
.item{ flex-basis: <auto或者px>; }
注意設置的flex-basis是分配多餘空間以前項目佔據的主軸空間,若是空間不足則默認狀況下該項目也會縮小。
設置flex-basis爲350px,但空間充足
空間不足,項目縮小,小於設定值
默認值爲0 1 auto,第一個屬性必須,後兩個屬性可選。
.item{ flex: none | [<flex-grow><flex-shrink><flex-basis>]; }
flex:auto;
代替 flex: 1 1 auto;
;flex: none;
代替 flex: 0 0 auto
;####align-self屬性:容許單個項目與其餘項目有不同的對齊方式 >默認值爲auto,表示繼承父元素的align-items屬性,並能夠覆蓋align-items屬性。
.item{ align-self: auto | flex-start | flex-end | center | baseline | stretch; }