跳至內容
+

網格版本 2

響應式佈局網格會根據螢幕大小和方向調整,確保佈局的一致性。

Grid 組件適用於已知欄數的佈局。可以使用多個斷點來配置欄,以指定每個子元素的欄跨度。

運作方式

網格系統是使用 Grid 組件實作的

  • 它使用 CSS Flexbox(而不是 CSS Grid)以實現高度彈性。
  • 網格始終是一個彈性項目。使用 container 屬性新增彈性容器。
  • 項目寬度以百分比設定,因此它們始終是流動的,並且大小相對於其父元素。
  • 有五個預設網格斷點: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 以開始編輯

多個斷點

項目可以定義多個寬度,導致佈局在定義的斷點處變更。寬度值會套用至所有較寬的斷點,並且較大的斷點會覆蓋給較小斷點的值。

例如,當視窗寬度 小於 600 像素時,具有 size={{ xs: 12, sm: 6 }} 的組件會佔據整個視窗寬度。當視窗大小超出此大小時,組件會佔據總寬度的一半,即六欄而不是 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 以開始編輯

以下項目支援響應式值

  • 大小
  • 欄間距
  • 方向
  • 列間距
  • 間距
  • 偏移

互動式

以下是一個互動式範例,可讓您探索不同設定的視覺結果

儲存格 1
儲存格 2
儲存格 3
方向
justifyContent
alignItems
<Grid
  container
  direction="row"
  sx={{
    justifyContent: "center",
    alignItems: "center",
  }}
>

自動佈局

自動佈局功能會為所有項目提供相等的空間。當您設定一個項目的寬度時,其他項目將自動調整大小以符合它。

尺寸 = 成長 (size=grow)
尺寸 = 6 (size=6)
尺寸 = 成長 (size=grow)
按下 Enter 以開始編輯

可變寬度內容

當斷點的值設定為 "auto" 時,欄位的大小會自動調整以符合其內容的寬度。下面的演示展示了它的工作原理

尺寸 = 自動 (size=auto)
尺寸 = 6 (size=6)
尺寸 = 成長 (size=grow)
按下 Enter 以開始編輯

巢狀網格

在另一個網格容器內呈現為**直接子項**的網格容器是一個巢狀網格,它繼承頂層的 columnsspacing。如果它收到這些屬性,它也將繼承頂層網格的屬性。

繼承間距

巢狀網格容器會繼承其父級的行和列間距,除非該實例指定了 spacing 屬性。

電子郵件訂閱區塊
類別 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 屬性。

尺寸 = 8/24 (size=8/24)
巢狀尺寸 = 12/24 (nested size=12/24)
巢狀尺寸 = 12/24 (nested size=12/24)
尺寸 = 8/24 (size=8/24)
巢狀尺寸 = 6/12 (nested size=6/12)
巢狀尺寸 = 6/12 (nested size=6/12)

欄位數

使用 columns 屬性來變更網格中的預設欄位數 (12),如下所示

size=8
size=8
按下 Enter 以開始編輯

偏移

offset 屬性會將項目推到網格的右側。此屬性接受

  • 數字 — 例如,offset={{ md: 2 }} 當視窗大小等於或大於 md 斷點時,會將項目向右推兩個欄位。
  • "auto"—這會將項目推送到網格容器的最右側。

下面的範例示範如何使用 offset 屬性

1
2
3
4
按下 Enter 以開始編輯

自訂斷點

如果您在主題中指定自訂斷點,則可以使用這些名稱作為響應式值的網格項目屬性

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

請參閱以下文件,以取得此處提及的元件所有可用屬性和類別的完整參考。