六维教程

Tailwind CSS 布局:Grid

上一篇讲了适合一维排布的 Flexbox。本篇讲 Grid,它适合二维布局,能同时控制行和列,比如图片墙、卡片网格、后台仪表盘。

定义网格容器

创建网格容器

给元素加 grid 即可让它成为网格容器。之后用 grid-cols-* 指定列数。

<div class="grid grid-cols-3 gap-4">
  <div class="p-4 bg-blue-100">1</div>
  <div class="p-4 bg-blue-100">2</div>
  <div class="p-4 bg-blue-100">3</div>
  <div class="p-4 bg-blue-100">4</div>
</div>

grid-cols-1 到 grid-cols-12 是常用预设。子项会自动从左到右、从上到下填充格子。

列与行

除了列,还可以用 grid-rows-* 显式设定行数。

<div class="grid grid-cols-2 grid-rows-2 gap-3">
  <div class="p-4 bg-green-100">A</div>
  <div class="p-4 bg-green-100">B</div>
  <div class="p-4 bg-green-100">C</div>
  <div class="p-4 bg-green-100">D</div>
</div>

任意值列宽

预设列数不够用时,可以用方括号写任意值,Tailwind v4 支持 grid-cols-[...]。

<div class="grid grid-cols-[200px_1fr_1fr] gap-4">
  <div class="p-4 bg-yellow-100">侧栏</div>
  <div class="p-4 bg-yellow-100">主区</div>
  <div class="p-4 bg-yellow-100">右区</div>
</div>

这里第一列固定 200px,后两列平分剩余空间。

跨格与流动

跨格

col-span-* 让某格横向跨越多列,row-span-* 纵向跨越多行。

<div class="grid grid-cols-3 gap-4">
  <div class="col-span-2 p-4 bg-red-100">占两列</div>
  <div class="p-4 bg-red-100">一</div>
  <div class="p-4 bg-red-100">二</div>
  <div class="p-4 bg-red-100">三</div>
</div>

第一个格子用 col-span-2 占了前两列,后面的格子依次补位。

自动行列与流动方向

子项数量不固定时,用 auto-cols-* 和 auto-rows-* 控制自动创建轨道的尺寸。

<div class="grid grid-flow-col auto-cols-[120px] gap-2">
  <div class="p-4 bg-purple-100">1</div>
  <div class="p-4 bg-purple-100">2</div>
</div>

grid-flow-col 让子项按列优先排布(先填满一列再换列),默认是 grid-flow-row(按行优先)。还有 grid-flow-dense 可让网格尽量填补空隙。

响应式网格

配合断点变体可以让列数随屏幕变化,这在下一篇会详细讲。先给个预览。

<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
  <div class="p-4 bg-gray-100">卡片</div>
  <div class="p-4 bg-gray-100">卡片</div>
  <div class="p-4 bg-gray-100">卡片</div>
  <div class="p-4 bg-gray-100">卡片</div>
</div>

手机上一列,平板两列,桌面四列。

实战:图片墙

下面用 Grid 做一组规整的图片墙,其中一张图跨两列做视觉重点。

<div class="grid grid-cols-3 grid-rows-2 gap-2">
  <img class="col-span-2 h-40 w-full object-cover rounded" src="a.jpg" alt="主图">
  <img class="h-40 w-full object-cover rounded" src="b.jpg" alt="图二">
  <img class="h-40 w-full object-cover rounded" src="c.jpg" alt="图三">
  <img class="h-40 w-full object-cover rounded" src="d.jpg" alt="图四">
  <img class="h-40 w-full object-cover rounded" src="e.jpg" alt="图五">
</div>

第一张图用 col-span-2 横跨两列,整体排成 3 列 2 行。把 src 换成你自己的图片路径即可运行。

小结

Grid 的核心是 grid 容器加 grid-cols-* 定义列,再配合 gap-*、col-span-*、grid-flow-* 调整。任意值 grid-cols-[...] 能应对不规则布局。下一篇讲如何让布局随屏幕自适应。

上一篇
Tailwind CSS 盒模型与间距
下一篇
Tailwind CSS 响应式设计