首先我們來分析下這一張圖,從第一個子節點可以看到Flexbox由Flex容器和Flex項目組成,容器即父元素,項目即子元素。他們之間的一些關系可以這樣來表示:
這張圖可以在接下來的屬性分析中用到。
當我們使用flexbox布局時候,需要先給父容器的display值定位flex(塊級)或者inline-flex(行內級)。
當使用了這個值以后,伸縮容器會為內容建立新的伸縮格式化上下文(FFC),它的上下文展示效果和BFC根元素相同(BFC特性:浮動不會闖入伸縮容器,且伸縮容器的邊界不會與其內容邊界疊加)。
伸縮容器不是塊容器,因此有些設計用來控制塊布局的屬性,在伸縮布局中不適用,特別是多欄(column),float,clear,vertical-align這些屬性。
[flex-direction]屬性用來控制上圖中伸縮容器中主軸的方向,同時也決定了伸縮項目的方向。
網頁展示效果如下:
[flex-wrap]屬性控制伸縮容器是單行還是多行,也決定了側軸方向(新的一行的堆放方向)。
網頁效果見圖;
[flex-flow]屬性為flex-direction(主軸方向)和flex-wrap(側軸方向)的縮寫,兩個屬性決定了伸縮容器的主軸與側軸。
舉兩個栗子:
網頁效果如下:
這里大家可以多自己去試試不同的組合。
[justify-content]用于定義伸縮項目在主軸上面的的對齊方式,當一行上的所有伸縮項目都不能伸縮或可伸縮但是已經達到其最大長度時,這一屬性才會對多余的空間進行分配。當項目溢出某一行時,這一屬性也會在項目的對齊上施加一些控制。
還是看demo理解起來快一點:
[align-items]用來定義伸縮項目在側軸的對齊方式,這類似于[justify-content]屬性,但是是另一個方向。(flex-directon和flex-wrap是一對,justify-content和align-items是一對,前者分別定義主軸和側軸的方向,后者分別定義主軸和側軸中項目的對齊方式)。
下面demo只展示center和stretch的栗子,其他幾個可以參考flex-start和flex-end那樣。
[align-content]屬性可以用來調準伸縮行在伸縮容器里的對齊方式,這與調準伸縮項目在主軸上對齊方式的[justify-content]屬性類似。只不過這里元素是以一行為單位。請注意本屬性在只有一行的伸縮容器上沒有效果。當使用flex-wrap:wrap時候多行效果就出來了。
align-content: flex-start || flex-end || center || space-between || space-around || stretch;
具體圖片來至w3.org官方文檔;
太麻煩。寫不下去了,摔。
終于寫到關于伸縮項目的相關屬性了,主要是3個,order,flex(flex-grow,flex-shrink,flex-basis的組合),align-self;用來比較多的是前兩個。
有一種用法比較多,想設置一組中有兩個元素一個排第一,另外一個排最后,主需要將第一個的order:-1;另一個為order:0;這樣就好了。
譬如我們想控制一個container中有4個box,想box4為一個顯示,box1為最后一個顯示。只需要 這樣
1 2 3 4
顯示效果就這樣了:
[flex]屬性可以用來指定可伸縮長度的部件,是flex-grow(擴展比例),flow-shrink(收縮比例),flex-basis(伸縮基準值)這個三個屬性的縮寫寫法,建議大家采用縮寫的方式而不是單獨來使用這3個屬性。
flex:none | [ <'flex-grow'> ?<'flew-shrink'> || <'flow-basis'>]// flex-grow是必須得flex-shrink和flow-basis是可選的
flex-basis用圖來表示就是這樣:
[align-self]用來在單獨的伸縮項目上覆寫默認的對齊方式,這個屬性是用來覆蓋伸縮容器屬性align-items對每一行的對齊方式。也就是說在默認的情況下這兩個值是相等的。
align-self: auto | flex-start | flex-end | center | baseline | stretch
講了這么多他們的使用,我們來看一看flexbox布局的兼容性。
具體大家可以見這個網站:caniuse
在PC端其實很樂觀了,基本上主流的瀏覽器都已經兼容了flex的使用,但是到了移動端就不是那么好了,特別是國內瀏覽器,考慮到uc瀏覽器占了大頭,但是uc從圖中看到只兼容flex最老的一個版本,也就是2009年的版本,即display:box;很多現在flex的優秀特性到了它上面都不兼容了,所以建議大家在使用的時候,假如2009版本可以滿足開發要求的話,還是去使用2009版本,這樣風險更小。
但是假如想兼容多個瀏覽器,可以采用優雅降級的方式來使用,這里推薦一個scss的sass-flex-mixin,這樣就可以使用最新的寫法,并且兼容大部分瀏覽器了。
相信flexbox布局在以后的移動端會用得越來越多的。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com