CSS二列&三列布局

本篇文章主要介紹本人最近在CSS學(xué)習(xí)中總結(jié)出的常用的二列&三列布局的幾種方法

二列&三列布局:

image.png

二列布局的特征通常是側(cè)欄固定寬度宛瞄,主欄自適應(yīng)寬度
三列布局的特征通常是兩邊側(cè)欄固定寬度族操,主欄自適應(yīng)寬度
實現(xiàn)方式有以下幾種:

a. 浮動布局
原理:首先分別給兩邊側(cè)欄左右浮動,然后中間主欄設(shè)置左右margin給兩邊側(cè)欄留出空間中鼠,主欄自適應(yīng)寬度
DOM文檔:

<div class="container">
  <div class="left"></div>
  <div class="right"></div>
  <div class="main"></div>
</div>

CSS文檔:

.left{
 float: left;
 width: 100px;
 height: 100px;
 background-color: blue;
}
.right{
 float: right;
 width: 200px;
 height: 100px;
 background-color: green;
}
.main{
 height: 100px;
 background-color: red;
 margin-left: 120px;
 margin-right: 220px;
}

說明:
*如果是二列布局,則去掉一邊側(cè)欄沿癞,主欄取消那一邊的margin設(shè)置援雇。
*注意DOM順序,要先寫兩邊側(cè)欄椎扬,如果先寫主欄的話會將側(cè)欄擠到下一列惫搏。
*這種布局的缺點是頁面會首先渲染側(cè)欄再渲染主欄。

b. 絕對定位布局
原理:通過絕對定位將兩邊側(cè)欄固定蚕涤,同樣中間主欄設(shè)置margin給側(cè)欄騰空間筐赔,中間主欄自適應(yīng)。
DOM文檔:

<div class="container">
  <div class="main"></div>
  <div class="right"></div>
  <div class="left"></div>
</div>

CSS文檔:

.container{
  position: relative;
}
.left{
  width: 100px;
  height: 100px;
  background-color: blue;
  position: absolute;
  top: 0;
  left: 0;
}
.right{
  width: 200px;
  height: 100px;
  background-color: green;
  position: absolute;
  top: 0;
  right: 0;
}
.main{
  height: 100px;
  background-color: red;
  margin-left: 120px;
  margin-right: 220px;
}

說明:
*如果是二列布局揖铜,則去掉一邊側(cè)欄茴丰,主欄取消那一邊的margin設(shè)置。
*瀏覽器窗口小到一定程度時天吓,主欄與側(cè)欄會發(fā)生重疊贿肩。

c. 圣杯布局
原理:
首先給主欄和側(cè)欄都加上左浮動,主欄寬度設(shè)置100%龄寞,此時左右側(cè)欄均被擠下去汰规;
然后給左側(cè)欄一個margin-left:-100%,左側(cè)欄會從主欄的下面拉到與主欄對齊的左邊物邑,給右側(cè)欄一個margin-left:自身寬度溜哮,右側(cè)欄會從主欄的下面拉到與主欄對齊的右邊滔金;
此時左右側(cè)欄會擋住主欄的左右兩邊部分,所以在外層設(shè)置左右padding減小主欄寬度茬射,給兩邊側(cè)欄騰出空間鹦蠕,但是左右側(cè)欄會跟著縮小的主欄一起向中間靠攏。此時使用相對布局在抛,調(diào)整兩個側(cè)欄到相應(yīng)的位置钟病。
DOM文檔:

<div class="container">
  <div class="main"></div>
  <div class="left"></div>
  <div class="right"></div>  
</div>

CSS文檔:

.main{
  background-color: red;
  float: left;
  width: 100%;
  height: 100px;
}
.left{
  width: 100px;
  height: 100px;
  background-color: blue;
  float: left;
  margin-left: -100%;
  position: relative;
  left: -100px
}
.right{
  width: 200px;
  height: 100px;
  background-color: green;
  float: left;
  margin-left: -200px;
  position: relative;
  right: -200px
}
.container{
  padding: 0 200px 0 100px;
}

說明:
*如果是左邊帶有側(cè)欄的二欄布局,則去掉右側(cè)欄刚梭,不要設(shè)置主面板的padding-right值肠阱,其他操作相同。反之亦然朴读。
*書寫順序不能更改
*當(dāng)主欄寬度小于側(cè)欄寬度時布局會亂屹徘,可以設(shè)置主欄的min-width或者使用雙飛翼布局。

d. 雙飛翼布局
原理:與圣杯布局相似衅金,都利用了浮動和負邊距噪伊,但是在main外面加了一層div,由于側(cè)欄的負邊距是相對這個外層div的氮唯,所以給main設(shè)置左右margin是不會影響左右側(cè)欄鉴吹,也就省去定位的步驟了。
DOM文檔:

