左右兩側寬度固定,中間自適應這種佈局相信不少feers都遇到過,但是有可能你沒有系統的研究過有哪幾種解決方案,本文章立志以淺顯的語言來說解其中一種聖盃解決方案。css
通常咱們在寫這種三列布局時但願中間主體部分優先渲染,所以在html中把main部分提到left和right前面。html
如下代碼實現由淺入深,一點一點實現,但願初學前端的同窗或者比較薄弱的同窗能夠比較容易看懂,若是是對這種佈局已經比較熟悉的同窗直接看最後的實現代碼吧。前端
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JS Bin</title> <style type="text/css"> .left, .middle, .right{ float: left; min-height: 100px; } body { margin: 0; } .middle { width: 100%; background: red; } .left { width: 200px; background: green; } .right { width: 220px; background: blue; } </style> </head> <body> <div class="container"> <div class="middle">main</div> <div class="left">left</div> <div class="right">right</div> </div> </body> </html>
以上代碼由於main的寬度是100%撐滿了整個頁面,後面浮動的掉到了下面,能夠設置-margin-left把left和right位置重排。設置left的margin-left: -100%,left頂到了container左上,那麼right移動到left原來的位置,再將right的margin-left設置爲-自己寬度,left和right的位置就定位好了佈局
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JS Bin</title> <style type="text/css"> .left, .middle, .right{ float: left; min-height: 100px; } body { margin: 0; } .middle { width: 100%; background: red; } .left { width: 200px; background: green; margin-left: -100%; } .right { width: 220px; background: blue; margin-left: -220px; } </style> </head> <body> <div class="container"> <div class="middle">main</div> <div class="left">left</div> <div class="right">right</div> </div> </body> </html>
以上代碼實現有個問題就是main扔充滿整個container被left遮擋,經過設置container的左右padding爲left和right留空間,再用relative屬性偏到正確的位置上spa
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>JS Bin</title> <style type="text/css"> .left, .middle, .right{ float: left; min-height: 100px; } body { margin: 0; } .container { padding: 0 220px 0 200px; overflow: hidden; } .middle { width: 100%; background: red; } .left { width: 200px; background: green; margin-left: -100%; position: relative; left: -200px; } .right { width: 220px; background: blue; margin-left: -220px; position: relative; left: 220px; } </style> </head> <body> <div class="container"> <div class="middle">main</div> <div class="left">left</div> <div class="right">right</div> </div> </body> </html>
雙飛翼佈局和聖盃佈局其實很想,只是在解決container 100%遮擋問題上解決不一樣,雙飛翼使用的是內嵌div設置margin來縮小main內容區寬度code
以上聖盃和雙飛翼佈局有問題或者哪裏說的不對但願你們多多指正。htm