GridLegacy
Material Design 的響應式版面配置格線可適應螢幕尺寸和方向,確保版面配置之間的一致性。
格線在版面配置之間建立視覺一致性,同時允許各種設計之間的彈性。Material Design 的響應式 UI 是基於 12 欄格線版面配置。
運作方式
格線系統是使用 GridLegacy
元件實作的
- 它使用 CSS 的彈性盒模型,以實現高度的彈性。
- 有兩種版面配置類型:容器和項目。
- 項目寬度以百分比設定,因此它們始終是流動的,並且尺寸相對於其父元素。
- 項目具有 padding,以在個別項目之間建立間距。
- 有五個格線斷點:xs、sm、md、lg 和 xl。
- 可以為每個斷點提供整數值,指示當視窗寬度滿足斷點約束時,元件佔用了 12 個可用欄位中的多少個。
如果您不熟悉或不了解 flexbox,我們建議您閱讀這份 CSS-Tricks flexbox 指南。
流動格線
流動格線使用可縮放和調整內容大小的欄位。流動格線的版面配置可以使用斷點來判斷版面配置是否需要大幅變更。
基本格線
欄位寬度是介於 1 到 12 之間的整數值;它們適用於任何斷點,並指示元件佔用了多少欄位。
傳遞給任何給定斷點的值也適用於所有更寬的斷點(如果它們沒有明確定義的值)。例如,xs={12}
將元件調整大小以佔用其父容器的完整寬度,而與視窗大小無關。
具有多個斷點的格線
元件可以定義多個寬度,導致版面配置在定義的斷點處變更。給定較大斷點的寬度值會覆蓋給定較小斷點的寬度值。
例如,當視窗寬度為600 像素或更大時,xs={12} sm={6}
將元件調整大小以佔用視窗寬度的一半(6 欄)。對於較小的視窗,元件會填滿所有 12 個可用欄位。
間距
若要控制子元件之間的間距,請使用 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 元件同時作為彈性容器和子元件。
⚠️ 同時為作為彈性容器、彈性項目且具有間距的 Grid 元素定義明確的寬度會導致非預期的行為,請避免這樣做
<Grid spacing={1} container item xs={12}>
如果您需要這樣做,請移除其中一個屬性。
欄位
您可以使用 columns
屬性變更預設欄位數 (12)。
限制
負邊距
項目之間的間距是使用負邊距實作的。這可能會導致非預期的行為。例如,若要套用背景顏色,您需要將 display: flex;
套用至父元件。
white-space: nowrap
彈性項目的初始設定為 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
xs
、sm
、md
、lg
和 xl
屬性在 direction="column"
和 direction="column-reverse"
容器內不受支援。
它們定義元件將針對給定斷點使用的格線數。它們旨在於 row
容器中使用 flex-basis
來控制寬度,但它們會影響 column
容器中的高度。如果使用這些屬性,可能會對 GridLegacy
項目元素的高度產生不良影響。
CSS Grid Layout
GridLegacy
元件在內部使用 CSS flexbox。但是如下所示,您可以輕鬆使用 MUI System 和 CSS Grid 來版面配置您的頁面。