项目中常见布局方式

55 阅读3分钟

1. 三栏布局

三栏布局通常指左右两栏固定宽度,中间栏自适应宽度的布局。

方法一:Flexbox 实现

html

<div class="container">
  <div class="left">左侧栏</div>
  <div class="center">中间内容</div>
  <div class="right">右侧栏</div>
</div>

css

.container {
  display: flex;
  min-height: 200px;
}

.left {
  width: 200px;
  background-color: #f0f0f0;
}

.center {
  flex: 1;
  background-color: #e0e0e0;
}

.right {
  width: 200px;
  background-color: #f0f0f0;
}

方法二:Grid 实现

css

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

.left {
  background-color: #f0f0f0;
}

.center {
  background-color: #e0e0e0;
}

.right {
  background-color: #f0f0f0;
}

方法三:浮动实现

css

.container {
  overflow: hidden; /* 清除浮动 */
}

.left {
  float: left;
  width: 200px;
  background-color: #f0f0f0;
}

.right {
  float: right;
  width: 200px;
  background-color: #f0f0f0;
}

.center {
  margin: 0 200px;
  background-color: #e0e0e0;
}

2. 圣杯布局

圣杯布局是一种特殊的三栏布局,特点是:

  • 中间栏优先渲染(HTML结构中放在前面)
  • 三栏等高
  • 中间栏自适应宽度

实现方案:

html

<div class="container">
  <div class="center">中间内容</div>
  <div class="left">左侧栏</div>
  <div class="right">右侧栏</div>
</div>

css

.container {
  padding: 0 200px; /* 为左右栏预留空间 */
  min-height: 200px;
  overflow: hidden; /* 清除浮动 */
}

.center {
  float: left;
  width: 100%;
  background-color: #e0e0e0;
}

.left {
  float: left;
  width: 200px;
  margin-left: -100%; /* 移动到上一行的最左侧 */
  position: relative;
  left: -200px; /* 再向左移动自身宽度 */
  background-color: #f0f0f0;
}

.right {
  float: left;
  width: 200px;
  margin-left: -200px; /* 直接移动到右侧预留位置 */
  position: relative;
  right: -200px; /* 再向右移动自身宽度 */
  background-color: #f0f0f0;
}

现代实现(使用 Flexbox)

html

<div class="holy-grail">
  <div class="center">中间内容</div>
  <div class="left">左侧栏</div>
  <div class="right">右侧栏</div>
</div>

css

.holy-grail {
  display: flex;
  min-height: 200px;
}

.center {
  flex: 1;
  order: 2; /* 中间栏在视觉上的顺序 */
  background-color: #e0e0e0;
}

.left {
  width: 200px;
  order: 1; /* 左侧栏在视觉上的顺序 */
  background-color: #f0f0f0;
}

.right {
  width: 200px;
  order: 3; /* 右侧栏在视觉上的顺序 */
  background-color: #f0f0f0;
}

现代实现(使用 Grid)

css

.holy-grail {
  display: grid;
  grid-template-columns: 200px 1fr 200px;
  grid-template-areas: "left center right";
  min-height: 200px;
}

.center {
  grid-area: center;
  background-color: #e0e0e0;
}

.left {
  grid-area: left;
  background-color: #f0f0f0;
}

.right {
  grid-area: right;
  background-color: #f0f0f0;
}

3. 双飞翼布局

双飞翼布局是圣杯布局的另一种实现,解决了一些兼容性问题:

html

<div class="container">
  <div class="center">
    <div class="center-content">中间内容</div>
  </div>
  <div class="left">左侧栏</div>
  <div class="right">右侧栏</div>
</div>

css

.container {
  min-height: 200px;
  overflow: hidden;
}

.center {
  float: left;
  width: 100%;
  background-color: #e0e0e0;
}

.center-content {
  margin: 0 200px; /* 为左右栏预留空间 */
}

.left {
  float: left;
  width: 200px;
  margin-left: -100%;
  background-color: #f0f0f0;
}

.right {
  float: left;
  width: 200px;
  margin-left: -200px;
  background-color: #f0f0f0;
}

总结对比

布局方式优点缺点适用场景
浮动布局兼容性好需要清除浮动,代码复杂传统项目,需要兼容老浏览器
Flexbox代码简洁,灵活IE10+现代项目,需要灵活布局
Grid二维布局能力强IE10+(部分特性)复杂网格布局
圣杯布局中间栏优先加载实现复杂需要SEO优化的项目
双飞翼布局兼容性好HTML结构稍复杂传统项目,需要中间栏优先

推荐:在现代项目中,优先使用 Flexbox 或 Grid 实现,它们代码更简洁、维护性更好。