前一篇布局总结里,提过用flex布局实现圣杯布局。下面说下这两种布局区别。
圣杯布局和双飞翼布局解决的问题差不多,都是左右两栏固定,中间自适应的三栏布局。中间一栏要放在前面,优先渲染。
不同在于解决”中间栏div
内容不被遮挡“问题的思路不一样:
1、圣杯布局 给中间 div 设置了 padding-left padding-right 后, 左右div 要用相对位置position:relative 并分别配合right
和left
属性,以便左右两栏div移动后不遮挡中间div。
2、双飞翼为了中间div
内容不被遮挡,直接在中间div内部创建子div用于放置内容,
少用大致4个css属性(圣杯布局中间 div padding-left和padding-right 这2个属性,加上左右两个div用相对布局position:relative 及对应的right和left共4个属性。
简单说起来就是 ”双飞翼布局比圣杯布局多创建了一个div,但不用相对布局了。
下面是代码
圣杯
<style> *{ padding: 0; margin: 0; } .header,.footer { width: 100%; height: 30px; background: red; } .content { overflow: hidden; /* 创建一个BFC,清除浮动 */ padding: 0 100px; } .middle,.left,.right{ float: left; height: 80px; } .middle { width: 100%; background: green; } .left { position:relative; /* 相对定位 */ width: 100px; left:-100px; /* 使左边的框挨着浏览器的最左边 */ margin-left: -100%; /* 使左边的框跑到上一行的最左边 */ background: yellow; } .right { position:relative; /* 相对定位 */ width: 100px; right:-100px; /* 使右边的框挨着浏览器的最右边 */ margin-left: -100px; /* 使右边的框跑到上一行的最右边 */ background: pink; } </style> <div class="header"></div> <div class="content"> <div class="middle"></div> <div class="left"></div> <div class="right"></div> </div> <div class="footer"></div>
双飞翼
<style> *{ padding: 0; margin: 0; } .header,.footer { width: 100%; height: 30px; background: red; } .content { overflow: hidden; } .inner-middle,.left,.right{ height: 80px; } .middle { width: 100%; background: green; float: left; } .inner-middle{ width:100%; background: green; } .left { width: 100px; float: left; margin-left: -100%; background: yellow; } .right { width: 100px; float: left; margin-left: -100px; background: pink } </style> <div class="header"></div> <div class="content"> <div class="middle"> <div class="inner-middle"></div> </div> <div class="left"></div> <div class="right"></div> </div> <div class="footer"></div>
看实现的效果是相同的