圣杯布局和双飞翼布局的目的都是:左右两栏固定宽度,中间部分自适应;
圣杯布局
圣杯布局HTML:
<div class="wrap"> <div class="main"> 我是主要 </div> <div class="left"> 我是左边 </div> <div class="right"> 我是右边 </div></div>
圣杯布局CSS:
* { margin: 0; padding: 0}.main { background-color: yellow; height: 100px; float: left; width: 100%;}.left { background-color: red; width: 200px; height: 100px; float: left; margin-left: -100%; /*margin负边距*/ position: relative; /*相对自身偏移*/ left: -200px; }.right { background-color: blue; width: 200px; height: 100px; float: left; margin-left: -200px; /*margin负边距*/ position: relative; /*相对自身偏移*/ right: -200px; }.wrap { padding: 0 200px; /*父级设置padding*/}
圣杯布局的优点:
使主要内容列先加载。
允许任何列是最高的。
没有额外的div。
需要的hack很少。
双飞翼布局
双飞翼HTML
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8"/> <title> 双飞翼布局 </title> <link rel="stylesheet" href="main.css"/> </head> <body> <div class="main-wrap"> <!-- 把main嵌套在一个div里面 --> <div class="main"> 我是主要 </div> </div> <div class="left"> 我是左边 </div> <div class="right"> 我是右边 </div> </body></html>
双飞翼CSS
.main-wrap { float: left; width: 100%;}.main { height: 100px; margin-left: 200px; /*利用左、右外边距定位*/ margin-right: 200px; background-color: yellow;}.left { background-color: red; width: 200px; height: 100px; float: left; margin-left: -100%;}.right { background-color: blue; width: 200px; height: 100px; float: left; margin-left: -200px;}
圣杯布局和双飞翼的比较:
1.两种布局都是把主要内容放在前面加载;
2.布局有相似之处,都使用了负外边距来布局;
3.不同:
圣杯布局是设置 父容器的padding值、相对定位来实现;
双飞翼布局是给main添加了一个div容器、设置main的左右外边距 来实现;