先來看看幾種常見的布局方式
我的主要參考資料是Landon Schropp的文章和Solved by Flexbox怨愤。
一、骰子的布局
骰子的一面调限,最多可以放置9個點(diǎn)涂召。
下面坠非,就來看看Flex如何實(shí)現(xiàn),從1個點(diǎn)到9個點(diǎn)的布局果正。你可以到codepen查看Demo炎码。
如果不加說明盟迟,本節(jié)的HTML模板一律如下。
上面代碼中潦闲,div元素(代表骰子的一個面)是Flex容器攒菠,span元素(代表一個點(diǎn))是Flex項(xiàng)目。如果有多個項(xiàng)目歉闰,就要添加多個span元素辖众,以此類推。
1.1 單項(xiàng)目
首先和敬,只有左上角1個點(diǎn)的情況凹炸。Flex布局默認(rèn)就是首行左對齊,所以一行代碼就夠了昼弟。
.box {display:flex;}
設(shè)置項(xiàng)目的對齊方式啤它,就能實(shí)現(xiàn)居中對齊和右對齊。
.box {display:flex;justify-content:center;}
.box {display:flex;justify-content:flex-end;}
設(shè)置交叉軸對齊方式舱痘,可以垂直移動主軸变骡。
.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)格布局
最簡單的網(wǎng)格布局,就是平均分布蹬刷。在容器里面平均分配空間瓢捉,跟上面的骰子布局很像,但是需要設(shè)置項(xiàng)目的自動縮放办成。
HTML代碼如下泡态。
CSS代碼如下。
.Grid {display:flex;}
.Grid-cell {flex:1;}
2.2 百分比布局
某個網(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)站布局靶壮。頁面從上到下,分成三個部分:頭部(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 {
/* 兩個邊欄的寬度設(shè)為12em */
flex:0 0 12em;
}
.HolyGrail-nav {
/* 導(dǎo)航放到最左邊 */
order:-1;
}
如果是小屏幕,軀干的三欄自動變?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;}
五走诞、懸掛式布局
有時副女,主欄的左側(cè)或右側(cè),需要添加一個圖片欄蚣旱。
HTML代碼如下碑幅。
CSS代碼如下。
.Media {display:flex;align-items:flex-start;}
.Media-figure {margin-right:1em;}
.Media-body {flex:1;}
六塞绿、固定的底欄
有時沟涨,頁面內(nèi)容太少,無法占滿一屏的高度异吻,底欄就會抬高到頁面的中間裹赴。這時可以采用Flex布局,讓底欄總是出現(xiàn)在頁面的底部诀浪。
HTML代碼如下棋返。
CSS代碼如下。
.Site {display:flex;min-height:100vh;flex-direction:column;}
.Site-content {flex:1;}
七雷猪,流式布局
每行的項(xiàng)目數(shù)固定睛竣,會自動分行。
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射沟,感謝分享