CSS3布局(前端所必須要掌握)

CSS布局

傳統(tǒng)方案是基于盒裝模型汽纠,依賴display屬性+position屬性+float屬性嫩絮,但對(duì)于一些特殊布局(eg:垂直居中)就不容易實(shí)現(xiàn)秕衙。

補(bǔ)充:
塊元素:出現(xiàn)在另一個(gè)元素下面的元素矫俺;
內(nèi)聯(lián)元素:出現(xiàn)在另一個(gè)元素旁邊的元素烹棉,就像段落中的單個(gè)單詞一樣阳仔;

dispaly屬性一些默認(rèn)的display的值忧陪,段落之間樣式默認(rèn)值為:display:block<a>元素默認(rèn)為display:inline近范。
注:display:flexdisplay:grid在布局上比較重要嘶摊。

1、Flex布局

  • 彈性盒子(Flexbox)
    用于創(chuàng)建橫向/縱向的一維頁(yè)面布局评矩,在其父元素上應(yīng)用display:flex叶堆,所有直接子元素機(jī)會(huì)按照f(shuō)lex進(jìn)行布局,但是子元素的float,clear,vertical-align屬性將失效斥杜。

任何一個(gè)容器都可指定為flex布局虱颗。

.box {
 display: flex;
}
<div class="box">
 <div class="box1">one</div>
 <div class="box2">two</div>
 <div class="box3">three</div>
</div>
.box {
 display: flex;
}
.box > div {
 flex:1
}
<div class="box">
 <div class="box1">one</div>
 <div class="box2">two</div>
 <div class="box3">three</div>
</div>
.container{
 display:flex;
 flex-wrap: wrap; /*可換行*/
 justify-content:center;
}
.item{
 flex: 0 1 150px;
 margin: 5px; /*外邊距*/
}

flex:是flex-growflex-shrink蔗喂、flex-basis的合并形式忘渔。

2、Grid布局

用于同時(shí)在兩個(gè)維度把元素按行和列排列整齊弱恒。grad-template-rowsgrid-template-columns定義了行和列的軌道辨萍。grid-gap定義了網(wǎng)格間的間距。

Grid 布局只對(duì)項(xiàng)目生效,不對(duì)項(xiàng)目子元素起作用锈玉。

如下代碼:

.box {
 display:grid;
 grid-template-columns: 1fr 1fr 1fr;
 grad-template-rows: 100px 100px;
 grid-gap:10px;
}
<div class="box">
 <div class="box1">one</div>
 <div class="box2">two</div>
 <div class="box3">three</div>
 <div class="box1">one</div>
 <div class="box2">two</div>
</div>

注:
a.fr單位跨網(wǎng)格軌道可用空間的分布爪飘。上面代碼中有著3個(gè)大小為1fr的軌道的網(wǎng)格容器,創(chuàng)建了三個(gè)列軌道拉背;
b.若最后一個(gè)是2fr师崎,則表示最后一個(gè)軌道是前者的二倍;
c.還可以與絕對(duì)單位結(jié)合使用椅棺,eg:
grid-template-columns: 150px 1fr 2fr;表示第一列寬是150像素犁罩,第三列寬是第二列寬的2倍;
d.grid-template-columns: 150px auto 150px;auto表示由瀏覽器自己決定

  • 默認(rèn)情況下,容器元素都是塊級(jí)元素两疚,但也可以設(shè)為行內(nèi)元素床估。如下代碼,就是指定了div是一個(gè)行內(nèi)元素诱渤,該元素內(nèi)部采用網(wǎng)格布局:
    div{display: inline-grid;}
    注:設(shè)為網(wǎng)格布局后丐巫,容器子元素(項(xiàng)目)的floatdisplay:inline-block勺美、display:table-cell递胧、vertical-aligncolumn-*
    設(shè)置都將失效。
  • 容器指定了網(wǎng)格布局后赡茸,就要?jiǎng)澐中泻土辛恕?br> 列寬:grid-template-columns
    行高:grid-template-rows

代碼如下:

.container {
 display:grid;
 grid-template-columns:100px 100px 100px;
 grid-template-rows:100px 100px 100px;
}

