CSS Grid 生成器

可视化构建 CSS Grid 布局,设置列数、行数、间距和模板值,实时预览并立即输出代码。免费,基于浏览器。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
设置 1–12 列。修改列数会重建单元格,并将列模板改为 repeat(N, 1fr)。
设置 1–8 行。修改行数会重建单元格,并将行模板改为 repeat(N, 1fr)。
输入 24px、1.5rem 或 2% 等 CSS 长度。空值使用 1rem;输入值不经校验,按原样复制。
设置行间距。预览的 gap 先写行间距,再写列间距。空值使用 1rem。
自定义模板
先设置列数,再输入自定义列模板。修改间距会保留模板,修改列数会替换它。预览始终绘制列数×行数个单元格。
先设置行数,再输入自定义行模板。修改间距会保留模板,修改行数会替换它。模板按输入原样复制。
复制含五条声明的完整 .container 规则。Ctrl/⌘+L 清空文本、CSS 和预览,保留数量。复制失败时可重试或手动选中 CSS。

阅读完整使用指南 CSS Grid 布局生成器:可视化构建网格布局,直接导出 CSS
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

生成的规则包含什么

生成器只输出一条 .container 规则,固定五条声明:display: grid、grid-template-columns、grid-template-rows、column-gap、row-gap。粘贴到样式表后,把 .container 换成你自己的类名即可。

这条规则只描述容器。子元素不需要写任何定位,浏览器会按 HTML 中的顺序把它们一个格子一个格子地放进去,放满一行再换下一行。工具里的预览也是这样画的:它总是画出“列数 × 行数”个色块。如果你在模板里写的列数和“列数”不一致,多出来的色块会进入隐式行,和真实页面里的子元素表现相同。

示例一:商品列表的四列卡片

电商首页的商品列表常常是四列等宽卡片。把列数设为 4、行数设为 3,列间距填 12px,行间距填 20px,复制得到:

.container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: repeat(3, 1fr);
  column-gap: 12px;
  row-gap: 20px;
}

fr 的份额是先扣掉间距再分的:容器宽 1200px 时,三条列间距共 36px,每列宽 (1200 − 36) ÷ 4 = 291px。

两点要留意。第一,商品数量通常不固定,超过 12 件时,多出的商品会进入隐式行,隐式行默认是 auto 高度,不受 repeat(3, 1fr) 控制;如果只想让卡片按内容撑高,复制后删掉 grid-template-rows 这一行(在工具里清空行模板,输出仍是 repeat(N, 1fr))。第二,1fr 行在容器没有固定高度时会按内容计算后再拉成一样高,所以某张卡片的标题多了一行,同一网格里所有行都会跟着变高。

示例二:后台管理页的侧边菜单

后台管理系统常见的结构是左侧固定宽度的菜单、右侧内容区,上方一条顶栏。先把列数设为 2、行数设为 3,再展开“自定义模板”,列模板填 200px 1fr,行模板填 56px 1fr auto,两个间距都填 0:

.container {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: 56px 1fr auto;
  column-gap: 0;
  row-gap: 0;
}

在 1440px 宽的窗口里,菜单列 200px,内容列拿到剩下的 1240px。顺序一定是先改数量、最后填模板:改动列数会把列模板重置为 repeat(N, 1fr),改动行数会重置行模板;只改间距时模板保留。顶栏要横跨两列,需要在顶栏元素上自己补写 grid-column: 1 / -1,工具不生成子元素的规则。

中文输入法带进来的全角空格

在中文输入法下直接打模板,很容易把两个值之间的空格打成全角空格(U+3000)。例如列模板写成 240px 1fr,工具不做校验,会原样输出:

.container {
  display: grid;
  grid-template-columns: 240px 1fr;
  grid-template-rows: repeat(1, 1fr);
  column-gap: 16px;
  row-gap: 16px;
}

肉眼几乎看不出差别,但这条声明是无效的。CSS Syntax Level 3 对空白的定义是 A newline, U+0009 CHARACTER TABULATION, or U+0020 SPACE.,U+3000 不在其中,也不能出现在标识符里,所以浏览器会丢弃整条 grid-template-columns;没有别的规则时,网格退回单列。全角数字(如 240px)同样会让声明失效。工具的预览这时会停在上一个有效的模板上,因为浏览器忽略了无效值,所以预览“没变化”本身就是一个提示:检查一下空格和数字是不是半角。

限制

  • 只生成容器规则。grid-column、grid-row、grid-template-areas、命名网格线和对齐属性都没有控件,需要在复制后自己补写。
  • 列数 1–12、行数 1–8。填入更大的数会按 12 列或 8 行处理。
  • 模板和间距输入框不校验,无效值(如 repeat(3 1fr))也会照原样复制。
  • 1fr 列的最小值是 auto,即内容的最小宽度。单元格里有很长的英文单词或网址时,这一列会被撑宽,甚至超出容器;改用 repeat(3, minmax(0, 1fr)) 可以让各列保持等宽。纯中文正文几乎可以在任意两个字之间换行,一般不会触发这个问题,中英混排的网址才是常见原因。

网格轨道的计算规则见 CSS Grid Layout Level 2。只需要沿一个方向排列时,CSS Flexbox 生成器通常更简单。

FAQ

什么是 CSS Grid?

CSS Grid 是 CSS 内置的二维布局系统,可以同时定义行和列,并将元素精确放置在网格容器中。适用于页面级布局、卡片网格、图片画廊以及任何需要水平和垂直结构的 UI。

grid-template-columns 有什么用?

grid-template-columns 定义网格的列数和各列大小。生成器默认填充 repeat(N, 1fr)——N 列等宽,每列各分得一份剩余空间。你也可以自定义,例如 200px 1fr 2fr 或 repeat(auto-fill, minmax(200px, 1fr))。

column-gap 和 row-gap 有什么区别?

column-gap 设置列之间的间距,row-gap 设置行之间的间距,共同控制网格内部的间隙。简写是 gap: <row-gap> <column-gap>;只写一个值时,两个方向的间距相同。

1fr 单位是什么意思?

fr 是分数单位(fractional unit),按比例分配网格容器中的剩余空间。例如 1fr 2fr 1fr 创建三列,中间列宽是其他两列的两倍。1fr 列不会窄于其内容的最小宽度;要让它可以更窄,写 minmax(0, 1fr)。

如何不用媒体查询实现响应式网格?

使用 auto-fill 或 auto-fit 配合 minmax():grid-template-columns: repeat(auto-fill, minmax(200px, 1fr))。这会创建能放下最小宽度的尽可能多的列,并伸展填满剩余空间。auto-fit 还会把空列压成 0,所以只有几个子项时它们会铺满整行。

我输入的值会被发送或保存吗?

不会。CSS 在浏览器标签页里生成,列数、间距和模板不会发送到服务器,也不会写入浏览器存储。页面的统计只记录使用事件(工具名和动作:生成或复制),不包含你输入的值。