教程3 min read

CSS Grid 布局完全指南

CSS Grid 简介

CSS Grid 是一个二维布局系统,可以同时处理行和列,是创建复杂网页布局的最佳选择。

与 Flexbox 不同,Grid 可以同时控制两个方向的布局,这使得它非常适合创建页面级别的布局。

基础概念

定义网格

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: auto;
  gap: 20px;
}

网格项

.item {
  grid-column: 1 / 3; /* 跨越 2 列 */
  grid-row: 1 / 2;
}

常见布局模式

1. 圣杯布局

经典的三栏布局:

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

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

2. 卡片网格

响应式卡片布局:

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

3. 响应式网格

自动适应屏幕大小:

.responsive-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 16px;
}

高级技巧

1. 命名网格线

.container {
  display: grid;
  grid-template-columns:
    [sidebar-start] 250px
    [sidebar-end content-start] 1fr
    [content-end];
}

2. 隐式网格

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: minmax(100px, auto);
}

3. 对齐方式

.container {
  display: grid;
  justify-items: center; /* 水平对齐 */
  align-items: center; /* 垂直对齐 */
  place-items: center; /* 简写 */
}

Grid vs Flexbox

特性 Grid Flexbox
维度 二维 一维
布局 行和列 行或列
用途 整体布局 组件布局
对齐 强大 灵活

实战示例

仪表板布局

.dashboard {
  display: grid;
  grid-template-columns: 250px 1fr 300px;
  grid-template-rows: 60px 1fr;
  grid-template-areas:
    "sidebar header  header"
    "sidebar content widgets";
  height: 100vh;
}

图片画廊

.gallery {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  grid-auto-rows: 200px;
  grid-auto-flow: dense;
}

.gallery-item.featured {
  grid-column: span 2;
  grid-row: span 2;
}

浏览器支持

CSS Grid 在现代浏览器中支持良好:

  • Chrome 57+
  • Firefox 52+
  • Safari 10.1+
  • Edge 16+

总结

CSS Grid 是现代网页布局的利器。它让复杂的布局变得简单,响应式设计变得直观。掌握 Grid,你的布局能力将提升一个档次。