Grid
响应式布局栅格会适应屏幕尺寸和方向,确保跨布局的一致性。
Grid
组件非常适合具有已知列数的布局。列数可以在多个断点中配置,您必须在这些断点中指定每个子元素的列跨度。
工作原理
栅格系统通过 Grid
组件实现
- 它使用 CSS 的弹性盒子模块,具有高度的灵活性。
- 栅格始终是一个 flex 项目。使用
container
属性向其添加 flex 容器。 - 项目宽度以百分比设置,因此它们始终是流式的,并且大小相对于其父元素。
- 有五个默认的栅格断点:xs、sm、md、lg 和 xl。如果您需要自定义断点,请查看自定义断点栅格。
- 可以为每个断点指定整数值,指示当视口宽度满足断点约束时,组件占用 12 个可用列中的多少列。
- 它不具有行的概念。这意味着,您无法使子元素跨越多行。如果您需要这样做,我们建议使用 CSS Grid 代替。
- 它不提供自动放置子元素功能。它会尝试逐个放置子元素,如果空间不足,其余子元素将从下一行开始,依此类推。如果您需要自动放置功能,我们建议使用 CSS Grid 代替。
流式栅格
流式栅格使用可缩放和调整内容大小的列。流式栅格的布局可以使用断点来确定布局是否需要发生重大变化。
基本栅格
为了创建栅格布局,您需要一个容器。使用 container
属性创建包裹栅格项目(Grid
始终是一个项目)的栅格容器。
列宽是介于 1 和 12 之间的整数值。例如,size={6}
的项目占用栅格容器宽度的一半。
多个断点
组件可以定义多个宽度,从而导致布局在定义的断点处发生变化。赋予较大断点的值会覆盖赋予较小断点的值。
例如,当视口宽度为600 像素或更大时,size={{ xs: 12, sm: 6 }}
将组件的大小调整为占用视口宽度的一半(6 列)。对于较小的视口,组件将填充所有 12 个可用列。
间距
要控制子元素之间的空间,请使用 spacing
属性。间距值可以是任何正数,包括小数和任何字符串。该属性使用 theme.spacing()
辅助函数转换为 CSS 属性。
<Grid container spacing={2}>
以下属性支持响应式值
size
columns
columnSpacing
direction
rowSpacing
间距
offset
- MUI 系统的所有其他属性
自动布局
自动布局使项目公平地共享可用空间。这也意味着您可以设置一个项目的宽度,其他项目将自动调整大小以适应它。
可变宽度内容
将 size 断点属性之一设置为 "auto"
,以根据其内容的宽度调整列的大小。
- 链接 1.1
- 链接 1.2
- 链接 1.3
- 链接 2.1
- 链接 2.2
- 链接 2.3
- 链接 3.1
- 链接 3.2
- 链接 3.3
- 链接 4.1
- 链接 4.2
- 链接 4.3
列数
您可以使用 columns
属性更改默认列数 (12)。
偏移量
使用 offset
属性将项目向右移动,该属性可以是
- 数字,例如,
offset={{ md: 2 }}
- 使用时,项目从md
断点开始并向上移动 2 列。 "auto"
- 使用时,项目移动到栅格容器的右边缘。
自定义断点
如果您为主题指定了自定义断点,则可以在响应式值中使用这些名称作为栅格项目属性。
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;
}
}
限制
direction column 和 column-reverse
在 direction="column"
和 direction="column-reverse"
容器中不支持 size
和 offset
属性。
它们定义了组件在给定断点将使用的栅格数。它们旨在在 row
容器中使用 flex-basis
控制宽度,但它们会影响 column
容器中的高度。如果使用这些属性,可能会对 Grid
项目元素的高度产生不良影响。