上面代碼指定了一個(gè)三行三列的網(wǎng)格缎脾,列和寬都是100px,當(dāng)然也可用百分比;
或用repeat(3,100px)也可;
或用repeat(auto-fill,100px)占卧,當(dāng)容器大小不確定時(shí)可以用遗菠。

  • 比較常用的布局
    兩欄布局:
grid-template-columns: minmax(150px,25%) 1fr;

表示第一列寬度最小為150px,最大寬度為總寬度的25%

三明治布局
grid-template-rows:auto 1fr auto;
垂直劃分為上中下三部分(頁(yè)眉屉栓、內(nèi)容區(qū)舷蒲、頁(yè)腳)耸袜,頁(yè)眉和頁(yè)腳都是本來(lái)的內(nèi)容高度友多,內(nèi)容區(qū)是剩下所有的高度。

圣杯布局(最常用)
是將三明治布局中的內(nèi)容區(qū)分成三部分(左邊欄堤框、主欄域滥、右邊欄)

html代碼

<div class="container">
 <header/>
 <div>
 <main/>
 <div/>
 <footer/>
</div>

CSS代碼:

.container{
 display: grid;
 grid-template: auto 1fr auto / auto 1fr auto;
}

表示垂直方向(頁(yè)眉和頁(yè)腳都是本身內(nèi)容高度,內(nèi)容區(qū)占滿剩余的高度)蜈抓,水平方向(左邊欄和右邊欄都是本身內(nèi)容高度启绰,中間主欄占滿剩余的高度)。

十二網(wǎng)格布局

grid-template-columns: repeat(12, 1fr);

一些常用的網(wǎng)格屬性

  • 行間距:grid-row-gap

  • 列間距:gid-column-gap

  • 合并寫法:grid-gap

  • 設(shè)置單元格內(nèi)容的水平位置:justify-items

  • 設(shè)置單元格內(nèi)容的垂直位置:align-items

  • 合并寫法:place-items

  • 整個(gè)內(nèi)容區(qū)域在容器里面的水平位置:justify-content

  • 整個(gè)內(nèi)容區(qū)域在容器里面的垂直位置:align-content

  • 合并寫法:place-content

  • grid-column:1/3等同于grid-column: 1/span 2表示從第一根列線到第三根列線(即第一列和第二列)

  • grid-row:1/span 2沟使,第一根行線委可,橫跨兩個(gè)網(wǎng)格,(即表示第一行和第二行)

  • grid-area:指定項(xiàng)目放在哪個(gè)區(qū)域

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市着倾,隨后出現(xiàn)的幾起案子拾酝,更是在濱河造成了極大的恐慌,老刑警劉巖卡者,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒿囤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡崇决,警方通過(guò)查閱死者的電腦和手機(jī)材诽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恒傻,“玉大人脸侥,你說(shuō)我怎么就攤上這事∮澹” “怎么了湿痢?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)扑庞。 經(jīng)常有香客問(wèn)我譬重,道長(zhǎng),這世上最難降的妖魔是什么罐氨? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任臀规,我火速辦了婚禮,結(jié)果婚禮上栅隐,老公的妹妹穿的比我還像新娘塔嬉。我一直安慰自己,他們只是感情好租悄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布谨究。 她就那樣靜靜地躺著,像睡著了一般泣棋。 火紅的嫁衣襯著肌膚如雪胶哲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天潭辈,我揣著相機(jī)與錄音鸯屿,去河邊找鬼。 笑死把敢,一個(gè)胖子當(dāng)著我的面吹牛寄摆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播修赞,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼婶恼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起勾邦,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤联逻,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后检痰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體包归,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年铅歼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了公壤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡椎椰,死狀恐怖厦幅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慨飘,我是刑警寧澤确憨,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站瓤的,受9級(jí)特大地震影響休弃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜圈膏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一塔猾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稽坤,春花似錦丈甸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至杖玲,卻和暖如春顿仇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背天揖。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工夺欲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跪帝,地道東北人今膊。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像伞剑,于是被迫代替她去往敵國(guó)和親斑唬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355