componentes / grid
Grid
CSS grid con columnas responsivas, gap e ítems que ocupan columnas o filas.
Cómo usar
`columns` acepta un número (1 a 12) o un objeto por breakpoint (`base`, `sm`, `md`, `lg`, `xl`), mobile first: `{ base: 1, md: 2, lg: 4 }`. Usa `GridItem` cuando una celda debe ocupar más de una columna o fila.
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>Columnas
preview
1
2
3
4
1
2
3
4
5
6
1
2
3
4
5
6
7
8
columnas.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 | Predeterminado | Descripción |
|---|---|---|---|
| columns | 1 – 12 | { base, sm, md, lg, xl } | 1 | Número de columnas, o un valor por breakpoint |
| gap | 0 | 1 | 2 | 3 | 4 | 6 | 8 | 4 | Espacio entre los hijos (pasos de 4px) |
| as | ElementType | "div" | Elemento o componente a renderizar (`section`, `ul`, `main`...) |
| GridItem colSpan / rowSpan | 1 – 12 / 1 – 6 | ninguno | Columnas y filas que ocupa el ítem |
Accesibilidad
- `Grid` y `GridItem` renderizan `<div>` simples por defecto, sin rol; `as` cambia el elemento (por ejemplo `ul`/`li`).
- Son puramente visuales: no se añade foco, teclado ni comportamiento ARIA, y las props extra llegan al elemento.
- Los lectores de pantalla y Tab siguen el orden del DOM, no la posición visual.
Ten en cuenta
- `colSpan`/`rowSpan` y `columns` responsivo solo cambian el layout; mantén el orden del código con sentido en todos los breakpoints.
- No añade semántica de lista: usa `as="ul"` y `as="li"` en `GridItem` cuando los elementos sean una lista.