你们老是听到双飞翼布局和圣杯布局...也不知道是谁取的名字,我就叫三栏布局吧。虽然他们有些细微的区别,但本质上都是实现一个三栏布局,即左右两栏固定,中间自适应。浏览器
网上随便一搜,全是实现方案,少到两三种,多到七八种。各类方法都有优缺点,但我以为比较实用的方法主要就那三四种,由于不少方法实际上是被淘汰的或者说太麻烦(如表格布局)。布局
实现思路:
先将左右两栏进行浮动,左边栏向左浮动,右边栏向右浮动就能固定在两边。可是要注意一点,这种方法要将中间栏放在最后,由于若是将中间栏放在中间,而且没有对自身进行浮动的话,会占据文档中的位置,致使右边栏并不能彻底和左边栏平齐。flex
HTML:spa
<!-- 三栏布局 浮动定位--> <div class="layout"> <header>头部</header> <main> <div class="left">左边栏</div> <div class="right">右边栏</div> <div class="center">中间栏</div> </main> <footer>底部</footer> </div> <!-- 三栏布局 浮动定位-->
SCSS:code
//浮动布局 .layout { color:white; text-align: center; height: 100%; overflow: hidden; header,footer{ width: 100%; height: 70px; background: rgb(202,132,2); } footer { position: absolute; bottom: 0; } main { width: 100%; height: 100%; background: red; .left,.right { width: 300px; height: 100%; background: rgb(14, 214, 171); } .left { float:left; } .right{ float:right; } .center { height:100%; background: rgb(26, 26, 122); } } }
效果:ip
缺点:
浮动元素会脱离文档流,若是在<main>
的内部还有其余元素,有可能会由于父元素的高度塌陷而致使问题。因此要么给父元素设置高度,要么就要清除浮动了。文档
实现思路:
将左右两栏进行绝对定位,固定在左右两边,中间栏经过左右margin距离来适应宽度。一样,这种方法要注意中间栏在HTML结构中的位置,若是中间栏在中间,那么中间栏也要进行绝对定位,若是在最后面则不须要进行绝对定位。it
HTML:io
<!-- 三栏布局 绝对定位--> <div class="layout"> <header>绝对定位方案</header> <main> <div class="left">左边栏</div> <div class="right">右边栏</div> <div class="center">中间栏</div> </main> <footer>底部</footer> </div> <!-- 三栏布局 绝对定位-->
SCSS:class
// 绝对定位布局 .layout { color:white; text-align: center; height: 100%; overflow: hidden; header,footer{ width: 100%; height: 60px; background: rgb(202,132,2); } footer { position: absolute; bottom: 0; } main { width: 100%; height: 100%; background: red; position: relative; .left,.right{ position: absolute; width: 300px; height: 100%; background: rgba(100, 96, 87,0.5); } .left { left:0 } .right { right:0; //top:0; } .center { height: 100%; margin:auto 300px; left:0; right:0; background: blue; } } }
效果:
缺点:
绝对定位一样会脱离文档流,若是其余元素位置有要求的话,须要继续设置定位。
实现思路:
弹性布局十分简单,给最外层的父级元素设置为弹性盒子,而后设置两端对齐,中间栏的宽度设为100%便可。
HTML:
<!-- 三栏布局 flex布局--> <div class="layout"> <header>flex方案</header> <main> <div class="left">左边栏</div> <div class="center">中间栏</div> <div class="right">右边栏</div> </main> <footer>底部</footer> </div> <!-- 三栏布局 flex布局-->
SCSS:
//flex布局 .layout { color:white; text-align: center; height: 100%; overflow: hidden; header,footer{ width: 100%; height: 60px; background: rgb(202,132,2); text-align: center; } footer { position: absolute; bottom: 0; } main { width: 100%; height: 100%; background: red; display:flex; justify-content: space-between; .left,.right { width: 300px; height: 100%; background: rgb(18, 157, 167); } .center { width: 100%; height:100%; background: blue; } } }
效果:
缺点:flex是CSS3才有的,浏览器兼容性最低到IE8。