CSS Grid 布局完全指南

从基础到进阶,全面掌握 CSS Grid 布局系统,包含大量实用示例和实战技巧

2024-04-05

Grid 基础

CSS Grid 是一个二维布局系统,可以同时处理行和列。

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
}

关键概念

1. 网格容器和网格项

<div class="grid-container">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
</div>
.grid-container {
  display: grid;
}

2. fr 单位

fr 代表 fraction(分数),是 Grid 特有的单位:

.container {
  grid-template-columns: 1fr 2fr 1fr;
}

3. repeat() 函数

.container {
  grid-template-columns: repeat(4, 1fr);
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
}

常见布局模式

圣杯布局

.layout {
  display: grid;
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header header header"
    "sidebar main aside"
    "footer footer footer";
  min-height: 100vh;
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.aside { grid-area: aside; }
.footer { grid-area: footer; }

响应式卡片网格

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 1.5rem;
}

Grid 对齐

.container {
  justify-items: center;    /* 水平对齐 */
  align-items: center;      /* 垂直对齐 */
  justify-content: center;  /* 容器内对齐 */
}

实战技巧

  1. 使用 grid-template-areas 创建直观的布局
  2. 配合 minmax() 实现响应式
  3. 使用 subgrid 实现嵌套对齐(Firefox 支持)

总结

CSS Grid 是现代网页布局的利器。掌握它之后,你可以轻松实现之前需要大量 hack 才能完成的布局效果。

"Grid 是布局,Flexbox 是内容。" — 布局黄金法则