負(fù)邊距、三欄布局

一、負(fù)邊距在讓元素產(chǎn)生偏移時(shí)和position: relative有什么區(qū)別?

  • 負(fù)margin和position: relative在讓元素產(chǎn)生偏移時(shí)都沒有脫離文檔流乒疏。但是利用負(fù)margin讓元素產(chǎn)生偏移時(shí),元素原來的位置會(huì)被占據(jù)饮焦;而position: relative元素原來的位置不會(huì)被占據(jù)怕吴,仍然會(huì)被保留。
    對(duì)比圖

    DEMO
  • 負(fù)margin除了可以移位自己县踢,還可以移動(dòng)周圍的元素转绷。margin-top和margin-left是移動(dòng)自己,而margin-right和margin-bottom是讓周圍的元素移動(dòng)硼啤。因?yàn)閙argin的意思就是要讓周圍最近的元素空出多少距離议经。比如說設(shè)置margin-right: -10px;,就是要讓下一個(gè)元素距離當(dāng)前元素-10px谴返,自然就是下一個(gè)元素左移煞肾。不然當(dāng)前元素和它前面的元素的margin-right就不對(duì),會(huì)受到影響嗓袱。而position: relative不會(huì)影響到其他的元素籍救。
    先來看看margin-left和margin-bottom。
    負(fù)左外邊距和負(fù)下外邊距

    DEMO
    因?yàn)閙argin-top上面已經(jīng)給出例子了渠抹,再來看看margin-right钧忽。
    margin-right
  • 這里還需要注意的一個(gè)小技巧是可以利用負(fù)margin來擴(kuò)大面積,這在一些布局中可以應(yīng)用到逼肯。使用條件是耸黑,如果一個(gè)元素沒有width,只有左右的負(fù)margin篮幢,那么它就會(huì)變寬大刊,可以利用負(fù)margin來擴(kuò)大面積。
    DEMO

二三椿、使用負(fù) margin 形成三欄布局有什么條件?

  • 三欄放在一個(gè)容器中缺菌,左右兩邊固定寬度,中間欄寬度100%自適應(yīng)搜锰。
  • 利用負(fù)margin形成三欄布局伴郁,是負(fù)margin和浮動(dòng)聯(lián)合使用達(dá)到的一個(gè)布局效果。所以這里的三欄都要設(shè)置左浮動(dòng)蛋叼。
  • 使用了浮動(dòng)之后焊傅,父容器一定要清除浮動(dòng)剂陡。
  • 對(duì)左右欄設(shè)置負(fù)margin,左邊欄設(shè)置margin-left: -100%狐胎,右邊欄的margin-left設(shè)置自身的寬度鸭栖。

三、圣杯布局的原理是怎樣的? 簡(jiǎn)述實(shí)現(xiàn)圣杯布局的步驟握巢。

  • 在html中晕鹊,先把中間的主區(qū)塊middle放在容器的最前面,接著是left暴浦,最后是right溅话。這樣可以先渲染重要的區(qū)塊,有利于搜索引擎優(yōu)化歌焦。
<div class="wrapper">
    <div class="main"></div>
    <div class="left"></div>
    <div class="right"></div>
</div>
  • 圣杯布局是實(shí)現(xiàn)左右寬度固定公荧,中間自適應(yīng)。
.main{
    width: 100%;
    background: blue;
    height: 300px;  
  }
.left{
    width: 200px;
    height: 300px;
    background: red;
  }
.right{
    width: 150px;
    height: 300px;
    background: orange;
  }
  • 將三欄都設(shè)置為左浮同规,這樣兩個(gè)側(cè)邊欄才能到中間區(qū)塊的middle上面去。
.main, .left, .right{
    float: left;
  }
  • 再利用負(fù)margin讓左邊欄和右邊欄跑到中間區(qū)塊的兩邊窟社。對(duì)左邊欄設(shè)置margin-left: -100%券勺,右邊欄的margin-left設(shè)置為自身的寬度。這樣兩個(gè)側(cè)邊欄就會(huì)分別覆蓋中間區(qū)塊的左右邊灿里。
.left{
    margin-left: -100%;
}
.right{
    margin-left: -150px;   /* 右邊欄自身的寬度 */
  }
  • 到上一步為止关炼,left和right欄已經(jīng)到了正確的位置,接下來是要解決覆蓋的問題匣吊。圣杯布局的解決方案是先對(duì)包裹三欄的容器設(shè)置好padding儒拂。可以上下為0色鸳,左右分別為左右兩欄的寬度社痛。
.wrapper{
        padding: 0 150px 0 200px;
    }
  • 接著,再利用相對(duì)定位命雀,把左右兩欄分別移動(dòng)到對(duì)應(yīng)的padding上去蒜哀。
.left{
    position: relative;
    left: -200px;
  }
.right{
  position: relative;
  right: -150px;
  }

完整DEMO

四、雙飛翼布局的原理? 實(shí)現(xiàn)步驟?

  • 前面和圣杯布局一樣吏砂,中間的主區(qū)塊main放在html的最前面撵儿,接著是子列sub和附加列extra。然后利用負(fù)外邊距讓sub和extra回到正確的位置狐血。
  • 接著面臨一個(gè)同樣的問題淀歇,那就是sub和extra覆蓋了main的左右兩邊的內(nèi)容。雙飛翼布局就是在main的外部再加一個(gè)div標(biāo)簽來包裹中間區(qū)塊匈织,寬度為100%浪默。然后再設(shè)置main的左右外邊距,使它回到對(duì)應(yīng)的位置浴鸿。
    html結(jié)構(gòu):
