目录

CSS Grid布局完全指南

CSS Grid 是最强大的二维布局系统,让复杂的网页布局变得简单直观。

基本概念

Grid 布局分为容器(Container)和项目(Item)两个层面:

css
.container {
  display: grid;
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: auto 1fr auto;
  gap: 20px;
  height: 100vh;
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }

定义网格

固定与弹性轨道

css
.grid {
  display: grid;
  /* 固定宽度 */
  grid-template-columns: 200px 300px;

  /* fr 单位按比例分配 */
  grid-template-columns: 1fr 2fr 1fr;

  /* repeat 函数 */
  grid-template-columns: repeat(3, 1fr);

  /* auto-fill 自动填充 */
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));

  /* 混合使用 */
  grid-template-columns: 200px 1fr 1fr;
}

minmax 和 auto-fit

css
/* 响应式卡片网格,无需媒体查询 */
.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 24px;
}

网格区域

css
.layout {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: 60px 1fr 40px;
  grid-template-areas:
    "header header"
    "sidebar content"
    "footer footer";
  min-height: 100vh;
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }

项目定位

css
.item-a {
  /* 按线号定位 */
  grid-column: 1 / 3;
  grid-row: 1 / 2;
}

.item-b {
  /* 跨越指定数量 */
  grid-column: span 2;
}

.item-c {
  /* 使用区域名 */
  grid-area: content;
}

.item-d {
  /* 命名网格线 */
  grid-column: main-start / main-end;
}

对齐方式

css
.container {
  /* 容器级别对齐 */
  justify-items: center;   /* 水平对齐 */
  align-items: center;     /* 垂直对齐 */
  place-items: center;     /* 简写 */

  justify-content: space-between;  /* 网格整体水平 */
  align-content: center;           /* 网格整体垂直 */
}

.item {
  /* 项目级别对齐 */
  justify-self: end;
  align-self: start;
}

实战:圣杯布局

css
.holy-grail {
  display: grid;
  grid-template:
    "header header header" auto
    "nav    main   aside"  1fr
    "footer footer footer" auto
    / 200px 1fr 200px;
  min-height: 100vh;
  gap: 16px;
}

/* 响应式:小屏隐藏侧边栏 */
@media (max-width: 768px) {
  .holy-grail {
    grid-template:
      "header" auto
      "main"   1fr
      "footer" auto
      / 1fr;
  }
  .nav, .aside { display: none; }
}

gap 间距

css
.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);

  /* 行列间距 */
  row-gap: 20px;
  column-gap: 16px;

  /* 简写 */
  gap: 20px 16px;
}

总结

CSS Grid 是处理二维布局的最佳工具。fr 单位、auto-fit/minmax 实现响应式无需媒体查询,grid-template-areas 让布局像画画一样直观。结合 Flexbox(一维布局),几乎可以完成任何网页布局需求。