http://www.w3.org/TR/2014/WD-css-flexbox-1-20140325/css
CCS2.1中規定了四種佈局模式:html
Flexbox(伸縮佈局盒) 是 CSS3 中一個新的佈局模式,用於複雜的佈局(designed for laying out more complex applications and webpages)css3
例子:web
<style> #deals { display: flex; /* Flex layout so items have equal height */ flex-flow: row wrap; /* Allow items to wrap into multiple lines */ } .sale-item { display: flex; /* Lay out each item using flex layout */ flex-flow: column; /* Lay out item’s contents vertically */ } .sale-item > img { order: -1; /* Shift image before other content (in visual order) */ align-self: center; /* Center the image cross-wise (horizontally) */ } .sale-item > button { margin-top: auto; /* Auto top margin pushes button to bottom */ } </style>
Flexbox 由 伸縮容器 和 伸縮項目 組成。經過設置元素的 display 屬性爲 flex
或 inline-flex
能夠獲得一個伸縮容器。設置爲 flex
的容器被渲染爲一個塊級元素,而設置爲 inline-flex
的容器則渲染爲一個行內元素。瀏覽器
下圖是能夠看出flex-flow與以前熟悉的元素的映射關係。The flex-flow value determines how these terms map to physical directions (top/right/bottom/left), axes (vertical/horizontal), and sizes (width/height).app
Flexbox 定義了伸縮容器內伸縮項目該如何佈局。佈局
Flexbox 使用 主軸 和 側軸的概念。伸縮行跟隨主軸。側軸則垂直於主軸。flex
display 值有兩種flexbox
flex :生成一個塊級伸縮容器boxspa
inline-flex: 生成一個內聯伸縮容器box
Flex 容器與以前的塊級元素和內聯元素不一樣,所以不少針對塊級元素定義的屬性在伸縮容器內是沒效果的。(如column-*,float,clear等)
設置伸縮元素的 visibility:collapse ,
目前爲止,visibility: collapse;
尚未被讓任何瀏覽器正確的實現。
伸縮容器的內容能夠從任何方向任何順序鋪展。主要經過 flex-direction,flex-wrap, and order這三個屬性
nowrap | wrap | wrap-reverse
單行,多行,多行且從cross-end 往cross-start
若是 flex-wrap
設置爲 wrap
,在一個伸縮行容不下全部伸縮項目時,伸縮項目會換行到一條新增的伸縮行上。新增的伸縮行根據側軸的方向添加。若爲wrap-reverse
,則從側軸反方向添加
flex-direction 和flex-wrap 的縮寫。
div1 { flex-flow: row; }
/* Initial value. Main-axis is
inline, no wrap. */
div2 { flex-flow: column wrap; }
/* Main-axis is block-direction (top to bottom)
and lines wrap in the inline direction (rightwards). */
div3 { flex-flow: row-reverse wrap-reverse; }
/* Main-axis is the opposite of inline direction
(right to left). New lines wrap upwards. */
NOTE: 以上三個屬性都是相對writing-mode而言的。
若是須要文檔順序(html的順序)和顯示順序不一樣時,用order,order默認值爲0,設爲-1將顯示在最前面。
none | [ <‘flex-grow’><‘flex-shrink’>? || <‘flex-basis’> ]
flex: initial = flex: 0 1 auto.
元素在有剩餘空間的狀況下不會有任何變化,可是在必要的狀況下會被收縮。
元素會根據主軸自動伸縮以佔用全部剩餘空間,能夠經過使用 flex: 1;
來達到同樣的效果
在任何狀況都不會發生伸縮。
flex: <positive-number> : 指定一個數字,表明了這個伸縮項目該佔用的剩餘空間比例。剩餘空間被全部指定flex的伸縮元素瓜分。
塊級元素中的margin
在伸縮盒中,能作一樣的事情,可是更增強大。
margin:auto垂直居中
#login {
margin-left: auto;
} 致使了全部的剩餘空間被合併到login元素的左邊去了
用auto margins 和alignment properties的區別:
flex-start | flex-end | center | space-between | space-around
flex-start | flex-end | center | space-between | space-around | stretch
main-axis baseline
cross-axis baseline