CSS 两栏布局

解释 CSS 两栏布局的常见实现方案及其适用场景。

#tech / dev / frontend #type / concept #status / growing #resource / css

[!info] related notes

CSS 两栏布局

这篇笔记回答一个问题:如何实现左侧固定宽度、右侧自适应的两栏布局。

一句话定义

两栏布局指页面分为两列,其中一列宽度固定,另一列自动填充剩余空间。

核心方案

1. Flex 布局(推荐)

最现代、最直观的方案。

.container {
  display: flex;
}
.left {
  width: 200px;
  flex-shrink: 0;
}
.right {
  flex: 1;
}

优点:语义清晰,代码简洁,兼容性好。面试首选。

2. BFC + float

左侧 float 脱离文档流,右侧通过 overflow: hidden 触发 BFC 形成独立区域。

.left {
  float: left;
  width: 200px;
}
.right {
  overflow: hidden;
}

优点:兼容老浏览器。缺点:语义不够直观。

3. calc 计算

右侧宽度用 calc(100% - 固定宽度) 计算。

.left {
  float: left;
  width: 200px;
}
.right {
  width: calc(100% - 200px);
  float: left;
}

优点:直观。缺点:需要知道固定宽度具体值。

4. Grid 布局

.container {
  display: grid;
  grid-template-columns: 200px 1fr;
}

优点:代码最少,二维布局能力强。缺点:兼容性不如 Flex。

常见边界

  • 左侧内容超出固定宽度时需要 overflow: hidden 或 text-overflow 处理
  • 移动端通常需要改为单栏堆叠(媒体查询)
  • 如果两侧都需要自适应比例,Grid 更合适

最小例子

<div class="container">
  <div class="left">固定 200px</div>
  <div class="right">自适应剩余空间</div>
</div>
.container { display: flex; }
.left { width: 200px; flex-shrink: 0; }
.right { flex: 1; }
创建于 2026/4/3 更新于 2026/5/27