上一篇文章介紹了Flex布局的語法竟痰,今天介紹常見布局的Flex寫法。
你會(huì)看到硬霍,不管是什么布局帜慢,F(xiàn)lex往往都可以幾行命令搞定。
我只列出代碼唯卖,詳細(xì)的語法解釋請(qǐng)查閱《Flex布局教程:語法篇》粱玲。我的主要參考資料是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;}