场景: 假设高度已知, 请写出三栏布局, 其中左、右栏宽度各为 300 px, 中间自适应。本文针对这种场景罗列出以下几种方案。
<body><style>.left {float: left;background: red;width: 300px;}.middle {background: purple;}.right {float: right;background: green;width: 300px;}</style><div class="left">float layout</div><div class="right">float layout</div><div class="middle">float layout</div></body>
float 布局要注意
class="middle"
这行书写的位置
<body><style>.left {background: red;position: absolute;left: 0;width: 300px;}.middle {position: absolute;left: 300px;right: 300px;background: purple;}.right {background: green;position: absolute;right: 0;width: 300px;}</style><div class="left">position layout</div><div class="middle">position layout</div><div class="right">position layout</div></body>
<style>.flexbox {display: flex;}.left {background: red;width: 300px;}.middle {flex: 1;background: purple;}.right {background: green;width: 300px;}</style><section class="flexbox"><div class="left">flex layout</div><div class="middle">flex layout</div><div class="right">flex layout</div></section>
flex 布局是兼容性较好的布局
<body><style>.gridbox {display: grid;grid-template-columns: 300px auto 300px;}.left {background: red;}.middle {background: purple;}.right {background: green;}</style><section class="gridbox"><div class="left">grid layout</div><div class="middle">grid layout</div><div class="right">grid layout</div></section></body>
使用 grid 目前记住
columns-template-rows
和columns-template-columns
<body><style>.tablebox {display: table;width: 100%;}.left {display: table-cell;background: red;width: 300px;}.middle {display: table-cell;background: purple;}.right {display: table-cell;background: green;width: 300px;}</style><section class="tablebox"><div class="left">table layout</div><div class="middle">table layout</div><div class="right">table layout</div></section></body>
table 布局也是和 flex 布局一样兼容性较高的方案
针对两边宽度固定, 中间宽度自适应还有以下两种方案:
核心思想: 将内容两边宽度提前空出来, 然后将块级元素进行移动填补
。
<body><style>.bd {padding: 0 200px 0 200px;}.main {float: left;width: 100%;height: 200px;background-color: #ddd;}.left {float: left;width: 200px;height: 200px;background-color: #da4242;/* 产生布局效果的属性 */margin-left: -100%;position: relative;left: -200px;}.right {float: left;width: 200px;height: 200px;background-color: #4ddef1;/* 产生布局效果的属性 */margin-left: -200px;position: relative;left: 200px;}</style><div class="bd"><div class="main">main</div><div class="left">left</div><div class="right">right</div></div></body>
核心思想: 将内容宽度占满父容器, 然后将块级元素进行移动覆盖
。
<body><style>.main {float: left;width: 100%;height: 200px;background-color: #ddd;}.left {float: left;width: 200px;height: 200px;background-color: #da4242;/* 产生布局效果的属性 */margin-left: -100%;}.right {float: left;width: 200px;height: 200px;background-color: #4ddef1;/* 产生布局效果的属性 */margin-left: -200px;}</style><div class="main"></div><div class="left">left</div><div class="right">right</div></body>