跳至內容
+

Grid

響應式版面配置格線會適應螢幕尺寸和方向,確保版面配置之間的一致性。

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 開始編輯

多個斷點

項目可以定義多個寬度,導致版面配置在定義的斷點處變更。寬度值適用於所有更寬的斷點,而較大的斷點會覆寫給較小斷點的值。

例如,具有 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。如果它收到頂層格線的屬性,它也將繼承這些屬性。

繼承間距

巢狀格線容器從其父項繼承列和欄間距,除非為實例指定 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 屬性。

size=8/24
巢狀 size=12/24
巢狀 size=12/24
size=8/24
巢狀 size=6/12
巢狀 size=6/12

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

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

偏移

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

  • 數字 - 例如,offset={{ md: 2 }} 在視窗尺寸等於或大於 md 斷點時,將項目向右推兩欄。
  • "auto" - 這將項目推送到格線容器的最右側。

以下示範說明如何使用偏移屬性

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"。Grid 元件專門設計用於將版面配置細分為欄,而不是列。您不應單獨使用 Grid 元件來垂直堆疊版面配置元素。相反地,您應該在 Grid 內使用 Stack 元件來建立垂直版面配置,如下所示

欄 1 - 列 1
欄 1 - 列 2
欄 1 - 列 3
欄 2
按下 Enter 開始編輯

API

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