先來看看幾種常見的布局方式

我的主要參考資料是Landon Schropp的文章和Solved by Flexbox。
一、骰子的布局
骰子的一面,最多可以放置9個(gè)點(diǎn)。

下面,就來看看Flex如何實(shí)現(xiàn),從1個(gè)點(diǎn)到9個(gè)點(diǎn)的布局。你可以到codepen查看Demo。

如果不加說明,本節(jié)的HTML模板一律如下。
上面代碼中,div元素(代表骰子的一個(gè)面)是Flex容器,span元素(代表一個(gè)點(diǎn))是Flex項(xiàng)目。如果有多個(gè)項(xiàng)目,就要添加多個(gè)span元素,以此類推。
1.1 單項(xiàng)目
首先,只有左上角1個(gè)點(diǎn)的情況。Flex布局默認(rèn)就是首行左對(duì)齊,所以一行代碼就夠了。

.box {display:flex;}
設(shè)置項(xiàng)目的對(duì)齊方式,就能實(shí)現(xiàn)居中對(duì)齊和右對(duì)齊。

.box {display:flex;justify-content:center;}

.box {display:flex;justify-content:flex-end;}
設(shè)置交叉軸對(duì)齊方式,可以垂直移動(dòng)主軸。

.box {display:flex;align-items:center;}

.box {display:flex;justify-content:center;align-items:center;}

.box {display:flex;justify-content:center;align-items:flex-end;}

.box {display:flex;justify-content:flex-end;align-items:flex-end;}
1.2 雙項(xiàng)目

.box {display:flex;justify-content:space-between;}

.box {display:flex;flex-direction:column;justify-content:space-between;}

.box {display:flex;flex-direction:column;justify-content:space-between;align-items:center;}

.box {display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end;}

.box {display:flex;}.item:nth-child(2) {align-self:center;}

.box {display:flex;justify-content:space-between;}.item:nth-child(2) {align-self:flex-end;}
1.3 三項(xiàng)目

.box {display:flex;}.item:nth-child(2) {align-self:center;}.item:nth-child(3) {align-self:flex-end;}
1.4 四項(xiàng)目

.box {display:flex;flex-wrap:wrap;justify-content:flex-end;align-content:space-between;}

HTML代碼如下。

CSS代碼如下。
.box {display:flex;flex-wrap:wrap;align-content:space-between;}.column {flex-basis:100%;display:flex;justify-content:space-between;}
1.5 六項(xiàng)目

.box {display:flex;flex-wrap:wrap;align-content:space-between;}

.box {display:flex;flex-direction:column;flex-wrap:wrap;align-content:space-between;}

HTML代碼如下。

CSS代碼如下。
.box {display:flex;flex-wrap:wrap;}
.row{flex-basis:100%;display:flex;}
.row:nth-child(2){justify-content:center;}
.row:nth-child(3){justify-content:space-between;}
1.6 九項(xiàng)目

.box {display:flex;flex-wrap:wrap;}
二、網(wǎng)格布局
2.1 基本網(wǎng)格布局
最簡(jiǎn)單的網(wǎng)格布局,就是平均分布。在容器里面平均分配空間,跟上面的骰子布局很像,但是需要設(shè)置項(xiàng)目的自動(dòng)縮放。

HTML代碼如下。

CSS代碼如下。
.Grid {display:flex;}
.Grid-cell {flex:1;}
2.2 百分比布局
某個(gè)網(wǎng)格的寬度為固定的百分比,其余網(wǎng)格平均分配剩余的空間。

HTML代碼如下。

.Grid {display:flex;}
.Grid-cell {flex:1;}
.Grid-cell.u-full {flex:0 0 100%;}
.Grid-cell.u-1of2 {flex:0 0 50%;}
.Grid-cell.u-1of3 {flex:0 0 33.3333%;}
.Grid-cell.u-1of4 {flex:0 0 25%;}
三、圣杯布局
圣杯布局(Holy Grail Layout)指的是一種最常見的網(wǎng)站布局。頁面從上到下,分成三個(gè)部分:頭部(header),軀干(body),尾部(footer)。其中軀干又水平分成三欄,從左到右為:導(dǎo)航、主欄、副欄。

HTML代碼如下。

CSS代碼如下。
.HolyGrail {display:flex;min-height:100vh;flex-direction:column;}
header,footer {flex:1;}
.HolyGrail-body {display:flex;flex:1;}
.HolyGrail-content {flex:1;}
.HolyGrail-nav, .HolyGrail-ads {
/* 兩個(gè)邊欄的寬度設(shè)為12em */
flex:0 0 12em;
}
.HolyGrail-nav {
/* 導(dǎo)航放到最左邊 */
order:-1;
}
如果是小屏幕,軀干的三欄自動(dòng)變?yōu)榇怪悲B加。
@media (max-width:768px){
????.HolyGrail-body {flex-direction:column;flex:1;}
.HolyGrail-nav,.HolyGrail-ads,.HolyGrail-content {flex:auto;}
}
四、輸入框的布局
我們常常需要在輸入框的前方添加提示,后方添加按鈕。

HTML代碼如下。

CSS代碼如下。
.InputAddOn {display:flex;}
.InputAddOn-field {flex:1;}
五、懸掛式布局
有時(shí),主欄的左側(cè)或右側(cè),需要添加一個(gè)圖片欄。

HTML代碼如下。

CSS代碼如下。
.Media {display:flex;align-items:flex-start;}
.Media-figure {margin-right:1em;}
.Media-body {flex:1;}
六、固定的底欄
有時(shí),頁面內(nèi)容太少,無法占滿一屏的高度,底欄就會(huì)抬高到頁面的中間。這時(shí)可以采用Flex布局,讓底欄總是出現(xiàn)在頁面的底部。

HTML代碼如下。

CSS代碼如下。
.Site {display:flex;min-height:100vh;flex-direction:column;}
.Site-content {flex:1;}
七,流式布局
每行的項(xiàng)目數(shù)固定,會(huì)自動(dòng)分行。

CSS的寫法。
.parent {
????width:200px;
????height:150px;
????background-color:black;
????display:flex;
????flex-flow:row wrap;
????align-content:flex-start;
}
.child {
????box-sizing:border-box;
????background-color:white;
????flex:0 0 25%;
????height:50px;
????border:1px solid red;
}
文章轉(zhuǎn)自阮一峰博客http://www.ruanyifeng.com/blog/2015/07/flex-examples.html,感謝分享