<div class="wrapper">
        <div class="middle">
        <div class="main">你好</div>
        </div>
        <div class="sub"></div>
        <div class="extra"></div>
    </div>

CSS部分:

.middle .main{
        margin-left: 200px;
        margin-right: 150px;
    }

完整DEMO

五、圣杯布局和雙飛翼布局的比較岳链。

  • 兩者的相同點(diǎn):都是讓主區(qū)塊的內(nèi)容先加載;都是左右兩欄固定高度掸哑,中間一欄自適應(yīng)约急;都是讓三欄設(shè)置浮動(dòng),再利用負(fù)外邊距實(shí)現(xiàn)三列布局厌蔽。
  • 兩者的不同點(diǎn):圣杯布局和雙飛翼布局的不同點(diǎn)就是處理主區(qū)塊覆蓋的問題。圣杯布局是利用相對(duì)定位奴饮,然后設(shè)置內(nèi)邊距padding來實(shí)現(xiàn)的,而雙飛翼布局是通過增加一個(gè)標(biāo)簽择浊,再設(shè)置外邊距margin來實(shí)現(xiàn)的戴卜。

對(duì)比而言,雙飛翼雖然增加了一個(gè)標(biāo)簽琢岩,但是它的思路比較容易理解,也不需要利用定位担孔。而且雙飛翼布局在瀏覽器窗口足夠小的時(shí)候不會(huì)出現(xiàn)排版錯(cuò)亂的情況,原因就是當(dāng)側(cè)邊欄寬度大于中間區(qū)塊寬度時(shí)糕篇,側(cè)邊欄上不去,會(huì)出現(xiàn)錯(cuò)亂灸撰。

六、把圣杯布局和雙飛翼布局改成兩欄布局

實(shí)現(xiàn)了三欄布局浮毯,兩欄布局就比較簡(jiǎn)單了,把右邊欄刪掉就可以债蓝。

  • 圣杯布局改成兩欄布局
    完整DEMO
  • 雙飛翼布局改成兩欄布局
    完整DEMO
  • 其他不考慮搜索引擎優(yōu)化的兩欄布局方法:
    不考慮搜索引擎優(yōu)化盛龄,也就是不把中間區(qū)塊放前面饰迹,這樣的兩欄布局實(shí)現(xiàn)起來比較簡(jiǎn)單。
  • 固定寬度的兩欄布局
    DEMO
  • 固定寬度的兩欄布局(浮動(dòng))
    DEMO
  • 不固定寬度的兩欄布局(定位)
    DEMO
  • 關(guān)于兩欄布局還可以參考之前的博客锹淌,就是利用形成BFC的方法赠制。
    利用BFC形成兩欄布局

七赂摆、代碼

  1. 用浮動(dòng)钟些、負(fù)邊距實(shí)現(xiàn)如下效果 參考

    效果預(yù)覽
  2. 使用圣杯布局實(shí)現(xiàn)如下三欄布局(兩側(cè)固定寬度200px,中間自適應(yīng))

    效果預(yù)覽
  3. 使用圣杯布局的思路實(shí)現(xiàn)如下兩欄布局

    效果預(yù)覽
  4. 使用雙飛翼布局實(shí)現(xiàn)如下三欄布局(兩側(cè)固定寬度200px,中間自適應(yīng))

    效果預(yù)覽
  5. 使用雙飛翼布局的思路實(shí)現(xiàn)如下兩欄布局

    效果預(yù)覽

所有代碼Github地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汪拥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子迫筑,更是在濱河造成了極大的恐慌,老刑警劉巖宗弯,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異罕伯,居然都是意外死亡叽讳,警方通過查閱死者的電腦和手機(jī)追他,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門岛蚤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涤妒,你說我怎么就攤上這事∷希” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵渐逃,是天一觀的道長民褂。 經(jīng)常有香客問我茄菊,道長,這世上最難降的妖魔是什么面殖? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮脊僚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吃挑。我一直安慰自己,他們只是感情好埠通,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布逛犹。 她就那樣靜靜地躺著端辱,像睡著了一般虽画。 火紅的嫁衣襯著肌膚如雪舞蔽。 梳的紋絲不亂的頭發(fā)上码撰,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音朵栖,去河邊找鬼。 笑死陨溅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的门扇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼臼寄,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼溜宽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坑质,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤临梗,失蹤者是張志新(化名)和其女友劉穎稼跳,沒想到半個(gè)月后盟庞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汤善,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年不狮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了在旱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摇零。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桶蝎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出登渣,到底是詐尸還是另有隱情,我是刑警寧澤胜茧,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站呻顽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏芬位。R本人自食惡果不足惜带到,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揽惹。 院中可真熱鬧,春花似錦搪搏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恃疯。三九已至漏设,卻和暖如春今妄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盾鳞。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腾仅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓攒砖,卻偏偏與公主長得像缸兔,于是被迫代替她去往敵國和親吹艇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惰蜜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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