目錄
CSS Grid 佈局與其他 CSS 佈局方法有何不同?
如何開始使用 CSS Grid 佈局?
我可以將 CSS Grid 佈局與其他 CSS 佈局方法一起使用嗎?
如何使用 CSS Grid 佈局創建網格?
如何將項目放置在網格上?
什麼是網格線和網格軌道?
CSS Grid 佈局中的 fr 單位是什麼?
如何使網格具有響應性?
我可以在網格中嵌套網格嗎?
所有瀏覽器都支持 CSS Grid 佈局嗎?
首頁 web前端 css教學 引入CSS網格佈局

引入CSS網格佈局

Feb 21, 2025 am 09:35 AM

CSS Grid 佈局:構建強大且靈活的網站佈局

核心要點

  • CSS Grid 佈局提供了一種更強大、更靈活的方式來創建複雜的網站佈局,無需使用諸如 inlinefloat 之類的屬性或單獨的網格系統樣式表。
  • 目前,只有 IE 10 和 Edge 支持 CSS Grid 佈局,但可以通過 Chrome 和 Firefox 中的特定標誌或使用 polyfill 來啟用它。
  • CSS Grid 佈局使用稱為 “fr” 的度量單位、線條、軌道、單元格和區域來定義網頁上元素的佈局。
  • CSS Grid 佈局允許完全分離標記和佈局,使 CSS 更易於維護,並為設計提供了無限的可能性。

Introducing the CSS Grid Layout

圖片來自 SitePoint/Natalia Balska。

在創建複雜的網站時,網格至關重要。現代網頁設計中網格的重要性從眾多實現網格系統以加快開發速度的框架數量中可見一斑。

隨著 CSS Grid 佈局規範的引入,您無需再包含單獨的樣式表即可使用網格系統。另一個優點是,您無需再依賴 inlinefloat 等屬性來佈置網頁上的元素。在本教程中,我們將介紹網格系統的基礎知識,並創建一個基本的博客佈局。

瀏覽器支持

目前,只有 IE 10 和 Edge 支持 Grid 佈局——您還不能在商業網站上使用它。

它可以通過 chrome://flags 中的 “實驗性 Web 平台功能” 標誌在 Chrome 中啟用。您可以使用 layout.css.grid.enabled 標誌在 Firefox 中啟用它。

另一種選擇是使用 polyfill。確實存在 CSS Grid Polyfill!使用上述各種選項,您可以在 Grid 佈局仍處於起步階段時開始試驗並儘可能多地了解它。

注意:Internet Explorer 目前已實現舊版本的規範。不幸的是,這意味著它與最新規範並不完全兼容。在學習本教程中的示例時,建議您使用啟用了相應標誌的 Chrome 或 Firefox。

網格系統術語

在佈置元素方面,CSS 網格系統類似於表格。但是,它更加強大和靈活。在本節中,我將討論一些在使用網格時需要注意的術語:

fr 單位:此單位用於指定可用空間的一部分。它旨在與 grid-rowsgrid-columns 一起使用。根據規範——

分配分數空間發生在所有“長度”或基於內容的行和列大小達到其最大值之後。

線條:線條定義其他元素的邊界。它們垂直和水平運行。在下圖中,有四條垂直線和四條水平線。

軌道:軌道是平行線之間的空間。在下圖中,有三條垂直軌道和三條水平軌道。

單元格:單元格是網格的基本構建塊。在下圖中,共有九個單元格。

區域:區域是一個矩形形狀,具有任意數量的單元格。因此,軌道 是一個 區域單元格 也是一個 區域

Introducing the CSS Grid Layout

在網格中定位元素

讓我們從基礎開始。在本節中,我將教您如何使用網格將元素定位到特定位置。要使用 CSS Grid 佈局,您需要一個父元素和一個或多個子元素。為了演示,我們將使用以下標記作為我們的網格系統:

<div class="grid-container">
  <div class="grid-element item-a">A</div>
  <div class="grid-element item-b">B</div>
  <div class="grid-element item-c">C</div>
  <div class="grid-element item-d">D</div>
  <div class="grid-element item-e">E</div>
  <div class="grid-element item-f">F</div>
</div>
登入後複製
登入後複製

完成標記後,您需要在父元素上應用 display: griddisplay: inline-grid 以及其他樣式,如下所示:

.grid-container {
  display: grid;
  grid-template-columns: 200px 10px 0.3fr 10px 0.7fr;
  grid-template-rows: auto 20px auto;
}
登入後複製
登入後複製

grid-template-columnsgrid-template-rows 屬性用於指定各種行和列的寬度。在上面的示例中,我定義了五列。 10px 列充當槽,用於在元素之間提供所需的間距。第一列寬度為 200px。第三列佔據剩餘空間的 0.3 部分。類似地,第五列佔據剩餘空間的 0.7 部分。

對於 grid-template-rows 中的第一行使用 auto 允許該行根據其內部的內容進行擴展。 20px 行充當槽。

此時,元素緊密地排列在一起,如下面的演示所示。 (此處省略CodePen演示鏈接)

觀察到元素 B 位於我們計劃用作槽的第二列中。如果您沒有指定網格內子元素的位置,瀏覽器會將一個元素放在每個單元格中,直到第一行完全填充,其餘元素然後進入下一行。這就是我們在第二行剩下四個備用列的原因。

要將元素移動到網格中的特定單元格,您需要在 CSS 中指定它們的位置。在解釋如何使用網格系統移動元素之前,請查看下圖。 (此處省略圖片鏈接)

在本例中,我們將使用“基於線條的放置”。基於線條的放置意味著我們的網格系統中的線條將充當放置和限制元素的指南。讓我們以元素 B 為例。在水平方向上,它從第 3 列線開始,到第 4 列線結束。在垂直軸上,它位於第 1 行線和第 2 行線之間。

我們使用 grid-column-start 來指定元素的起始垂直線。在這種情況下,它將設置為 3。 grid-column-end 指示元素的結束垂直線。在這種情況下,此屬性將等於 4。相應的行值也將類似地設置。

考慮到以上所有內容,要將元素 B 移動到第二個單元格,您將使用以下 CSS:

<div class="grid-container">
  <div class="grid-element item-a">A</div>
  <div class="grid-element item-b">B</div>
  <div class="grid-element item-c">C</div>
  <div class="grid-element item-d">D</div>
  <div class="grid-element item-e">E</div>
  <div class="grid-element item-f">F</div>
</div>
登入後複製
登入後複製

類似地,要將元素 F 移動到第六個單元格,您將使用以下 CSS:

.grid-container {
  display: grid;
  grid-template-columns: 200px 10px 0.3fr 10px 0.7fr;
  grid-template-rows: auto 20px auto;
}
登入後複製
登入後複製

在對 CSS 進行這些更改後,元素應該像此演示中一樣正確地間隔開。 (此處省略CodePen演示鏈接)

創建基本佈局

現在是時候創建一個基本的博客佈局了。該博客將具有頁眉、頁腳、側邊欄和兩個用於實際內容的部分。讓我們從標記開始:

.element-b {
  grid-column-start: 3;
  grid-column-end: 4;
  grid-row-start: 1;
  grid-row-end: 2;
}
登入後複製

請記住,標記中元素的順序不會影響元素在網頁上的位置。只要您不更改 CSS,您就可以在標記中將頁腳放在頁眉上方,而網頁上元素的位置不會改變。當然,我不建議這樣做。關鍵是——您的標記將不再決定元素的位置。

我們現在要做的就是確定各種元素的 grid-row-end 等屬性的值。就像在最後一個示例中一樣,我們將使用網格圖來確定所有網格屬性的值。 (此處省略圖片鏈接)

如上圖所示,頁眉從第 1 列線到第 4 列線,從第 1 行線到第 2 行線。這應該如下所示:

.element-f {
  grid-column-start: 5;
  grid-column-end: 6;
  grid-row-start: 3;
  grid-row-end: 4;
}
登入後複製

類似地,“額外內容”從第 3 列線到第 4 列線,從第 5 行線到第 6 行線。因此,CSS 將是:

<div class="grid-container">
  <div class="grid-element header">Header</div>
  <div class="grid-element sidebar">Sidebar</div>
  <div class="grid-element main">Main Content</div>
  <div class="grid-element extra">Extra Info</div>
  <div class="grid-element footer">Footer</div>
</div>
登入後複製

現在也可以輕鬆確定所有其他元素的網格屬性。查看 CodePen 演示並試驗各種網格值,以更好地了解基於線條的放置。 (此處省略CodePen演示鏈接)

結論

