各類各樣的佈局,無非就是用了浮動 float,負邊距,相對定位,經過這三者的巧妙組合跟拼湊來實現的。用好這些,佈局就會很簡單。html
還沒學會佈局時,就聽到有聖盃佈局和雙飛翼佈局,這佈局都有這麼風騷的名字,就以爲很酷,事實也如此,瞭解了聖盃佈局和雙飛翼佈局,才發現挺深奧的。瀏覽器
傳統的佈局中,當咱們須要改變兩欄的互換,就會很麻煩。由於還要涉及到 HTML 代碼的修改,不能徹底從 CSS 上更改,這叫 HTML 和 CSS 的耦合。而聖盃佈局跟雙飛翼佈局就是可以不考慮主體的位置,可以只經過 CSS 代碼就改變相應的佈局,這也是優勢之一。佈局
2、聖盃佈局spa
試試這樣的 HTML 結構3d
<div class="header">header</div> <div class="container"> <div class="main">main</div> <div class="sub">sub</div> <div class="extra">extra</div> </div> <div class="footer">footer</div>
給它加上些 CSScode
body{ margin: 0; padding: 0; font-size: 1.5em; font-weight: bold; min-width: 500px;} .header,.footer{ text-align: center;} .header{ height: 50px; background-color: #76ffff;} .footer{ height: 50px; background-color: #ff7676;} .main{ background-color: #666;} .sub{ background-color: #44fa44;} .extra{ background-color: #3dbdff;} /*start*/ .main{ width: 100%; float: left; } .sub{ width: 100px; float: left; margin-left: -100%; } .extra{ width: 200px; float: left; margin-left: -200px; } .container{ overflow: hidden;//BFC,撐高高度 }
結果以下:htm
會發現,main的位置不正確,因此再給它加上 padding: 0 200px 0 100px;blog
雖然 main 的位置正確了,但是 sub 和 extra 位置優勢不對,因此咱們再用上相對定位,爲 sub 和 extra 加上以下代碼:get
.sub{ position: relative;; left: -100px; } .extra{ position: relative; right: -200px; }
效果就出來了,it
噢耶,這就是聖盃佈局。若是在聖盃佈局的基礎上,給它一個多餘的標籤,把 mian 包起來,這就是雙飛翼佈局。
2、雙飛翼佈局
HTML結構:
<div class="header">header</div> <div class="container"> <div class="main"> <div class="main-wrap">main</div> </div> <div class="sub">sub</div> <div class="extra">extra</div> </div> <div class="footer">footer</div>
CSS結構:
body{ margin: 0; padding: 0; font-size: 1.5em; font-weight: bold; min-width: 500px;} .header,.footer{ text-align: center;} .header{ height: 50px; background-color: #76ffff;} .footer{ height: 50px; background-color: #ff7676;} .main{ background-color: #666;} .sub{ background-color: #44fa44;} .extra{ background-color: #3dbdff;} /*start*/ .main{ width: 100%; height: 100px; float: left; } .sub{ width: 100px; height: 100px; float: left; margin-left: -100%; } .extra{ width: 200px; height: 100px; float: left; margin-left: -200px; } .main-wrap{ margin: 0 200px 0 100px; } .container{ height: 100px; overflow: hidden; *zoom: 1; }
能夠看到,只要爲包住 main-wrap 設置 margin,連相對定位都沒用到,效果就出來了。
若是把三欄佈局比做一隻大鳥,能夠把main當作是鳥的身體,sub和extra則是鳥的翅膀。這個佈局的實現思路是,先把最重要的身體部分放好,而後再將翅膀移動到適當的地方。所以請允許我給這個佈局實現取名爲雙飛翼佈局(Flying Swing Layout).
就如上圖中的鳥有各類姿式同樣,利用雙飛翼佈局,咱們也能夠實現各類佈局。這裏有個嘗試頁面,利用雙飛翼,實現了一套柵格化佈局系統。
優勢:
缺點: