圣杯布局和双飞翼布局都是为了实现三栏布局,两边的黑子宽度固定,中间盒子自适应,其中,中间栏放到文档流前面,保证先行渲染。
需要先了解负边距即负margin的作用,文末其相关的资料链接。
圣杯布局
圣杯布局的出现是来自于a list part上的一篇文章In Search of the Holy Grail。比起双飞翼布局,它的起源不是源于对页面的形象表达。在西方,圣杯是表达“渴求之物”的意思。
思路:
1.HTML结构,分为主内容区域,左边区域和右边区域。注意主内容区域要写在左边区域和右边区域的前面,因为主内容区域要优先渲染。
|
|
2.将三者都float:left
,再加一个position:relative
(相対定位后面会用到),高度设为200px(可自己自定义高度),
3.主区域内容宽度设为100%占满:width:100%;
。
4.给左边区域一个固定宽度,将其拉到最左边:width:300px; margin-left:-100%;
。
5.给右边区域一个固定宽度,将其拉到最右边:width:200px; margin-left:-200px;
。
现在的效果如图所示:
可以发现主区域的文字被左边区域覆盖。这个不难解释,我们继续设置:
6. 外围的container区域加上:padding:0 220px 0 320px;
7. 左边区域使用相対定位:left: -200px;
,同理右边区域使用相対定位:right: -300px;
最终的样式表
最终效果如图所示:
双飞翼布局
听说双飞翼布局是玉伯提出来的,是对圣杯布局的一种改进。
1. HTML结构,注意和圣杯布局的不同
|
|
2. 将主区域,左边区域和右边区域都float:left
。
3.主区域内容宽度设为100%占满:width:100%;
。
4.给左边区域一个固定宽度,将其拉到最左边:width:300px; margin-left:-100%;
。
5.给右边区域一个固定宽度,将其拉到最右边:width:200px; margin-left:-200px;
。
第3步到第5步和圣杯布局一模一样。
6. 发现主区域内容被覆盖,除了使用外围的padding,还可以使用margin。给主区域增加一个内层容器center, center容器设置为margin: 0 320px 0 220px;
最终的样式表:
最终效果图:
总结
- 其实圣杯布局和双飞翼思路差不多,解决方案大体相同,都是三栏全部float:left浮动,区别在于解决中间栏div的内容不被遮挡上。
- 圣杯布局是中间栏在添加相对定位,并配合left和right属性,效果上表现为三栏是单独分开的(如果可以看到空隙的话)。
- 而双飞翼布局是在中间栏的div中嵌套一个div,内容写在嵌套的div里,然后对嵌套的div设置margin-left和margin-right,效果上表现为左右两栏在中间栏的上面,中间栏还是100%宽度,只不过中间栏的内容通过margin的值显示在中间。
参考链接: