Skip to content

Grid

A CSS-grid wrapper for arranging elements in equal, proportional, or auto-fitting columns.

For single-direction stacks (vertical or a flex row that wraps), use Container instead.

Examples

Equal columns

Pass a number for N equal-width columns.

Column 1
Column 2
Column 3
vue
<Grid :cols="3" gap="medium">
  <Box variant="info">Column 1</Box>
  <Box variant="info">Column 2</Box>
  <Box variant="info">Column 3</Box>
</Grid>

Proportional widths

Pass an array of fr weights for asymmetric layouts.

2fr
3fr
1fr
vue
<Grid :cols="[2, 3, 1]" gap="medium">
  <Box variant="info">2fr</Box>
  <Box variant="success">3fr</Box>
  <Box variant="warning">1fr</Box>
</Grid>

Mixed track sizes

Strings pass through unchanged, so you can combine fixed and flexible tracks.

Fixed 200px
Fills remaining space
vue
<Grid :cols="['200px', '1fr']" gap="medium">
  <Box variant="info">Fixed 200px</Box>
  <Box variant="info">Fills remaining space</Box>
</Grid>

Small-width breakpoint

colsSmall overrides cols when the grid's own width is at or below breakpoint. The default breakpoint is 640px unless you specify it. The check is a CSS container query against the grid itself, so it triggers based on the grid's available width (e.g. when nested inside a sidebar), not the viewport.

Card 1
Card 2
Card 3
vue
<Grid :cols="3" :cols-small="1" breakpoint="480px" gap="small">
  <Box variant="info">Card 1</Box>
  <Box variant="info">Card 2</Box>
  <Box variant="info">Card 3</Box>
</Grid>

Responsive auto-fit

minColWidth switches to repeat(auto-fit, minmax(...)) so items reflow to fit the viewport without media queries. Great for metric tiles and card grids.

Card 1
Card 2
Card 3
Card 4
Card 5
vue
<Grid min-col-width="180px" gap="medium">
  <Box variant="info">Card 1</Box>
  <Box variant="info">Card 2</Box>
  <Box variant="info">Card 3</Box>
  <Box variant="info">Card 4</Box>
  <Box variant="info">Card 5</Box>
</Grid>

Nested grids

Left
a
b
c
d
vue
<Grid :cols="2" gap="medium">
  <Box variant="info">Left</Box>
  <Grid :cols="2" gap="small">
    <Box variant="success">a</Box>
    <Box variant="success">b</Box>
    <Box variant="success">c</Box>
    <Box variant="success">d</Box>
  </Grid>
</Grid>

Props

PropTypeRequiredDefault
colsGridColsNo
colsSmallGridColsNo
breakpointstringNo
gapGridGap | stringNo
minColWidthstringNo