這是一篇介紹和簡單的flex 布局的教程
Intro
Flexbox布局 是一種為了解決現代web 復雜布局的新型的css3布局方案。
印象中最深的一次了解flex布局是在css conf上,Git Cafe的工程師講的.但當時由于其還沒有得到各大瀏覽器廠商的廣泛支持,我有專注于js沒太在意這塊的東西,所以僅僅只是一個了解。
但隨著react 的革命,讓我們享受到組件化帶來的便利的同時,也帶來了js工程也需要考慮css的布局,特別是css組件化。更重要的原因還是隨著手機端的不斷普及,還有瀏覽器對對css3新特性的支持,讓我們有幸使用到了更好的布局解決方案。

瀏覽器支持情況
Why Flexbox
我們一直習慣于使用tables, floats, inline-blocks 以及其他css屬性來布局界面。
但其實這些屬性都不是為了現代復雜交互的網頁和webapp的布局而設計的。比如,簡單的垂直居中就不容易實現;復雜的flexible grid布局 實現起來更加費勁。
How
兩個重要的元素:
container 和 item

flexbox
container
container 存在兩根軸 main axis 和cross axis.
container的屬性:
-
flex-direction [row | row-reverse | column | column-reverse]main axis的方向 -
flex-wrap [nowrap | wrap | wrap-reverse]默認情況下,項目都排在一條線(又稱"軸線")上。flex-wrap屬性定義,如果一條軸線排不下,如何換行。 -
flex-flow [<flex-direction> || <flex-wrap>]上面兩個的合體 -
justify-content [flex-start | flex-end | center | space-between | space-around]對齊方式 main axis -
align-items [flex-start | flex-end | center | baseline | stretch]對齊方式 cross axis -
align-content [flex-start | flex-end | center | space-between | space-around | stretch]定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用
item
item 則沿著 main axis排布。
單個item所占的空間分別用 main size 和 cross size 表示。
item的屬性:
-
order [<integer>]排列順序,默認 0. -
flex-grow [<number>]放大比例,默認 0,即如果存在剩余空間,也不放大. -
flex-shrink項目的縮小比例,默認為1,即如果空間不足,該item將縮小 -
flex-basis [<length> | auto; /* default auto */]分配多余空間之前,項目占據的 main size, 默認auto -
flex none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]flex-grow, flex-shrink 和 flex-basis的簡寫,默認值為0 1 auto。后兩個屬性可選。 -
align-self [auto | flex-start | flex-end | center | baseline | stretch]讓單個item有與其他item不一樣的對齊方式,可覆蓋align-items屬性,默認值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同于stretch。
預告:下面會有一篇關于《Flexbox 打造柵格布局》
歡迎關注我的專欄知乎前端雜貨鋪
參考: