彈性盒子佈局指在提供一個爲容器內的items進行更有效率的排列,分配空間以及佈局的方式,彈性的意思是即使items的尺寸是未知或者動態的也可使用!css
這種佈局的理念主要是給容器一種能力能夠調節修改items的寬度高度和順序來充分利用容器內可用的空間---甚至能夠適應幾乎全部的設備和屏幕尺寸。瀏覽器
更重要的是,彈性盒子佈局的方向是不可知的,這個與常規的佈局相反(塊佈局是垂直方向的而行內則是水平基準的),雖然方向這個概念對於pages來講很好,可是它缺少靈活性來支持一些更大的更復雜的應用(尤爲是當方向改變,尺寸變化,拉伸縮小時)ide
注意:彈性盒子模型更適用於組件化的應用以及小規模佈局,大規模佈局能夠用Grid佈局組件化
這部分介紹彈性盒子模型中容器和其中Item的屬性佈局
咱們須要經過display屬性來定義一個容器爲Flexboxflex
.container { display: flex; /* or inline-flex */ }
經過該屬性能夠定義容器內item主軸的方向,items就會沿着主軸排列。Flexbox是單方向佈局模型。你能夠考慮把容器內item橫着排列或者豎着排列。ui
注意:下面的一些圖示和示例都按照flex-direction爲row的狀況編寫。flexbox
.container { flex-direction: row | row-reverse | column | column-reverse; }
默認狀況下,彈性容器內的items傾向於在單行內佈局。你能夠經過這個屬性來容許容器嘗試多行佈局。spa
.container{ flex-wrap: nowrap | wrap | wrap-reverse; }
nowrap(default):只容許單行佈局
wrap:容許多行佈局
wrap-reverse:容許多行佈局(反向).net
這個屬性只是上面兩個屬性縮寫,默認屬性是row nowrap:
flex-flow: <‘flex-direction’> || <‘flex-wrap’>
這個屬性定義了items沿着主軸的排列方式,它能夠幫助全部佈局在一行的彈性item
s合理的經過不一樣方式來使用剩餘的空間,同時也會對溢出的items進行分配:
.container { justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe; }
注意不一樣的瀏覽器對上述屬性支持有差別的,目前適配比較好的屬性包括flex-start,flex-end和center。
最後咱們能夠添加一個額外的屬性safe和unsafe:
這個定義了items沿着次軸(主軸交叉軸,例如主軸是X軸,次軸就是Y軸)的排列方式,具體內容和上面屬性相似:
.container { align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe; }
這個一樣也是針對次軸進行排列,和上述不一樣的是這個屬性針對是多行的狀況下,若是隻有一行這個屬性是沒用的(能夠用上一個屬性代替)
.container { align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe; }
具體屬性就不說明了。
這個屬性用於決定flex容器中items排列的順序,order越大越日後
.item { order: <integer>; /* default is 0 */ }
這個屬性定義了item是否有能力在有必要的狀況下擴展本身的尺寸,定義了在flex容器中item自身能夠佔用的空間比例。
若是全部的item這個值都設置爲1,那麼容器內可用空間將會均等分配給全部的子item,若是一個子item的屬性值是2,它將會佔有其餘item空間的2倍
.item { flex-grow: <number>; /* default 0 */ }
這個屬性定義了一個item可用縮小的能力,用法相似上面屬性:
.item { flex-shrink: <number>; /* default 1 */ }
這個屬性定義了一個元素在剩餘空間進行分配以前的默認尺寸,例如20%,5rem這樣。
auto關鍵詞意味着讓容器看着item本身的寬度或高度來決定(目前暫時是經過main-size關鍵詞來實現的),會根據flex-grow的值進行分配
content關鍵詞意味着默認尺寸參考item的內容大小,這個屬性還沒實現,暫時用不了...
.item { flex-basis: <length> | auto; /* default auto */ }
flex-grow,flex-shrink,flex-basis三者屬性的縮寫方式。
.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] }
比較推薦用這個屬性來代替上面寫法。
這個屬性用於單個item覆蓋容器的默認排列方式(經過align-items指定的)
.item { align-self: auto | flex-start | flex-end | center | baseline | stretch; }
經過不一樣Flexbox版本區分:
(old) means the old syntax from 2009 (e.g. display: box;)