[Flex彈性布局]
1、了解兩個基本概念:
容器:需要添加彈性布局的父元素;
項目:彈性布局容器中的每一個子元素,稱為項目;
2、彈性布局的使用?
① 給父容器添加display: flex/inline-flex;屬性,即可使容器內容采用彈性布局顯示,而不遵循常規文檔流的顯示方式;
② 容器添加彈性布局后,僅僅是容器內容采用彈性布局,而容器自身在文檔流中的定位方式依然遵循常規文檔流;
③ display: flex;容器添加彈性布局后,顯示為塊級元素;
④設為 Flex 布局以后,子元素的float、clear和vertical-align屬性將失效。但是position定位屬性依然生效。
3、作用於容器的相關屬性:
① flex-direction屬性決定主軸的方向(即項目的排列方向)。
row(默認值):主軸為水平方向,起點在左端;
row-reverse:主軸為水平方向,起點在左端;
column:主軸為垂直方向,起點在上端。
column-reverse:主軸為垂直方向,起點在下端。
②flex-wrap屬性:定義,如果一條軸線排不下,如何換行。


(1)nowrap(默認):不換行。如果容器寬度不夠時,每個項目會被擠壓寬度;

(2) wrap:換行,並且第一行在容器最上方;

(3) wrap-reverse:換行,並且第一行在容器最下方 ;
③flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認值為row nowrap。

④justify-content屬性定義了項目在主軸上的對齊方式。
此屬性與主軸方向息息相關。
主軸方向為:
row-起點在左邊
row-reverse-起點在右邊
column- 起點在上端
column-reverse-起點在下端。

flex-start(默認值):項目位於主軸起點
flex-end:項目位於主軸終點
center: 居中
space-between:兩端對齊,項目之間的間隔都相等。(開頭和最后的項目,與父容器的邊緣沒有間隔)
space-around:每個項目兩側的間隔相等。所以,項目之間的間隔比項目與邊框的間隔大一倍。(開頭和最后的項目,與父容器的邊緣有一定的間隔,是項目間隔的一半。)
⑤ align-items屬性定義項目在交叉軸上如何對齊。
flex-start:交叉軸的起點對齊。
flex-end:交叉軸的終點對齊。
center:交叉軸的中點對齊。
baseline: 項目的第一行文字的基線對齊。(文字的行高,字體大小會影響每行的基線)
stretch(默認值):如果項目未設置高度或設為auto,將占滿整個容器的高度。
⑥ align-content屬性定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。
(當項目換為多行時,可使用align-content取代align-items)
flex-start:與交叉軸的起點對齊。
flex-end:與交叉軸的終點對齊。
center:與交叉軸的中點對齊。
space-between:與交叉軸兩端對齊,軸線之間的間隔平均分布。
space-around:每根軸線兩側的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍。
stretch(默認值):軸線占滿整個交叉軸。
4、作用於項目上的屬性:
①order屬性定義項目的排列順序。數值越小,排列越靠前,默認為0。
②flex-grow屬性定義項目的放大比例,默認為0,即如果存在剩余空間,也不放大。可以為負數。


③flex-shrink屬性定義了項目的縮小比例,默認為1,即如果空間不足,該項目將縮小。0為不縮小。
如果所有項目的flex-shrink屬性都為1,當空間不足時,都將等比例縮小。如果一個項目的flex-shrink屬性為0,其他項目都為1,則空間不足時,前者不縮小。
注意:負值對該屬性無效。
④flex-basis屬性定義項目占據的主軸空間。(如果主軸為水平,則設置這個屬性,相當於設置項目的寬度,原寬度width將會失效。)

⑤flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫,默認值為0 1 auto。后兩個屬性可選。這個屬性有兩個快捷設置:auto=(1 1 auto)/none=(0 0 auto)
⑥align-self:定義單個項目自身在交叉軸上的排列方式,可以覆蓋掉容器上的align-items屬性。
屬性值:與align-items相同,默認值為auto,表示繼承父容器的align-items屬性值。