CSS 網格佈局規範使我們能夠輕鬆創建複雜的佈局。我們需要編寫的 CSS 更簡單、更易於維護。在設計中創建複雜佈局時,我們不再需要使用 float 或其他此類屬性。另一個巨大的優勢是標記和佈局的完全分離。使用 CSS Grid 佈局,可能性是無限的。

如果您對本教程有任何疑問,請在評論中告訴我。

關於 CSS Grid 佈局的常見問題

CSS Grid 佈局與其他 CSS 佈局方法有何不同?

CSS Grid 佈局是一個二維佈局系統,與其他 CSS 佈局方法(如 Flexbox,它是一維的)不同。這意味著使用 CSS Grid,您可以同時控制水平和垂直佈局,而其他方法則無法做到這一點。它旨在處理更複雜的設計和大型佈局。它也更靈活、更強大,允許更具創意和精細的設計。

如何開始使用 CSS Grid 佈局?

要開始使用 CSS Grid 佈局,您需要將元素的 display 屬性設置為 gridinline-grid。這使得元素成為網格容器,其子元素成為網格項目。然後,您可以使用各種網格屬性來定義網格的佈局和網格項目的位置。

我可以將 CSS Grid 佈局與其他 CSS 佈局方法一起使用嗎?

是的,CSS Grid 佈局可以與其他 CSS 佈局方法結合使用。例如,您可以將 Flexbox 用於網站的組件,將 CSS Grid 用於整體佈局。這使您可以利用每種佈局方法的優勢。

如何使用 CSS Grid 佈局創建網格?

要使用 CSS Grid 佈局創建網格,您首先需要通過將元素的 display 屬性設置為 gridinline-grid 來定義網格容器。然後,您可以使用 grid-template-columnsgrid-template-rows 屬性來定義網格中列和行的數量和大小。

如何將項目放置在網格上?

您可以使用 grid-columngrid-row 屬性將項目放置在網格上。這些屬性允許您指定項目的起始線和結束線,從而有效地將其放置在網格的特定單元格或單元格中。

什麼是網格線和網格軌道?

在 CSS Grid 佈局中,網格線是構成網格結構的分隔線。它們的編號從 1 開始,行號從上到下、從左到右遞增。網格軌道是兩條相鄰網格線之間的空間,可以是列或行。

CSS Grid 佈局中的 fr 單位是什麼?

CSS Grid 佈局中的 fr 單位代表“分數”。它表示網格容器中可用空間的一部分。例如,如果您有一個包含三列的網格,並將一列的寬度設置為1fr,而另外兩列設置為2fr,則第一列將佔據可用空間的三分之一,而另外兩列將各佔據三分之一。

如何使網格具有響應性?

要使網格具有響應性,您可以將媒體查詢與 grid-template-columnsgrid-template-rows 屬性結合使用。您還可以將 auto-fillauto-fit 關鍵字與 repeat 函數一起使用,以根據視口的尺寸自動調整列和行的數量和大小。

我可以在網格中嵌套網格嗎?

是的,您可以在 CSS Grid 佈局中嵌套網格。這意味著您可以使網格項目本身成為網格容器,從而創建複雜的嵌套佈局。

所有瀏覽器都支持 CSS Grid 佈局嗎?

所有現代瀏覽器(包括 Chrome、Firefox、Safari 和 Edge)都支持 CSS Grid 佈局。但是,Internet Explorer 不支持它。因此,務必為使用不受支持瀏覽器的用戶提供備用佈局。

請注意,由於我無法訪問外部網站和圖片,我無法直接顯示圖片。 請確保將圖片鏈接正確地添加到你的最終輸出中。

以上是引入CSS網格佈局的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1655
14
CakePHP 教程
1414
52
Laravel 教程
1307
25
PHP教程
1254
29
C# 教程
1228
24
Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

如何通過CSS選擇第一個類名為item的子元素? 如何通過CSS選擇第一個類名為item的子元素? Apr 05, 2025 pm 11:24 PM

在元素個數不固定的情況下如何通過CSS選擇第一個指定類名的子元素在處理HTML結構時,常常會遇到元素個數不�...

為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? 為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? Apr 05, 2025 pm 05:51 PM

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

我們如何創建一個在SVG中生成格子呢模式的靜態站點 我們如何創建一個在SVG中生成格子呢模式的靜態站點 Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? 在前端開發中,如何使用CSS和JavaScript實現類似Windows 10設置界面的探照燈效果? Apr 05, 2025 pm 10:21 PM

在前端開發中如何實現類似Windows...

See all articles