常見CSS布局

CSS頁面布局技術(shù)允許我們拾取網(wǎng)頁中的元素,并且控制它們相對正常布局流郊尝、周邊元素傻丝、父容器或者主視口/窗口的位置茵肃。

正常布局流

正常布局流,即我們所說的文檔流辐烂,是原生的遏插、未經(jīng)人為刻意控制的瀏覽器默認(rèn)的HTML布局排版方式。
“霸道”的塊級元素纠修,從上往下胳嘲,另起一行;“溫柔”的內(nèi)聯(lián)元素(最常見的文字)扣草,從左到右依次緊挨著排布了牛。一個元素的性格是“霸道”或是“溫柔”,通常出生時便已確定辰妙,但我們可以刻意地通過display屬性的設(shè)置來“調(diào)教”它的性格鹰祸,亦霸道(display:block),亦溫柔(display:inline)密浑,亦或霸道兼溫柔(diaplsy:inline-block)蛙婴。

浮動

通常元素默認(rèn)是不浮動的,即浮動屬性為none尔破。使用浮動的“調(diào)教”后街图,我們便能讓兩個塊級元素從默認(rèn)的垂直布局變?yōu)樗讲季帧?br> 注意:子元素設(shè)置float屬性后,通常需要在其父元素設(shè)置清除浮動的樣式懒构,即在父元素添加一個.clearfix的類餐济,樣式為

.clearfix::after{
   content: '';
   display: block;
   clear: both;
}

這樣,如果那個元素需要清除浮動胆剧,直接多加一個.clearfix的類名即可絮姆,一勞永逸。這里利用的偽元素的一些特性。

左右布局

1. 簡單的左右布局

HTML代碼

<body>
   <div class="father clearfix">
     <div class="left">我在左</div>
     <div class="right">我在右</div>
   </div>
</body>

CSS樣式

.father{
  border:1px solid black;
}
.left{
  background:red;
  width:40%;
  float:left;
}
.right{
  background:yellow;
  width:40%;
  float:right;
}
.clearfix::after{
  content:'';
  display:block;
  clear:both;
}

效果


如果父元素沒有添加.clearfix類滚朵,則會出現(xiàn)父元素沒有高度的bug冤灾,如圖

2. 左側(cè)固定,右側(cè)自適應(yīng)布局(float + margin)
2.1 左側(cè)左浮動辕近,右側(cè)設(shè)置margin-left

html代碼

<body>
  <div class="left"></div>
  <div class="main"></div>
</body>

CSS代碼

.left{
  width:200px;
  height:100px;
  background:#abcdef;
  float:left;
}
.main{
  height:100px;
  background:#777;
  margin-left:200px;
}
2.2 利用浮動和負(fù)外邊距來進(jìn)行左邊固定右邊自適應(yīng)的布局,與上面有些許不同匿垄,可以仔細(xì)琢磨下兩這有何區(qū)別

html

<body>
  <div class="left"></div>
  <div class="wrap">
    <div class="main"></div>
  </div>
</body>

CSS

.left{
  width:200px;   
  height:100px;
  background:#abcdef;
  float:left;
  margin-right:- 200px;  /*如果不設(shè)置負(fù)右外邊距移宅,.warp會被擠到下一行;設(shè)置多大呢椿疗?絕對值大于等于左邊欄目寬度即可*/
}
.wrap{
  width:100%;
  height:100px;
  background:#777;
}
.main{
  margin-left:200px;   /*等于左邊欄的寬度*/
  background:orange;
  height:100px;
}

效果


這里第二部分用了一個div進(jìn)行包裹漏峰,如果不是很好理解,可以粘貼代碼到js.bin看看效果届榄,然后打開開發(fā)者工具進(jìn)行調(diào)試浅乔。

左中右布局

左中右布局的實(shí)現(xiàn)由很多種,大體可分為傳統(tǒng)的浮動+margin絕對定位+margin铝条,現(xiàn)代比較“潮”的flex彈性盒子布局靖苇,以及科技含量更高的Grid布局

  1. 浮動+margin
  2. 絕對定位+margin
  3. flex彈性盒子
  4. Grid柵格

浮動+margin

左欄左浮動班缰,右欄右浮動贤壁,主體直接放后面,就實(shí)現(xiàn)了自適應(yīng)三欄布局埠忘。
這種布局需要注意主體main標(biāo)簽必須放在最后脾拆,左右隨意,一定要注意div書寫的順序莹妒。

html代碼

<body>
<div id="left"></div>
<div id="right"></div>
<div id="main"></div>
</body>

CSS代碼

