---
title: Grid 栅格
description: 24 栅格布局,支持间距、偏移、位移与 flex 自适应
---
# Grid 栅格
栅格把一行分成 24 等份,用 `G3Row` 表示行、`G3Col` 表示列。它适合页面级 / 表单级的块状布局;元素之间的等距排列(按钮行、标签行)请用 [Space](/ui/general/space)。
## 何时使用
- 卡片、表单项、图表块的成行排布;
- 需要按比例分配宽度(12 / 6 / 8 …)或「一侧固定、一侧自适应」时;
- 需要控制主轴分布(居中、两端对齐)与交叉轴对齐时。
## 基础用法
`span` 表示占多少格(0-24);一行内累计超过 24 会自动换行。
## 间距
`gutter` 传数字表示水平与垂直同值,传 `[水平, 垂直]` 可分别控制。栅格间距用 `gap` 实现,子列不再需要自己写 margin。
## 偏移与位移
- `offset`:左侧留空格(不参与排序,位置固定);
- `push` / `pull`:左右位移,常用于调整视觉顺序;
- `order`:flex 的排序值,最小排在最前。
## 对齐与分布
`align` 控制交叉轴(`align-items`),`justify` 控制主轴分布(`justify-content`)。需要行内有高度差时给 `Row` 一个固定高度。
## flex 自适应
`flex` 传数字表示 `flex-grow` 的份数,传字符串则作为完整的 `flex` 简写使用。
## 不换行
`wrap=false` 时列不会换行,超出 24 格的部分会被压缩,适合「横向铺满、不允许折行」的工具条。
## API
### Props(Row)
| 名称 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| `gutter` | `number \| [number, number]` | `0` | 栅格间距(px)。数组为 `[水平, 垂直]` |
| `align` | `'top' \| 'middle' \| 'bottom' \| 'stretch'` | `'top'` | 交叉轴对齐(`align-items`) |
| `justify` | `'start' \| 'end' \| 'center' \| 'space-around' \| 'space-between' \| 'space-evenly'` | `'start'` | 主轴分布(`justify-content`) |
| `wrap` | `boolean` | `true` | 是否换行(`flex-wrap`) |
### Props(Col)
| 名称 | 类型 | 默认值 | 说明 |
| --- | --- | --- | --- |
| `span` | `number \| string` | — | 占位格数 0-24。不传时按 `flex` 或内容宽度 |
| `offset` | `number \| string` | `0` | 左侧偏移格数 |
| `order` | `number \| string` | — | 排序值(`order`) |
| `push` | `number \| string` | `0` | 向右移动格数 |
| `pull` | `number \| string` | `0` | 向左移动格数 |
| `flex` | `number \| string` | — | 数字按 `flex: n n auto` 处理;字符串作为完整 `flex` 简写,如 `'0 0 200px'` |
### Slots
| 名称 | 参数 | 说明 |
| --- | --- | --- |
| `default` | — | `Row` 内放 `Col`;`Col` 内放任意内容 |
### 类型定义
```ts
export type GridGutter = number | [number, number]
export type RowAlign = 'top' | 'middle' | 'bottom' | 'stretch'
export type RowJustify =
| 'start'
| 'end'
| 'center'
| 'space-around'
| 'space-between'
| 'space-evenly'
export interface RowProps {
gutter?: GridGutter
align?: RowAlign
justify?: RowJustify
wrap?: boolean
}
export interface ColProps {
span?: number | string
offset?: number | string
order?: number | string
push?: number | string
pull?: number | string
flex?: number | string
}
```
## 实现说明
- 栅格基于 flex:`Row` 是 `display: flex` + `flex-wrap`,`Col` 通过 `flex-basis: span/24 * 100%` 占位;
- 水平间距在 `Row` 上用负 margin + `Col` 上的 padding 抵消(首尾不外扩);垂直间距由 `row-gap` 承担;
- `Col` 的 `span`、`offset`、`push` / `pull` / `order` 都支持字符串,便于上层做动态计算(如设计器里按栅格配置渲染);
- 不做 `xs / sm / md` 断点:本库面向中后台工具,布局由容器宽度(如 `Space` / `Splitter`)控制,需要响应式时请在业务层用 CSS 媒体查询覆盖。