GridLegacy
Material Design 响应式布局网格会适应屏幕尺寸和方向,确保布局之间的一致性。
网格在布局之间创建视觉一致性,同时允许各种设计的灵活性。Material Design 的响应式 UI 基于 12 列网格布局。
工作原理
网格系统通过 GridLegacy
组件实现
- 它使用 CSS 的弹性盒子模块来实现高灵活性。
- 有两种类型的布局:容器和项目。
- 项目宽度以百分比设置,因此它们始终是流式的,并且尺寸相对于其父元素。
- 项目具有内边距,以在各个项目之间创建间距。
- 有五个网格断点:xs、sm、md、lg 和 xl。
- 可以为每个断点赋予整数值,指示当视口宽度满足断点约束时,组件占用 12 个可用列中的多少列。
如果您是 flexbox 新手或不熟悉 flexbox,我们建议您阅读这篇 CSS-Tricks flexbox 指南。
流式网格
流式网格使用可缩放和调整内容大小的列。流式网格的布局可以使用断点来确定布局是否需要进行重大更改。
基本网格
列宽度是介于 1 到 12 之间的整数值;它们适用于任何断点,并指示组件占用多少列。
传递给任何给定断点的值也适用于所有更宽的断点(如果它们没有显式定义的值)。例如,xs={12}
将组件的大小调整为占用其父容器的完整宽度,而与视口大小无关。
具有多个断点的网格
组件可以定义多个宽度,从而导致布局在定义的断点处发生变化。赋予较大断点的宽度值会覆盖赋予较小断点的宽度值。
例如,当视口宽度为600 像素或更大时,xs={12} sm={6}
将组件的大小调整为占用视口宽度的一半(6 列)。对于较小的视口,组件将填充所有 12 个可用列。
间距
要控制子元素之间的空间,请使用 spacing
属性。spacing 值可以是任何正数,包括小数和任何字符串。该属性使用theme.spacing()
辅助函数转换为 CSS 属性。
<Grid container spacing={2}>
以下属性支持响应式值:
columns
columnSpacing
direction
rowSpacing
spacing
- MUI System 的所有其他属性
交互式
以下是一个交互式演示,可让您探索不同设置的视觉效果
<Grid
container
direction="row"
sx={{
justifyContent: "center",
alignItems: "center",
}}
>
自动布局
自动布局使项目公平地共享可用空间。这也意味着您可以设置一个项目的宽度,而其他项目将自动调整大小以适应它。
可变宽度内容
将其中一个尺寸断点属性设置为 "auto"
而不是 true
/ number
,以根据其内容的自然宽度调整列的大小。
复杂网格
以下演示不遵循 Material Design 指南,但说明了如何使用网格来构建复杂布局。
全分辨率 1920x1080 • JPEG
ID: 1030114
移除
嵌套网格
container
和 item
属性是两个独立的布尔值;它们可以组合在一起,以允许 Grid 组件既作为 flex 容器又作为子元素。
⚠️ 为同时作为 flex 容器、flex 项目且具有间距的 Grid 元素定义显式宽度会导致意外行为,请避免这样做
<Grid spacing={1} container item xs={12}>
如果需要这样做,请删除其中一个属性。
列数
您可以使用 columns
属性更改默认列数 (12)。
局限性
负边距
项目之间的间距是通过负边距实现的。这可能会导致意外的行为。例如,要应用背景颜色,您需要将 display: flex;
应用于父元素。
white-space: nowrap
flex 项目的初始设置是 min-width: auto
。当子元素使用 white-space: nowrap;
时,这会导致定位冲突。您可以使用以下代码重现此问题:
<Grid item xs>
<Typography noWrap>
为了使项目保持在容器内,您需要设置 min-width: 0
。在实践中,您可以设置 zeroMinWidth
属性
<Grid item xs zeroMinWidth>
<Typography noWrap>
截断应有条件地应用于此长文本行,因为此行比容器可以支持的行长得多。
截断应有条件地应用于此长文本行,因为此行比容器可以支持的行长得多。
截断应有条件地应用于此长文本行,因为此行比容器可以支持的行长得多。
direction: column | column-reverse
在 direction="column"
和 direction="column-reverse"
容器中,不支持 xs
、sm
、md
、lg
和 xl
属性。
它们定义了组件将用于给定断点的网格数。它们旨在 row
容器中使用 flex-basis
来控制宽度,但它们会影响 column
容器中的高度。如果使用,这些属性可能会对 GridLegacy
项目元素的高度产生不良影响。
CSS Grid 布局
GridLegacy
组件在内部使用 CSS flexbox。但是如下所示,您可以轻松使用 MUI System 和 CSS Grid 来布局您的页面。