总结了4种“左右固定中间自适应的3栏布局”,强烈参考了张鑫旭的博客
1.左侧左浮动,右侧右浮动
左侧左浮动,右侧右浮动,中间div设置左右margin、宽度自适应,中间一栏必须放在最后
<style>
html, body {margin: 0; padding: 0; height: 100%;}
.col {width: 200px; height: 100%;}
.left.col {float: left; background-color: #03A9F4;}
.right.col {float: right; background-color: #F44336;}
.mid {margin: 0 210px; height: 100%; background-color: #eee;}
</style>
<body>
<div class="right col"></div>
<div class="left col"></div>
<div class="mid"></div>
</body>
2.左右绝对定位
左右绝对定位,中间栏设置左右margin,左中右三栏顺序随意排列都可以
<style>
html, body {margin: 0; height: 100%;}
.col {height: 100%;}
.left,.right {width: 200px; position: absolute;top: 0;}
.left {left: 0; background-color: #03A9F4;}
.right {right: 0; background-color: #F44336;}
.mid {margin: 0 210px; background-color: #ccc;}
</style>
<body>
<div class="left col"></div>
<div class="mid col"></div>
<div class="right col"></div>
</body>
3.全部左浮动
中间部分100%宽度,左浮动;左边部分也左浮动,并且margin-left: -100%;右边部分也是左浮动,margin-left: -200px;中间部分内部包含一个“真正的中间div”,margin: 0 210px”
<style>
html,body {margin: 0; height: 100%;}
.col {height: 100%;}
.left, .right {float: left; width: 200px;}
.left {background-color: #03A9F4; margin-left: -100%;}
.right {background-color: #F44336; margin-left: -200px;}
.mid-container {width: 100%; float: left;}
.mid {background-color: #eee; margin: 0 210px;}
</style>
<body>
<div class="mid-container col">
<div class="mid col"></div>
</div>
<div class="left col"></div>
<div class="right col"></div>
</body>
4.左侧左浮动,右侧绝对定位
方案1和2的结合,能保证DOM结构的顺序是左中右的,并且尽可能少用绝对定位
<style>
html, body {margin: 0; padding: 0; height: 100%;}
.col {height: 100%;}
.left {width: 200px; float: left; background-color: #03A9F4;}
.mid {margin: 0 210px; background-color: #eee;}
.right {width: 200px; position: absolute; top: 0; right: 0; background-color: #F44336;}
</style>
<body>
<div class="left col"></div>
<div class="mid col"></div>
<div class="right col"></div>
</body>
5.左侧左浮动,右侧右浮动,中间元素触发BFC
中间元素设置
overflow: hidden
触发BFC,但是溢出元素将不可见
<style>
html, body {margin: 0; padding: 0; height: 100%;}
.col {width: 200px; height: 100%;}
.left.col {float: left; background-color: #03A9F4; margin-right: 10px;}
.right.col {float: right; background-color: #F44336; margin-left: 10px;}
.mid {height: 100%; background-color: #eee; overflow: hidden;}
</style>
<body>
<div class="right col"></div>
<div class="left col"></div>
<div class="mid"></div>
</body>
END