假设高度已知,请写出三栏布局,其中左栏、右栏各为 300px,中间自适应。
基础框架
1 | <article class="box"> |
公共样式
1 | html * { |
几种解法
1.1 浮动方案
1 | .float .left { |
注:当内容过多时,超出的内容会出现在左边栏下边,创建 BFC 可以解决这个问题。
1.2 绝对定位
1 | .absolute > div { |
1.3 Flexbox
1 | .flexbox { |
1.4 表格
1 | .table { |
1.5 grid
1 | .grid { |
解法的优缺点及比较
- 浮动方案
优点:兼容性好
缺点:脱离文档流,需要清除浮动,处理周边元素关系。可使用性比较差
- 绝对定位方案
优点:快捷
缺点:脱离文档流
- flexbox 方案
优点:解决了以上两种方案的问题
缺点:不兼容低版本浏览器
- 表格方案
优点:兼容性好
缺点:三栏同时增高
- grid 方案
优点:方便易用
缺点:兼容性
如果高度未知或内容超出,浮动方案、绝对定位方案和 grid 方案将不再适用。
延伸问题
三栏布局
- 左右宽度固定,中间自适应
- 上下高度固定,中间自适应
两栏布局
- 左宽度固定,右自适应
- 右宽度固定,左自适应
- 上高度固定,下自适应
- 下高度固定,上自适应