html,body{
  margin:0; 
  height:100%;
}
#main{
  height:100%; 
  margin:0 210px; 
  background:#ffe6b8;
}
#left,#right{
  width:200px; 
  height:100%;
  background:#a0b3d6;
}
#left{
  float:left;
}
#right{
  float:right;
}

效果


浮動+margin負(fù)值法

首先名船,中間的主體要使用雙層標(biāo)簽。外層div寬度100%顯示旨怠,并且浮動渠驼,內(nèi)層div為真正的主體內(nèi)容,含有左右210像素的margin值运吓。左欄與右欄都是采用margin負(fù)值定位的渴邦,左欄左浮動,margin-left為-100%拘哨,由于前面的div寬度100%與瀏覽器谋梭,所以這里的-100% margin值正好使左欄div定位到了頁面的左側(cè);右側(cè)欄也是左浮動倦青,其margin-left也是負(fù)值瓮床,大小為其本身的寬度即200像素。
html

<body>
 <div id="main">
    <div id="body"></div>
 </div>
 <div id="left"></div>
 <div id="right"></div>
</body>

CSS

html,body{margin:0; height:100%;}
#main{width:100%; height:100%; float:left;}
#body{margin:0 210px; background:#ffe6b8; height:100%;}
#left,#right{width:200px; height:100%; float:left; background:#a0b3d6;}
#left{margin-left:-100%;}   /*本來在屏幕外,通過負(fù)外邊距想坐移了一個屏幕的寬度*/
#right{margin-left:-200px;} /*同上隘庄,本來自屏幕外踢步,向左移了自身寬度的長度*/

這種方法較難理解,推薦動手利用開發(fā)者工具調(diào)試調(diào)試丑掺。

絕對定位+margin

左右兩欄采用絕對定位获印,分別固定于頁面的左右兩側(cè),中間的主體欄用左右margin值撐開距離街州。于是實(shí)現(xiàn)了三欄自適應(yīng)布局兼丰。div順序沒有要求。

html

<body>
<div id="left"></div>
<div id="right"></div>
<div id="main"></div>
</body>

CSS

html,body{
margin:0; 
height:100%;
}
#left,#right{
position:absolute; 
top:0;
width:200px;
height:100%;
}
#left{
left:0; 
background:#a0b3d6;
}
#right{
right:0; 
background:#a0b3d6;
}
#main{
margin:0 210px; 
background:#ffe6b8; 
height:100%;
}

在用絕對定位時唆缴,通常會在其父元素使用相對定位鳍征,即position:absoluteposition:relative是成對出現(xiàn)的,兩者相輔相成面徽。

flex布局

給父元素(Flex容器)設(shè)置 display:flex艳丛;子元素(Flex項(xiàng)目)會默認(rèn)排成一行,通過設(shè)置容器或項(xiàng)目的各種屬性來改變項(xiàng)目布局的方式趟紊。

.father{
  display: flex;
  justify-content:space-between;
}
來自網(wǎng)絡(luò)

flex參考資料:
flex-MDN
Flex彈性布局

參考博文:張鑫旭

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末氮双,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子织阳,更是在濱河造成了極大的恐慌眶蕉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唧躲,死亡現(xiàn)場離奇詭異造挽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)弄痹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門饭入,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肛真,你說我怎么就攤上這事谐丢。” “怎么了蚓让?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵乾忱,是天一觀的道長。 經(jīng)常有香客問我历极,道長窄瘟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任趟卸,我火速辦了婚禮蹄葱,結(jié)果婚禮上氏义,老公的妹妹穿的比我還像新娘。我一直安慰自己图云,他們只是感情好惯悠,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竣况,像睡著了一般克婶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丹泉,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天鸠补,我揣著相機(jī)與錄音,去河邊找鬼嘀掸。 笑死,一個胖子當(dāng)著我的面吹牛规惰,可吹牛的內(nèi)容都是我干的睬塌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼歇万,長吁一口氣:“原來是場噩夢啊……” “哼揩晴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贪磺,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤硫兰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后寒锚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劫映,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年刹前,在試婚紗的時候發(fā)現(xiàn)自己被綠了泳赋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡喇喉,死狀恐怖祖今,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拣技,我是刑警寧澤千诬,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站膏斤,受9級特大地震影響徐绑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掸绞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一泵三、第九天 我趴在偏房一處隱蔽的房頂上張望耕捞。 院中可真熱鬧,春花似錦烫幕、人聲如沸俺抽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磷斧。三九已至,卻和暖如春捷犹,著一層夾襖步出監(jiān)牢的瞬間弛饭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工萍歉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留侣颂,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓枪孩,卻偏偏與公主長得像憔晒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蔑舞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345