<div class="container">
  <div class="wrape">
      <div class="main"></div>
  </div>
  <div class="left"></div>
  <div class="right"></div>  
</div>

CSS文檔:

.wrape{
  float: left;
  width: 100%;
}
.main{
  margin: 0 200px 0 100px;
  background-color: red;
  height: 100px;
}
.left{
  width: 100px;
  height: 100px;
  background-color: blue;
  float: left;
  margin-left: -100%;
  /* position: relative;
  left: -100px */
}
.right{
  width: 200px;
  height: 100px;
  background-color: green;
  float: left;
  margin-left: -200px;
  /* position: relative;
  right: -200px */
}

說明:
*如果是左邊帶有側(cè)欄的二欄布局惩琉,則去掉右側(cè)欄豆励,不要設(shè)置main-wrap的margin-right值,其他操作相同瞒渠。反之亦然良蒸。
*解決了圣杯布局main的最小寬度不能小于左側(cè)欄的缺點.

e. flex布局
DOM文檔:

<div class="container">
  <div class="main"></div>
  <div class="left"></div>
  <div class="right"></div>  
</div>

CSS文檔:

.container{
  display: flex;
}
.main {
            flex: 1;
        height: 300px;
        background-color: red;
    }
    .left {
        order: -1;
        margin-right: 20px;
        height: 300px;
        background-color: blue;
    }
    .right {
            margin-left: 20px;
        height: 300px;
        background-color: green;
    }

說明:
*如果要實現(xiàn)二列的話,直接去掉單邊側(cè)欄即可伍玖。
*傳統(tǒng)布局步驟復(fù)雜繁瑣嫩痰,而flex布局的flex容器利用實際可用空間動態(tài)地調(diào)整子元素寬高比和順序,簡單實用窍箍,但需要考慮瀏覽器的兼容性始赎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仔燕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌魔招,老刑警劉巖晰搀,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異办斑,居然都是意外死亡外恕,警方通過查閱死者的電腦和手機杆逗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳞疲,“玉大人罪郊,你說我怎么就攤上這事尚洽⊙⑴保” “怎么了睛挚?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我遭贸,道長壕吹,這世上最難降的妖魔是什么删铃? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮腐魂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘兔毒。我一直安慰自己育叁,他們只是感情好谴蔑,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般赎婚。 火紅的嫁衣襯著肌膚如雪挣输。 梳的紋絲不亂的頭發(fā)上撩嚼,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音逻族,去河邊找鬼。 笑死抠璃,一個胖子當(dāng)著我的面吹牛搏嗡,可吹牛的內(nèi)容都是我干的彻况。 我是一名探鬼主播纽甘,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼货徙,長吁一口氣:“原來是場噩夢啊……” “哼痴颊!你這毒婦竟也來了锌杀?” 一聲冷哼從身側(cè)響起玉转,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤猾担,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漩蟆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垒探,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年怠李,在試婚紗的時候發(fā)現(xiàn)自己被綠了圾叼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡捺癞,死狀恐怖夷蚊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情髓介,我是刑警寧澤惕鼓,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站唐础,受9級特大地震影響箱歧,放射性物質(zhì)發(fā)生泄漏矾飞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一呀邢、第九天 我趴在偏房一處隱蔽的房頂上張望洒沦。 院中可真熱鬧,春花似錦价淌、人聲如沸申眼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽括尸。三九已至,卻和暖如春病毡,著一層夾襖步出監(jiān)牢的瞬間濒翻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工剪验, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肴焊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓功戚,卻偏偏與公主長得像娶眷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子啸臀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案届宠? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J的外補...
    _Yfling閱讀 13,737評論 1 92
  • CSS布局 布局是CSS中一個重要部分,本文總結(jié)了CSS布局中的常用技巧乘粒,包括常用的水平居中豌注、垂直居中方法,以及單...
    web前端學(xué)習(xí)閱讀 1,592評論 1 38
  • 目錄 常用居中垂直居中水平居中垂直水平居中 單列布局 雙列&三列布局 常用居中 垂直居中 單行文本垂直居中 圖片垂...
    聽城閱讀 429評論 1 2
  • 很榮幸完成了這一次30天的輸出任務(wù)~這是我第一次參加關(guān)于計劃打卡的活動灯萍,其實我也有見過類似的活動轧铁,但是從來都沒有...
    cf85ea560887閱讀 382評論 0 0
  • 忍一時越想越氣,退一步越想越虧旦棉! 朋友們齿风,現(xiàn)在笑的這么開心,有想過以后自己嗎 永不認輸绑洛! 手拉手并排走在街上女孩子...
    折耳根優(yōu)選閱讀 340評論 0 0