跳到内容
+

网格版本 2

响应式布局网格会根据屏幕尺寸和方向进行调整,确保布局的一致性。

Grid 组件非常适合具有已知列数的布局。可以使用多个断点配置列,以指定每个子元素的列跨度。

工作原理

网格系统通过 Grid 组件实现

  • 它使用 CSS Flexbox (而不是 CSS Grid) 以获得高度的灵活性。
  • 网格始终是一个 flex 项目。使用 container 属性添加一个 flex 容器。
  • 项目宽度以百分比设置,因此它们始终是流动的,并根据其父元素的大小调整。
  • 有五个默认的网格断点:xs、sm、md、lg 和 xl。如果您需要自定义断点,请查看自定义断点网格
  • 您可以为每个断点提供整数值,以指示当视口宽度满足 断点约束 时,组件占用 12 个可用列中的多少列。
  • 它使用 gap CSS 属性 在项目之间添加间距。
  • 支持行跨越。子元素不能跨越多行。如果您需要此功能,我们建议使用 CSS Grid
  • 会自动放置子元素。它将尝试逐个放置子元素,如果空间不足,则其余子元素将从下一行开始,依此类推。如果您需要自动放置,我们建议改用 CSS Grid

流式网格

流式网格使用可缩放和调整内容大小的列。流式网格的布局可以使用断点来确定是否需要大幅更改布局。

基本网格

为了创建网格布局,您需要一个容器。使用 container 属性创建一个网格容器,该容器包裹网格项目(Grid 始终是一个项目)。

列宽是介于 1 和 12 之间的整数值。例如,具有 size={6} 的项目占用网格容器宽度的一半。

size=8
size=4
size=4
size=8
Enter 开始编辑

多个断点

项目可以定义多个宽度,从而导致布局在定义的断点处更改。宽度值适用于所有更宽的断点,并且较大的断点会覆盖给定给较小断点的值。

例如,具有 size={{ xs: 12, sm: 6 }} 的组件在视口 宽度小于 600 像素时占用整个视口宽度。当视口超出此大小时,组件占用总宽度的一半 — 六列而不是 12 列。

xs=6 md=8
xs=6 md=4
xs=6 md=4
xs=6 md=8
Enter 开始编辑

间距

使用 spacing 属性来控制子元素之间的空间。间距值可以是任何正数(包括小数)或字符串。该属性使用 theme.spacing() 辅助函数转换为 CSS 属性。

以下演示说明了 spacing 属性的使用

间距
<Grid container spacing={2}>

行和列间距

rowSpacingcolumnSpacing 属性允许您独立于彼此指定行和列间隙。它们的行为类似于 CSS Gridrow-gapcolumn-gap 属性。

1
2
3
4
Enter 开始编辑

响应式值

您可以设置属性值,以便在给定断点处于活动状态时进行更改。例如,我们可以实现 Material Design 的 推荐的 响应式布局网格,如下面的演示所示

1
2
3
4
5
6
Enter 开始编辑

以下属性支持响应式值

  • size
  • columns
  • columnSpacing
  • direction
  • rowSpacing
  • 间距
  • offset

交互式

下面是一个交互式演示,让您可以探索不同设置的视觉结果

单元格 1
单元格 2
单元格 3
direction
justifyContent
alignItems
<Grid
  container
  direction="row"
  sx={{
    justifyContent: "center",
    alignItems: "center",
  }}
>

自动布局

自动布局功能为所有项目提供相等的空间。当您设置一个项目的宽度时,其他项目将自动调整大小以匹配它。

size=grow
size=6
size=grow
Enter 开始编辑

可变宽度内容

当断点的值给定为 "auto" 时,列的大小将自动调整以匹配其内容的宽度。下面的演示展示了它是如何工作的

size=auto
size=6
size=grow
Enter 开始编辑

嵌套网格

在另一个网格容器内呈现为直接子元素的网格容器是一个嵌套网格,它从顶层继承其columnsspacing。如果它接收到顶层网格的 props,它也将继承这些 props。

继承间距

嵌套网格容器从其父容器继承行和列间距,除非为实例指定了 spacing prop。

电子邮件订阅部分
类别 A
  • 链接 1.1
  • 链接 1.2
  • 链接 1.3
类别 B
  • 链接 2.1
  • 链接 2.2
  • 链接 2.3
类别 C
  • 链接 3.1
  • 链接 3.2
  • 链接 3.3
类别 D
  • 链接 4.1
  • 链接 4.2
  • 链接 4.3
© 版权所有
链接 A
链接 B
链接 C

继承列

嵌套网格容器从其父容器继承列,除非为实例指定了 columns prop。

size=8/24
嵌套 size=12/24
嵌套 size=12/24
size=8/24
嵌套 size=6/12
嵌套 size=6/12

使用 columns prop 更改网格中的默认列数 (12),如下所示

size=8
size=8
Enter 开始编辑

偏移量

offset prop 将项目推到网格的右侧。此 prop 接受

  • 数字—例如,offset={{ md: 2 }} 当视口大小等于或大于 md 断点时,将项目向右推两个列。
  • "auto"— 这会将项目推到网格容器的最右侧。

下面的演示说明如何使用偏移量 props

1
2
3
4
Enter 开始编辑

自定义断点

如果您在主题中指定自定义断点,则可以使用这些名称作为响应值的网格项目 props

import { ThemeProvider, createTheme } from '@mui/material/styles';

function Demo() {
  return (
    <ThemeProvider
      theme={createTheme({
        breakpoints: {
          values: {
            laptop: 1024,
            tablet: 640,
            mobile: 0,
            desktop: 1280,
          },
        },
      })}
    >
      <Grid container spacing={{ mobile: 1, tablet: 2, laptop: 3 }}>
        {Array.from(Array(4)).map((_, index) => (
          <Grid key={index} size={{ mobile: 6, tablet: 4, laptop: 3 }}>
            <div>{index + 1}</div>
          </Grid>
        ))}
      </Grid>
    </ThemeProvider>
  );
}

TypeScript

您必须在主题断点接口上设置模块增强。

declare module '@mui/system' {
  interface BreakpointOverrides {
    // Your custom breakpoints
    laptop: true;
    tablet: true;
    mobile: true;
    desktop: true;
    // Remove default breakpoints
    xs: false;
    sm: false;
    md: false;
    lg: false;
    xl: false;
  }
}

自定义

居中元素

要将网格项目的内容居中,请直接在项目上指定 display="flex"。然后使用 justifyContent 和/或 alignItems 来调整内容的位置,如下所示

Enter 开始编辑

完整边框

局限性

列方向和反转

在使用 direction="column"direction="column-reverse" 的容器中, 支持 sizeoffset 属性。

Size 和 offset 属性定义了组件在给定断点将使用的列数。它们旨在控制 row 容器中使用 flex-basis 的宽度,但它们会影响 column 容器中的高度。如果使用这些属性,可能会对 Grid 项目元素的高度产生不良影响。

API

请参阅以下文档,了解此处提到的组件可用的所有属性和类的完整参考。