Back

MUI Grid 详解与实例:布局、表单和仪表盘

MUI Grid 详解与实例:布局、表单和仪表盘

Material UI (MUI) 提供了一个强大的 Grid 组件系统,用于在 React 中构建响应式布局。但初次使用时可能会感到困惑——尤其是在用于布局的 Grid 和用于数据显示的 DataGrid 之间的区别。本文将通过实例讲解如何有效使用 MUI Grid 系统,这些例子可应用于表单、仪表盘等场景。

要点

  • 了解 Grid 和 Data Grid 组件的区别
  • 使用 MUI Grid 构建常见布局
  • 理解间距、断点和嵌套技术

什么是 MUI Grid?

MUI 提供两种类型的网格组件:

  • Grid (布局) 来自 @mui/material@mui/system:用于使用 12 列弹性盒子系统创建页面布局。
  • Data Grid 来自 @mui/x-data-grid:用于渲染表格,通常带有分页、排序、过滤等功能。

了解何时使用哪种组件很关键:

  • 使用 Grid 控制布局和定位。
  • 使用 DataGrid 显示结构化数据,如表格。

MUI Grid 基础布局

容器与项目

MUI Grid 使用 容器 + 项目 模型:

<Grid container spacing={2}>
  <Grid item xs={6}>Left</Grid>
  <Grid item xs={6}>Right</Grid>
</Grid>

列如何工作

网格将宽度分为 12 列xs={6} 占一半,xs={4} 占三分之一,以此类推。

间距和间隙

在容器上使用 spacing={n} 在项目之间添加一致的内边距。

使用 Grid 创建响应式布局

断点

Grid 支持断点,包括 xssmmdlgxl

<Grid item xs={12} sm={6} md={4}>
  Responsive box
</Grid>

这个盒子在小屏幕上占满宽度,在中等屏幕上占一半,在大屏幕上占三分之一。

嵌套网格

通过将一个项目同时设为容器,可以嵌套网格:

<Grid item xs={12}>
  <Grid container spacing={1}>
    <Grid item xs={6}>Nested A</Grid>
    <Grid item xs={6}>Nested B</Grid>
  </Grid>
</Grid>

实际 UI 模式

表单布局

<Grid container spacing={2}>
  <Grid item xs={12} sm={6}>
    <TextField label="First Name" fullWidth />
  </Grid>
  <Grid item xs={12} sm={6}>
    <TextField label="Last Name" fullWidth />
  </Grid>
</Grid>

仪表盘卡片

<Grid container spacing={2}>
  <Grid item xs={12} md={4}>
    <Paper>Stats Card</Paper>
  </Grid>
  <Grid item xs={12} md={8}>
    <Paper>Chart Area</Paper>
  </Grid>
</Grid>

侧边栏 + 内容

<Grid container>
  <Grid item xs={12} md={3}>
    <Sidebar />
  </Grid>
  <Grid item xs={12} md={9}>
    <MainContent />
  </Grid>
</Grid>

MUI Grid 与 Data Grid 对比

特性 Grid (@mui/material) DataGrid (@mui/x-data-grid) 用途 页面布局 表格数据显示 列数 12列系统 根据数据列定义列 使用场景 表单、仪表盘、布局 表格、电子表格、报表 断点 支持 不支持(通过容器调整大小处理)

DataGrid 使用示例:

import { DataGrid } from '@mui/x-data-grid';

const columns = [
  { field: 'id', headerName: 'ID', width: 90 },
  { field: 'name', headerName: 'Name', width: 150 },
];

const rows = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
];

<DataGrid rows={rows} columns={columns} autoHeight />

常见问题及解决方法

1. 溢出或对齐问题

  • 始终将项目包装在 container 中。
  • 确保 xssm 等值的总和为 12(或更少)。

2. 不需要的滚动条

  • 使用 spacing={2} 而不是手动设置 marginpadding

3. Grid 项目意外拉伸

  • 将文本包装在 BoxPaper 或类似组件中以控制宽度/高度。

结论

MUI 的 Grid 系统提供了一种强大的方式,通过简单、灵活的 API 构建响应式布局。通过掌握容器/项目结构、断点和常见布局模式,您可以构建稳健的 UI,而无需自定义 CSS。

常见问题

Grid 用于使用 12 列系统进行布局。Data Grid 用于显示表格数据,如表格或电子表格。

Grid 系统默认使用 12 列。

是的。您可以在项目内嵌套容器,创建复杂布局。

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers