圣杯布局图解
圣杯布局和双飞翼布局实现的问题都是三列布局,两边定宽,中间自适应布局,中间栏要在放在文档流前面以优先渲染。
1、给middle部分设 width:100%,给left、right设宽度,三者都 float:left。
2、给外面最大的块all设左右padding,把middle拉出来,这样left和right去了自己的位置之后就不会把middle内容盖住了。
3、因为middle宽度为100%,left应该在最左边所以往左拉宽度100%(margin-left:-100%),而right只需要往回拉自己的宽度大小就可以(margin-left: number px)。这样就在一行了。
4、最后left和right还盖着我middle的位置,再把他们拉回刚开始腾出来的位置就好了。(给left和right加相对定位position:relative之后,设left的left为负的它的宽,设right的right为right负的它的宽。)ok,over!
思路就是这样,按这个思路的middle需要布局在最前面(中间栏重要的东西)要在放在文档流前面以优先渲染。,依次是left和right。你也可以根据自己的需要更改布局,对应的更改样式。
圣杯布局和双飞翼布局的区别:
解决”中间栏div内容不被遮挡“问题的思路不一样:
- 圣杯布局
为了中间div内容不被遮挡,将中间div设置了左右padding-left和padding-right后,将左右两个div用相对布局position: relative并分别配合right和left属性,以便左右两栏div移动后不遮挡中间div。 - 双飞翼布局
为了中间div内容不被遮挡,直接在中间div内部创建子div用于放置内容,在该子div里用margin-left和margin-right为左右两栏div留出位置。
多了1个div,少用大致4个css属性(圣杯布局中间div的padding-left和padding-right这2个属性,加上左右两个div用相对布局position: relative及对应的right和left共4个属性,一共6个;而双飞翼布局子div里用margin-left和margin-right共2个属性,6-2=4),个人感觉双飞翼布局思路更直接和简洁一点。