Skip to main content

Grid

Grid is a CSS Grid layout component with shorthand props for common grid properties.

Import

import { Grid } from "@tosui/react";

Basic Usage

<Grid columns="repeat(3, 1fr)" gap={4}>
<Box p={4} bg="primary-subtle">Item 1</Box>
<Box p={4} bg="accent-subtle">Item 2</Box>
<Box p={4} bg="success-subtle">Item 3</Box>
<Box p={4} bg="warning-subtle">Item 4</Box>
<Box p={4} bg="error-subtle">Item 5</Box>
<Box p={4} bg="info-subtle">Item 6</Box>
</Grid>

Column Patterns

{/* Equal columns */}
<Grid columns="1fr 1fr" gap={4}>
<Box p={4} bg="primary-subtle">Half</Box>
<Box p={4} bg="accent-subtle">Half</Box>
</Grid>

{/* Fixed + flexible */}
<Grid columns="200px 1fr" gap={4}>
<Box p={4} bg="primary-subtle">Sidebar (200px)</Box>
<Box p={4} bg="accent-subtle">Main (flexible)</Box>
</Grid>

{/* Auto-fit responsive */}
<Grid columns="repeat(auto-fit, minmax(150px, 1fr))" gap={4}>
<Box p={4} bg="primary-subtle">Item 1</Box>
<Box p={4} bg="accent-subtle">Item 2</Box>
<Box p={4} bg="success-subtle">Item 3</Box>
<Box p={4} bg="warning-subtle">Item 4</Box>
</Grid>

Rows

<Grid columns="1fr 1fr" rows="100px 200px" gap={4}>
<Box p={4} bg="primary-subtle">Row 1 (100px)</Box>
<Box p={4} bg="accent-subtle">Row 1 (100px)</Box>
<Box p={4} bg="success-subtle">Row 2 (200px)</Box>
<Box p={4} bg="warning-subtle">Row 2 (200px)</Box>
</Grid>

Responsive Columns and Rows

columns and rows accept responsive objects, making it easy to change grid layouts at different breakpoints:

<Grid
columns={{
base: "1fr",
md: "repeat(2, 1fr)",
lg: "repeat(3, 1fr)"
}}
gap={4}
>
<Box p={4} bg="primary-subtle">Item 1</Box>
<Box p={4} bg="accent-subtle">Item 2</Box>
<Box p={4} bg="success-subtle">Item 3</Box>
<Box p={4} bg="warning-subtle">Item 4</Box>
<Box p={4} bg="error-subtle">Item 5</Box>
<Box p={4} bg="info-subtle">Item 6</Box>
</Grid>

Separate Row and Column Gaps

<Grid columns="repeat(3, 1fr)" gapRow={2} gapColumn={8}>
<Box p={4} bg="primary-subtle">Item 1</Box>
<Box p={4} bg="accent-subtle">Item 2</Box>
<Box p={4} bg="success-subtle">Item 3</Box>
<Box p={4} bg="warning-subtle">Item 4</Box>
<Box p={4} bg="error-subtle">Item 5</Box>
<Box p={4} bg="info-subtle">Item 6</Box>
</Grid>

Alignment

<Grid columns="repeat(3, 100px)" gap={4} justify="center" p={4} bg="surface" border="thin" borderColor="border">
<Box p={4} bg="primary-subtle">1</Box>
<Box p={4} bg="accent-subtle">2</Box>
<Box p={4} bg="success-subtle">3</Box>
</Grid>

Props Reference

All layout props (columns, rows, gap, justify, align, justifyContent, alignContent) accept responsive objects in addition to simple values.

PropTypeDefaultDescription
columnsResponsiveValue<string>-Grid template columns (CSS value)
rowsResponsiveValue<string>-Grid template rows (CSS value)
gapResponsiveValue<0-32>-Gap between grid items
gapRowResponsiveValue<0-32>-Row gap
gapColumnResponsiveValue<0-32>-Column gap
justifyResponsiveValue<"start" | "center" | "end" | "space-between" | "space-around" | "space-evenly">-Justify items
alignResponsiveValue<"start" | "center" | "end" | "stretch" | "baseline">-Align items
justifyContentResponsiveValue<"start" | "center" | "end" | "space-between" | "space-around" | "space-evenly">-Distribute tracks horizontally
alignContentResponsiveValue<"start" | "center" | "end" | "space-between" | "space-around" | "space-evenly">-Distribute tracks vertically
asElementType"div"HTML element to render

TypeScript

import { Grid, type GridProps, type GridOwnProps } from "@tosui/react";