TUTORIAL

CSS Grid 网格布局深度解析

CSS Grid 网格布局深度解析

CSS Grid 网格布局深度解析

如果说 Flexbox 解决的是一维排列,那么 CSS Grid 解决的就是二维布局。企业官网常见的"顶部导航 + 左侧栏 + 主内容 + 右侧推荐 + 页脚"结构,用 Grid 几行代码就能精确划分,无需嵌套多层 div。本篇带你系统理解 Grid 的轨道、区域与响应式写法。

一、Grid 与 Flexbox 的定位差异

Flexbox 是一维的,一次只控制一个方向(行或列);Grid 是二维的,能同时控制行和列。这决定了它们的使用场景:组件内部的一行按钮、一条导航用 Flex;而整页骨架、需要行列对齐的复杂区域用 Grid。

打个比方,Flexbox 像"流水线",元素一个个排过去;Grid 像"棋盘",你可以精确指定每个元素落在第几行第几列。在尧图建站的项目里,我们通常用 Grid 搭页面主框架,用 Flex 处理组件内排列,两者配合覆盖 95% 以上的布局需求。

二、定义网格轨道与区域

开启 Grid 只需 display: grid。真正强大的是 grid-template-columnsgrid-template-rows,它们定义网格的轨道。最实用的单位是 fr(fraction,比例单位),它按比例分配剩余空间,比百分比更智能。

.layout {
  display: grid;
  /* 三列:侧栏 240px / 主区域自适应 / 推荐栏 300px */
  grid-template-columns: 240px 1fr 300px;
  /* 行:头部 80px / 主体自适应 / 页脚 100px */
  grid-template-rows: 80px 1fr 100px;
  gap: 20px;
  min-height: 100vh;
}

更直观的写法是"区域命名"(grid-template-areas)。你用字符串"画"出布局图,再把元素映射到对应区域,代码即设计稿,可读性极强,后期调整结构只需改字符串。

.layout {
  display: grid;
  grid-template-columns: 240px 1fr 300px;
  grid-template-rows: 80px 1fr 100px;
  grid-template-areas:
    "header header header"
    "side   main   rec"
    "footer footer footer";
  gap: 20px;
}
.header { grid-area: header; }
.side   { grid-area: side; }
.main   { grid-area: main; }
.rec    { grid-area: rec; }
.footer { grid-area: footer; }

三、实战:响应式企业官网主布局

Grid 的响应式可以非常优雅。借助 auto-fitminmax(),能让卡片网格在任何宽度下自动排列,无需写一堆媒体查询。repeat(auto-fit, minmax(260px, 1fr)) 的含义是:"每列最小 260px、最大等分,能放几列放几列"。

.case-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 24px;
}

对于整体页面框架的响应式,则用媒体查询切换 grid-template-areas。桌面端三列,平板端两列(隐藏推荐栏),手机端单列堆叠,只需改一处定义即可。

@media (max-width: 900px) {
  .layout {
    grid-template-columns: 1fr;
    grid-template-areas:
      "header"
      "main"
      "footer";
  }
  .side, .rec { display: none; }
}

掌握 Grid 后你会发现,很多过去需要框架栅格系统才能实现的复杂布局,现在原生 CSS 几行就能搞定。建议从"区域命名"入手,先把企业官网的主框架用 Grid 重写一遍,体会二维布局的简洁与精确。

返回教程列表