flex布局:實(shí)例

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

我的主要參考資料是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,感謝分享

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容