Files
react-test/docs/data/joy/components/grid/grid.md
how2ice 005cf56baf
Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
init project
2025-12-12 14:26:25 +09:00

4.7 KiB

productId, title, components, githubLabel
productId title components githubLabel
joy-ui React Grid component Grid component: Grid

Grid

Grid acts as a generic container, wrapping around the elements to be arranged.

{{"component": "@mui/docs/ComponentLinkHeader"}}

Introduction

The Grid component, based on a 12-column grid layout, creates visual consistency between layouts while allowing flexibility across a wide variety of designs.

:::warning The Grid component shouldn't be confused with a data grid; it is closer to a layout grid. For a data grid head to the MUI X Data Grid component. :::

Basics

import Grid from '@mui/joy/Grid';

Column widths are integer values between 1 and 12. For example, an item with size={6} occupies half of the grid container's width.

{{"demo": "BasicGrid.js", "bg": true}}

Customization

Grid with multiple breakpoints

Components may have multiple widths defined, causing the layout to change at the defined breakpoint. Width values given to larger breakpoints override those given to smaller breakpoints.

For example, size={{ xs: 12, sm: 6 }} sizes a component to occupy half of the viewport width (6 columns) when viewport width is 600 or more pixels. For smaller viewports, the component fills all 12 available columns.

{{"demo": "FullWidthGrid.js", "bg": true}}

Spacing

To control space between children, use the spacing prop. The spacing value can be any positive number, including decimals and any string. The prop is converted into a CSS property using the theme.spacing() helper.

{{"demo": "SpacingGrid.js", "bg": true}}

Row & column spacing

The rowSpacing and columnSpacing props allow for specifying the row and column gaps independently. It's similar to the row-gap and column-gap properties of CSS Grid.

{{"demo": "RowAndColumnSpacing.js", "bg": true}}

Responsive values

You can switch the props' value based on the active breakpoint.

{{"demo": "ResponsiveGrid.js", "bg": true}}

Responsive values is supported by:

  • size
  • columns
  • columnSpacing
  • direction
  • rowSpacing
  • spacing
  • offset
  • all the other props of MUI System

:::warning When using a responsive columns prop, each grid item needs its corresponding breakpoint. For instance, this is not working. The grid item misses the value for md:

<Grid container columns={{ xs: 4, md: 12 }}>
  <Grid size={{ xs: 2 }} />
</Grid>

:::

Auto-layout

The Auto-layout makes the grid items equitably share the available space. This also means that you can set the width of one grid item, and the others will automatically resize around it.

{{"demo": "AutoGrid.js", "bg": true}}

Variable width content

Set one of the size breakpoint props to "auto" to render a column based on the natural width of its content.

{{"demo": "VariableWidthGrid.js", "bg": true}}

Columns

You can change the default number of columns (12) with the columns prop.

{{"demo": "ColumnsGrid.js", "bg": true}}

System props

:::info System props are deprecated and will be removed in the next major release. Please use the sx prop instead.

- <Grid mt={2} />
+ <Grid sx={{ mt: 2 }} />

:::

Interactive demo

Below is an interactive demo that lets you explore the visual results of the different settings:

{{"demo": "InteractiveGrid.js", "hideToolbar": true, "bg": true}}

Limitations

Negative margin

The spacing between items is implemented with a negative margin. This might lead to unexpected behaviors. For instance, to apply a background color, you need to apply display: flex; to the parent.

direction: column | column-reverse

The size and offset props are not supported within direction="column" and direction="column-reverse" containers.

They define the number of grids the component will use for a given breakpoint. They are intended to control width using flex-basis in row containers but they will impact height in column containers. If used, these props may have undesirable effects on the height of the Grid item elements.

CSS Grid Layout

The Grid component is using CSS flexbox internally. But as seen below, you can easily use MUI System and CSS Grid to layout your pages.

{{"demo": "CSSGrid.js", "bg": true}}

Common examples

Centering children

To center a grid item's content, specify display="flex" directly on the item. Then use justifyContent and/or alignItems to adjust the position of the content, as shown below:

{{"demo": "ChildrenCenteredGrid.js"}}

Anatomy

The Grid component is composed of a single root <div> element:

<div class="MuiGrid-root">
  <!-- Grid contents -->
</div>