Grid
Usage
Grid component provides simple grid system based on flexbox container:
<Grid id="my-grid"><Col span={4}>1</Col><Col span={4}>2</Col><Col span={4}>3</Col></Grid>
Gutter
Customize spacing between columns with gutter
prop on Grid component.
Use xs, sm, md, lg, xl values to set spacing from theme.spacing
or number to set spacing in px:
<Grid gutter="xl" /> // -> theme.spacing.xl<Grid gutter={40} /> // -> 40px
Grow
Set grow
prop on Grid component to force last row take 100% of container width:
<Grid grow id="my-grid"><Col span={4}>1</Col><Col span={4}>2</Col><Col span={4}>3</Col><Col span={4}>4</Col><Col span={4}>5</Col></Grid>
Column offset
Set offset
prop on Col component to create gaps in grid.
offset
adds left margin to target column and has the same units as span
:
<Grid id="my-grid"><Col span={3}>1</Col><Col span={3}>2</Col><Col span={3} offset={3}>3</Col></Grid>
Multiple rows
Once children columns span and offset sum exceeds columns
prop (defaults to 12),
columns are placed on next row:
<Grid id="my-grid"><Col span={4}>1</Col><Col span={4}>2</Col><Col span={4}>3</Col><Col span={4}>4</Col></Grid>
Justify and align
Since grid is a flex container, you can control justify-content
and align-items
properties:
<Grid id="my-grid"><Col span={3} style={{ minHeight: 80 }}>1</Col><Col span={3} style={{ minHeight: 120 }}>2</Col><Col span={3}>3</Col></Grid>
Responsive columns
Use breakpoint props (xs
, sm
, md
, lg
, xl
) to make columns respond to viewport changes.
You can configure breakpoint values in MantineProvider.
In this example up to md
there will be 1 column, from md
to lg
there will be 2 columns and from lg
and up, there will be 4 columns:
import React from 'react';import { Grid, Col } from '@mantine/core';function Demo() {return (<Grid id="my-grid"><Col span={12} md={6} lg={3}>1</Col><Col span={12} md={6} lg={3}>2</Col><Col span={12} md={6} lg={3}>3</Col><Col span={12} md={6} lg={3}>4</Col></Grid>);}
Change columns count
By default grid uses 12 columns layout, you can change it by setting columns
prop on Grid component.
Note that in this case columns span and offset will be calculated relative to this value.
In this example first column takes 50% with 12 span (12/24), second and third take 25% (6/24):
<Grid columns={24} id="my-grid"><Col span={12}>1</Col><Col span={6}>2</Col><Col span={6}>3</Col></Grid>
Wrap Col component
Col component depends on context props from Grid component. If you want to enhance it with additional logic – pass all props to child Col:
// Example Col component wrapper, used in all demosimport { Col, Text, useMantineTheme } from '@mantine/core';function ColWrapper(props: React.ComponentProps<typeof Col>) {const theme = useMantineTheme();const background = theme.colorScheme === 'dark' ? theme.colors.dark[8] : theme.colors.blue[0];return (<Col {...props} style={{ background, padding: theme.spacing.md, ...props.style }}><Textcolor={theme.colorScheme === 'dark' ? 'gray' : 'blue'}size="xl"weight={700}align="center">{props.children}</Text></Col>);}// Later<Grid id="my-grid"><ColWrapper span={4}>1</ColWrapper><ColWrapper span={4}>2</ColWrapper><ColWrapper span={4}>3</ColWrapper></Grid>;
Server side rendering
Grid component uses use-id hook to generate classes, provide static id prop to make it work with ssr:
<Grid /> // -> will not work during ssr<Grid id="my-grid" /> // -> works fine during ssr