componentes / grid
Grid
CSS grid com colunas responsivas, gap e itens que ocupam colunas ou linhas.
Como usar
`columns` aceita um número (1 a 12) ou um objeto por breakpoint (`base`, `sm`, `md`, `lg`, `xl`), mobile first: `{ base: 1, md: 2, lg: 4 }`. Use `GridItem` quando uma célula precisa ocupar mais de uma coluna ou linha.
preview
colSpan 2
1
2
3
4
5
6
Grid.tsx
import { Grid, GridItem } from "vaiperui"; <Grid columns={{ base: 1, md: 2, lg: 4 }} gap={4}> <GridItem colSpan={2}>Wide</GridItem> <GridItem>Item</GridItem></Grid>Colunas
preview
1
2
3
4
1
2
3
4
5
6
1
2
3
4
5
6
7
8
colunas.tsx
<Grid columns={2} /><Grid columns={3} /><Grid columns={{ base: 1, md: 3 }} />Gap
preview
1
2
3
1
2
3
1
2
3
gap.tsx
<Grid columns={3} gap={0} /><Grid columns={3} gap={8} />Spans
preview
colSpan 2
rowSpan 2
1
2
spans.tsx
<GridItem colSpan={2} /><GridItem rowSpan={2} />Props
| Prop | Valores | Padrão | Descrição |
|---|---|---|---|
| columns | 1 – 12 | { base, sm, md, lg, xl } | 1 | Número de colunas, ou um valor por breakpoint |
| gap | 0 | 1 | 2 | 3 | 4 | 6 | 8 | 4 | Espaço entre os filhos (passos de 4px) |
| as | ElementType | "div" | Elemento ou componente a renderizar (`section`, `ul`, `main`...) |
| GridItem colSpan / rowSpan | 1 – 12 / 1 – 6 | nenhum | Colunas e linhas que o item ocupa |
Acessibilidade
- `Grid` e `GridItem` renderizam `<div>`s simples por padrão, sem papel; `as` troca o elemento (por exemplo `ul`/`li`).
- São puramente visuais: nenhum foco, teclado ou comportamento ARIA é adicionado, e props extras chegam ao elemento.
- Leitores de tela e Tab seguem a ordem do DOM, não a posição visual.
Tenha em mente
- `colSpan`/`rowSpan` e `columns` responsivo mudam só o layout; mantenha a ordem do código fazendo sentido em todos os breakpoints.
- Não adiciona semântica de lista: use `as="ul"` e `as="li"` no `GridItem` quando os itens forem uma lista.