CSS Grid
透過範例和程式碼片段,了解如何啟用、使用和自訂我們建立在 CSS Grid 上的備用版面系統。
Bootstrap 的預設網格系統代表了超過十年的 CSS 排版技術,經由數百萬人的試驗和測試。但它也是在沒有許多我們在瀏覽器中看到的現代 CSS 功能和技術的情況下建立的,例如新的 CSS Grid。
它的運作方式
在 Bootstrap 5 中,我們新增了啟用建立在 CSS Grid 上的獨立網格系統的選項,但加入了 Bootstrap 的風格。您仍然可以隨意套用類別來建立回應式版面,但底層採用不同的方法。
-
CSS Grid 需要選擇加入。透過設定
$enable-grid-classes: false停用預設網格系統,並透過設定$enable-cssgrid: true啟用 CSS Grid。然後,重新編譯您的 Sass。 -
將
.row的執行個體替換為.grid。.grid類別設定display: grid,並建立一個grid-template,您可以使用您的 HTML 在其上建構。 -
將
.col-*類別替換為.g-col-*類別。這是因為我們的 CSS Grid 欄使用grid-column屬性,而不是width。 -
欄和間距大小透過 CSS 變數設定。在父項
.grid上設定這些,並使用--bs-columns和--bs-gap以內嵌或樣式表的方式自訂您想要的任何內容。
未來,Bootstrap 可能會轉向混合解決方案,因為 gap 屬性已為 flexbox 達到幾乎完全的瀏覽器支援。
主要差異
與預設格線系統相比
-
Flex 工具不會以相同方式影響 CSS Grid 欄位。
-
間距取代溝槽。
gap屬性取代了預設格線系統中的水平padding,其功能更類似於margin。 -
因此,與
.row不同,.grid沒有負邊界,且無法使用邊界工具變更格線溝槽。預設情況下,格線間距會水平和垂直套用。有關更多詳細資訊,請參閱 自訂區段。 -
內嵌和自訂樣式應視為修改器類別的替代品(例如,
style="--bs-columns: 3;"與class="row-cols-3")。 -
巢狀運作方式類似,但可能需要在巢狀
.grid的每個執行個體上重設欄位數量。有關詳細資訊,請參閱 巢狀區段。
範例
三欄
可以使用 .g-col-4 類別,在所有視窗和裝置上建立三個等寬欄位。加入 回應式類別,以視窗大小變更版面配置。
<div class="grid text-center">
<div class="g-col-4">.g-col-4</div>
<div class="g-col-4">.g-col-4</div>
<div class="g-col-4">.g-col-4</div>
</div>回應式
使用回應式類別調整視窗中的版面配置。在此,我們從最窄視窗開始使用兩欄,然後在中型視窗及以上版本中增加到三欄。
<div class="grid text-center">
<div class="g-col-6 g-col-md-4">.g-col-6 .g-col-md-4</div>
<div class="g-col-6 g-col-md-4">.g-col-6 .g-col-md-4</div>
<div class="g-col-6 g-col-md-4">.g-col-6 .g-col-md-4</div>
</div>將其與所有視窗中的此兩欄版面配置進行比較。
<div class="grid text-center">
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
</div>換行
當水平空間不足時,格線項目會自動換至下一行。請注意,gap 適用於格線項目之間的水平和垂直間距。
<div class="grid text-center">
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
</div>開始
開始類別旨在取代我們的預設格線的偏移類別,但它們並不完全相同。CSS 格線透過樣式建立格線範本,指示瀏覽器「從此欄開始」和「在此欄結束」。這些屬性為 grid-column-start 和 grid-column-end。開始類別是前者的簡寫。將它們與欄位類別配對,以根據需要調整欄位大小和對齊方式。開始類別從 1 開始,因為 0 是這些屬性的無效值。
<div class="grid text-center">
<div class="g-col-3 g-start-2">.g-col-3 .g-start-2</div>
<div class="g-col-4 g-start-6">.g-col-4 .g-start-6</div>
</div>自動欄位
當格線項目(.grid 的直接子項目)上沒有類別時,每個格線項目會自動調整為一欄。
<div class="grid text-center">
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
</div>此行為可以與格線欄位類別混合使用。
<div class="grid text-center">
<div class="g-col-6">.g-col-6</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
<div>1</div>
</div>巢狀
與我們的預設格線系統類似,我們的 CSS 格線允許輕鬆巢狀 .grid。但是,與預設不同,此格線會繼承列、欄和間距的變更。請考慮以下範例
- 我們使用本機 CSS 變數覆寫預設的欄位數:
--bs-columns: 3。 - 在第一個自動欄位中,繼承欄位數,每個欄位為可用寬度的三分之一。
- 在第二個自動欄位中,我們已將巢狀
.grid的欄位數重置為 12(我們的預設值)。 - 第三個自動欄位沒有巢狀內容。
實際上,與我們的預設格線系統相比,這允許更複雜和自訂的版面配置。
<div class="grid text-center" style="--bs-columns: 3;">
<div>
First auto-column
<div class="grid">
<div>Auto-column</div>
<div>Auto-column</div>
</div>
</div>
<div>
Second auto-column
<div class="grid" style="--bs-columns: 12;">
<div class="g-col-6">6 of 12</div>
<div class="g-col-4">4 of 12</div>
<div class="g-col-2">2 of 12</div>
</div>
</div>
<div>Third auto-column</div>
</div>自訂
使用本機 CSS 變數自訂欄數、列數和間距寬度。
| 變數 | 備用值 | 說明 |
|---|---|---|
--bs-rows |
1 |
網格範本中的列數 |
--bs-columns |
12 |
網格範本中的欄數 |
--bs-gap |
1.5rem |
欄之間的間距大小(垂直和水平) |
這些 CSS 變數沒有預設值;相反地,它們套用備用值,使用時間為 直到 提供本機執行個體為止。例如,我們使用 var(--bs-rows, 1) 作為 CSS Grid 列,它會忽略 --bs-rows,因為它尚未在任何地方設定。一旦設定,.grid 執行個體將使用該值,而不是備用值 1。
沒有網格類別
.grid 的立即子元素是網格項目,因此它們會在未明確加入 .g-col 類別的情況下調整大小。
<div class="grid text-center" style="--bs-columns: 3;">
<div>Auto-column</div>
<div>Auto-column</div>
<div>Auto-column</div>
</div>欄和間距
調整欄數和間距。
<div class="grid text-center" style="--bs-columns: 4; --bs-gap: 5rem;">
<div class="g-col-2">.g-col-2</div>
<div class="g-col-2">.g-col-2</div>
</div><div class="grid text-center" style="--bs-columns: 10; --bs-gap: 1rem;">
<div class="g-col-6">.g-col-6</div>
<div class="g-col-4">.g-col-4</div>
</div>加入列
加入更多列並變更欄的配置
<div class="grid text-center" style="--bs-rows: 3; --bs-columns: 3;">
<div>Auto-column</div>
<div class="g-start-2" style="grid-row: 2">Auto-column</div>
<div class="g-start-3" style="grid-row: 3">Auto-column</div>
</div>間距
僅修改 row-gap 即可變更垂直間距。請注意,我們在 .grid 使用 gap,但 row-gap 和 column-gap 可視需要修改。
<div class="grid text-center" style="row-gap: 0;">
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
</div>因此,您可以有不同的垂直和水平 gap,它們可以採用單一值(所有側邊)或一對值(垂直和水平)。這可以用於 gap 的內嵌樣式,或使用我們的 --bs-gap CSS 變數。
<div class="grid text-center" style="--bs-gap: .25rem 1rem;">
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
<div class="g-col-6">.g-col-6</div>
</div>Sass
CSS Grid 的一個限制是我們的預設類別仍由兩個 Sass 變數 $grid-columns 和 $grid-gutter-width 產生。這實際上預先決定了編譯 CSS 中產生的類別數目。您有兩個選項
- 修改那些預設 Sass 變數並重新編譯您的 CSS。
- 使用內嵌或自訂樣式來擴充提供的類別。
例如,您可以增加欄位數目並變更間距大小,然後使用內嵌樣式和預先定義的 CSS Grid 欄位類別(例如 .g-col-4)來調整「欄位」大小。
<div class="grid text-center" style="--bs-columns: 18; --bs-gap: .5rem;">
<div style="grid-column: span 14;">14 columns</div>
<div class="g-col-4">.g-col-4</div>
</div>