精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

圖解 CSS Grid 布局,一起來看看 CSS Grid 布局是如何使用的

開發 前端
Grid(網格)布局是最強大的 CSS 布局方案,用于構建二維布局。Grid 布局將頁面劃分成一個個網格,可以任意組合不同的網格,實現各種各樣的布局。下面就來看看 CSS Grid 布局是如何使用的!

大家好,我是 CUGGZ。

Grid(網格)布局是最強大的 CSS 布局方案,用于構建二維布局。Grid 布局將頁面劃分成一個個網格,可以任意組合不同的網格,實現各種各樣的布局。下面就來看看 CSS Grid 布局是如何使用的!

1. Grid 布局概述

在解釋 CSS Grid 布局之前,我們先來看看 Grid 布局中一些重要概念。

(1)網格容器

網格容器是所有網格項的父元素,網格容器會定義display:grid。下面例子中,類名為 container 的 div 元素就是網格容器:

.container {
 display: grid;
}
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
</div>

(2)網格項

網格項是網格容器的子元素,上面例子中類名為item的div元素就是網格項。

(3)網格線

構成網格結構的水平和垂直分隔線就是網格線,這些線位于列(列網格線)或行(行網格線)的任一側。

下圖中的網格有 9 個網格項,有 4 條行網格線和 4 條列網格線:

(4)網格軌道

兩條相鄰網格線之間的區域就是網格軌道。下圖紫色區域就是網格軌道(紅線圈起來的位置):

(5)網格單元

兩條相鄰的列網格線和兩條相鄰的行網格線組成是的網格單元。它是網格的單個單元,也是最小單元。下圖紫色區域就是一個單元網格:

(6)網格區域

網格區域就是網格上的一個矩形區域,由一個或多個網格單元組成。下圖中紫色的區域就是網格區域:

2. 設置基本網格

要想創建 CSS 網格布局,首先需要定義網格容器??梢允褂胐isplay: grid或者display: inline-grid指定一個容器為網格布局。這樣網格容器的所有直接子元素都會隱式轉換為網格項。

.container {
  display: grid;
}

.container {
  display: inline-grid;
}

下面來看一個例子:

<div class="container">
  <div class="box a">1</div>
  <div class="box b">2</div>
  <div class="box c">3</div>
  <div class="box d">4</div>
</div>

在上面的代碼中,我們定義了一個類名為 container 的 div 元素,其有四個子元素。下面來將其設置為網格容器:

.container {
  display: grid;
}

結果如下:

當元素設置了網格布局,column、float、clear、vertical-align屬性都會失效。

3. 設置行和列寬度

將元素單獨設置為網格容器不會立即影響子元素的顯示方式,因為我們還沒有指定布局的央樣式。要更改網格中網格項的布局,就需要明確定義網格的行和列。這就用到了 grid-template-columns 和 grid-template-rows 屬性。

(1)grid-template-columns

可以使用 grid-template-columns 屬性來指定網格容器中所需的列數以及每列的寬度。

該屬性接受一個或多個非負 CSS 長度值,這些值的個數就是網格容器的列數,每個值表示每列(即每個網格軌道)的寬度。例如:

.container {
  display: grid;
  grid-template-columns: 400px 400px 400px;
}

結果如下:

在這個例子中,我們使用 grid-template-columns 屬性將網格容器的布局設置為三列,每列寬 400px。由于網格容器有四個子元素,而我們只給網格指定了三列,所以當網格容器中的網格項數量超過三個時,CSS 會將其他網格項放到新行中以保持容器的布局。

(2)grid-template-rows

可以使用 grid-template-rows 屬性來指定網格容器中每一行的高度。與 grid-template-columns 屬性不同,它并沒有指定網格容器的行數,而只用來設置每行的高度。這是因為每當網格項換行時,網格容器都會隱式創建一個新行。因此,我們無法使用 grid-template-rows 屬性來控制網格的行數。

該屬性接受一個或多個非負CSS 長度值,其中每個值表示網格容器中每一行的高度,從第一行到最后一行。例如:

.container {
  display: grid;
  grid-template-columns: 400px 400px 400px;
  grid-template-rows: 100px 200px;
}

在上面的代碼中,我們指定了網格容器的第一行高度為 100px,第二行高度為 200px。

結果如下:

上面我們僅設置了網格容器中前兩行的高度。如果向網格容器中添加更多的網格項,那么那些隱式創建的行的高度將不是由 grid-template-rows 屬性決定,而由其內容的大小決定。

(3)grid-template-areas

可以使用grid-template-areas屬性來定義網格區域。該屬性有以下三個屬性值:

  • grid-area-name:使用grid-area屬性設置的網格區域的名稱
  • . :空網格單元
  • none:沒有定義網格區域

下面來看一個例子:

.container{
    grid-template-areas: "header header header header"
                         "main main . sidebar"
                         "footer footer footer footer";
}

結果如下:

(4)網格線名稱

grid-template-columns 和 grid-template-rows 屬性還可以使用方括號來指定每一條網格線的名字,方便引用。

下面來看一個例子:

.container{
  grid-template-columns: [one] 40px [two] 50px [three] auto [four];
  grid-template-rows: [five] 25% [six] 100px [seven] auto [eight];
}

這里定義了一個 3 行 4 列的網格,其中 one、two、three、four是列網格線的名稱,five、six、seven、eight 是行網格線的名稱。

4. 行和列之間添加間隙

當這樣設置完一個基礎的網格之后,有時想要在網格項之間有一些距離,就可以通過調整網格線的大小在列和行之間添加間距。這就需要用到 row-gap 和 column-gap 屬性。

(1)column-gap

可以使用 column-gap 屬性來通過調整網格容器中垂直網格線的寬度來增加列之間的間距。它接受一個非負 CSS 長度值,該值用來定義每列之間的網格線的寬度。例如:

.container { 
   display: grid; 
   column-gap: 28px;
}

這里將網格容器中每條垂直(列)網格線的寬度設置為了 28px。使得網格中每一列之間的距離增加了28px。

結果如下:

(2)row-gap

可以使用 row-gap 屬性來通過調整網格容器中所有水平網格線的高度來在網格容器中的行之間添加間距。它接受一個非負 CSS 長度值,該值定義每行之間網格線的大小。

例如:

.container { 
   display: grid; 
   column-row: 40px;
}

這里將網格容器中每條水平(行)網格線的高度設置為 40px。使得網格中每一行之間的距離增加了40px。

結果如下:

可以結合 column-gap 和 row-gap 屬性來分隔列和行:

.container { 
   display: grid; 
   column-row: 40px;
   row-gap: 20px;
}

結果如下:

5. 水平對齊內容

Grid  布局提供了六個屬性來控制網格項沿網格容器的行或列的對齊方式。下面就來看看沿網格容器的列水平對齊網格項的屬性都是如何使用的。

(1)justify-items

可以使用 justify-items 屬性來控制所有網格項沿水平方向的對齊方式。它被傳遞給網格容器,其值適用于網格中的所有網格項。它接受四個可能的值:

  • start:將網格項對齊到所有列的開頭,即其單元格的左邊緣。
.container {
   justify-items: start;
}

  • end:將網格項對齊到所有列的末尾,即其單元格的右邊緣。
.container {
   justify-items: end;
}

  • center:將所有網格項目放在其單元格的中心。
.container {
   justify-items: center;
}

  • stretch:將拉伸網格項目以填充其單元格的整個寬度(默認值)。
.container {
   justify-items: stretch;
}

(2)justify-content

可以使用justify-content屬性來設置網格在網格容器內沿著水平方向的對齊方式。它接受七個可能的值。

  • start:將網格與網格容器的左邊對齊
.container {
   justify-content: start;
}

  • end:將網格與網格容器的右邊對齊。
.container {
   justify-content: end;
}

  • center:將整個網格水平放置在網格容器的中心。
.container {
   justify-content: center;
}

  • stretch:調整網格項大小,讓寬度填充整個網格容器(默認值)。
.container {
   justify-content: stretch;
}

  • space-around:在網格項之間設置均等寬度的空白間隙,其外邊緣間隙大小為中間空白間隙寬度的一半。
.container {
   justify-content: space-around;
}

  • space-between:在網格項之間設置均等寬度空白間隙,其外邊緣無間隙。
.container {
   justify-content: space-between;
}

  • space-evenly:在每個網格項之間設置均等寬度的空白間隙,包括外邊緣。
.container {
   justify-content: space-evenly;
}

(3)justify-self

可以使用 justify-self 屬性來設置單元格內容的水平位置,此屬性定義在網格項上,它接受四個可能得值。

  • start:將網格項對齊到列的開頭,即其單元格的左邊緣。
.box-1 {
   justify-self: start;
}

  • end:將網格項對齊到列的末尾,即其單元格的右邊緣。
.box-2 {
   justify-self: end;
}

  • center:單將網格項放置在其單元格的中心。
.box-3 {
   justify-self: center;
}

  • stretch:將拉伸網格項以填充整個單元格寬度(默認值)
.box-4 {
   justify-self: stretch;
}

6. 垂直對齊內容

(1)align-items

可以使用align-items 屬性來控制所有網格項沿垂直方向的對齊方式。它被傳遞給網格容器,其值適用于網格中的所有網格項。它接受四個可能的值:

  • start:將所有網格項放在所有行的頂部
.container {
   align-items: start;
}

  • end:將所有網格項放在所有行的底部。
.container {
   align-items: end;
}

  • center:將所有網格項目放在其單元格的中心。
.container {
   align-items: center;
}

  • stretch:將拉伸所有網格項目以填充其單元格的整個高度(默認值)。
.container {
   align-items: stretch;
}

(2)align-content

可以使用align-content屬性來設置網格在網格容器內沿著垂直方向的對齊方式。它接受七個可能的值。

  • start:將整個網格對齊到網格容器的頂部
.container {
   align-content: start;
}

  • end:將整個網格與網格容器的底部對齊。
.container {
   align-content: end;
}

  • center:將整個網格垂直放置在網格容器的中心
.container {
   align-content: center;
}

  • stretch:網格項目拉伸以填充容器網格的整個高度(默認值)。
.container {
   align-content: stretch;
}

  • space-around:在網格項之間設置均等寬度的空白間隙,其外邊緣間隙大小為中間空白間隙寬度的一半。
.container {
   align-content: space-around;
}

  • space-between:在網格項之間設置均等寬度空白間隙,其外邊緣無間隙。
.container {
   align-content: space-between;
}

  • space-evenly:在每個網格項之間設置均等寬度的空白間隙,包括外邊緣。
.container {
   align-content: space-evenly;
}

(3)align-self

可以使用 align-self 屬性來設置單元格內容的垂直位置,此屬性定義在網格項上,它接受四個可能得值。

  • start:在其單元格的頂部放置一個網格項
.box-4 {
   align-self: start;
}

  • end:在其單元格的底部放置一個網格項。
.box-5 {
   align-self: end;
}

  • center:將一個網格項放置在其單元格的中心。
.box-6 {
   align-self: center;
}

  • stretch:將拉伸網格項目以填充其單元格的整個高度(默認值)。
.box-1 {
  align-self: stretch;
}

7. 新的測量單位

除了非負CSS 長度值(例如px、rem、vw和百分比 ( %) )之外,我們還可以使用特殊的大小單位和關鍵字來控制網格中網格項的大小。

(1)fr 單位

fr單位是“fractional”的縮寫,是 CSS 網格布局中引入的長度單位。它代表網格容器中可用空間的一部分。這使它成為定義響應列和行的理想單位,這些列和行將隨著瀏覽器的視口縮小和增大而縮放。

下面來看一個簡單的例子,假設我們要創建一個由三列組成的網格布局,其中第一列占網格寬度的 1/6,第二列是第一列寬度的兩倍,第三列是第一列寬度的三倍。如果沒有fr 單位,我們就需要執行一些數學運算,先用網格的總寬度100%除以6,然后將結果乘以每列的跨度:

  • 第一列的寬度 = 100% / 6 * 1 —> 15%
  • 第二列的寬度 = 100% / 6 * 2 —> 30%
  • 第三列的寬度 = 100% / 6 * 3 —> 45%

隨著布局變得越來越復雜,使用百分比或任何CSS 數學函數將變得不可持續。這時 fr 單位就派上用場了。fr單位通過讓我們指定網格容器中的可用空間應如何在其行和列之間進行分配,然后按該順序分配可用空間:

.container {
   display: grid;
   grid-template-columns: 1fr 2fr 3fr;
}

上面的代碼中,我們將容器寬度的一部分分給第一列,第二列的寬度是第一列的兩倍,第三列的寬度是第一列的三倍。

結果如下:

(2)min-content

min-content 是一個用于調整大小的關鍵字,它將網格軌跡的寬度設置為最小寬度,通常是網格項中最小內容或文本的大小。它的工作原理類似于CSS函數:min(),但被用作間距單位而不是函數。

當應用于列或行時,它們會變得與軌跡中最長的內容一樣窄。這可以獲得網格項內內容的最短長度。

下面來看一個例子;

.container {
   display: grid;
   grid-template-columns: 1fr min-content 1fr;
}

在上面的代碼中,我們將第一列和第三列的寬度設置為網格容器的小部分,同時將第二列設置為 min-content,使其縮小到網格項中內容的大小。

結果如下:

(3)max-content

max-content關鍵字的效果與min-content相反,它類似于CSS函數:max()。當應用于列或行時,軌道將變得盡可能寬,以便網格項中的所有內容都顯示在一條完整的長行中。

使用max-content的好處就是,可以讓網格項中的內容擴展,而不是將它們包裝成新行,這會導致垂直文本溢出。

下面來看一個例子:

.container {
   display: grid;
   grid-template-columns: 1fr max-content 1fr;
}

上面的代碼定義了三列,并將第二列的寬度設置為max-content關鍵字。如果在第二列的網格項中添加大量內容,這些網格項中的文本將不會溢出。相反,第二列的寬度將增加,第一列和第三列將縮小以適應它。

結果如下:

8. CSS函數

在使用 CSS Grid 進行布局時,一些CSS數學函數可以幫助我們提高效率。比如 repeat() 、minmax()、fit-content()。

(1)repeat()

repeat() 函數表示軌道列表的重復片段,允許以更緊湊的形式寫入大量顯示重復模式的列或行。。

例如,在使用grid-template-columns和grid-template-rows這兩個屬性時,可以使用 repeat() 函數更簡潔地聲明這些重復模式。

該函數有兩個參數:① 第一個參數用來指定行或列的重復模式重復的次數,有三種取值方式:

  • <number>:整數,確切的重復次數。
  • <auto-fill>:以網格項為準自動填充。
  • <auto-fit>:以網格容器為準自動填充。

第二個參數用來指定行或列的重復模式重復的內容,有以下取值方式:

  • <length>:非負長度。
  • <percentage>:相對于列軌道中網格容器的內聯大小的非負百分比,以及行軌道中網格容器的塊長寬。
  • <flex>:單位為fr的非負長度,指定軌道彈性布局的系數值。
  • max-content:表示網格的軌道長度自適應內容最大的那個單元格。
  • min-content:表示網格的軌道長度自適應內容最小的那個單元格。
  • auto:作為最大值時,等價于max-content。作為最小值時,它表示軌道中單元格最小長寬(min-width/min-height)的最大值。

假設我們要創建一個具有六個相等列的網格。如果沒有 repeat() 函數,我們必須使用 grid-template-columns 屬性顯式定義每個列。代碼如下:

.container {
     display: grid;
     grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
}

然而,隨著列數的增加,這種方法變得不可持續和冗長。我們可以使用repeat()函數將其重寫為更緊湊的形式。代碼如下:

.container {
     display: grid;
     grid-template-columns: repeat(6, 1fr);
}

結果如下:

(2)minmax()

定義響應式網格布局時,我們可能希望為每個網格軌道指定最小和最大寬度,以確保它們在視口調整大小時上下縮放以適應其內容。這時 minmax() 就派上用場了。

minmax() 函數允許我們指定網格軌道的最小和最大尺寸,它是一個長寬范圍的閉區間。當網格在視口中調整大小時,網格軌道將在該范圍內增長和縮小。在較小的屏幕上,它會縮小直到達到最小尺寸。在更大的屏幕上,它會拉伸直到達到最大尺寸。

minmax() 函數接受 CSS Grid 大小單位、關鍵字、長度和百分比值。其有兩個參數:

  • min:軌道的最小尺寸。
  • max:軌道的最大尺寸。

下面來看一個例子:

.container {
  display: grid;
   grid-template-columns: repeat(3, 1fr);
   grid-template-rows: repeat(2, minmax(100px, max-content));
}

在上面的代碼中,我們使用 minmax() 函數將網格容器中兩行的最小高度設置為 100px,將最大高度設置 max-content。這樣就可以確保每一行在超過 100px 時都能伸展并變得盡可能寬,以容納其內容。

結果如下:

minmax() 函數的一個顯著優點就是它減少了對媒體查詢的需要。它不依靠媒體查詢來控制跨視口的網格軌道(列和行)的大小,而是允許在一定程度上設置網格軌道值的響應式轉換。

(3)fit-content()

fit-content() 函數的操作類似于 minmax() 函數。不同之處在于,使用 fit-content() 時,最小值是網格項中內容的大小,最大值是我們傳遞給它的值。這樣就可以將內容設置為最小值,并根據需要將其放大到某個值。

當應用于網格軌道時,它將網格軌道的大小設置為最小寬度,這是其網格項目中最小的內容或文本的大小。需要注意的是,最小的內容或文本大小不大于函數中指定的值。

但是,如果最小寬度的值超過了提供給函數的值,則網格軌道的大小將設置為傳遞給 fit-content() 函數的值,并且網格項的內容將換行。

下面來看一個例子:

.container {
   display: grid;
   grid-template-columns: fit-content(200px) fit-content(300px) fit-content(400px);
}

上面的代碼使用 fit-content() 函數分別創建了寬度為 200px、300px 和 400px 的三列。這意味著每列的大小將等于其網格項目中最小的內容或文本的大小,但如果這變得大于提供給 fit-content() 函數的值,則列將設置為傳遞給 fit-content() 函數的值。

結果如下:

9. 網格項屬性

在網格容器中,每條網格線都根據其在網格上的位置給出一個編號。第一條網格線(行或列)的編號為 1,第二條為 2,依此類推。

例如,下圖在一個三列兩行的網格容器上存在的網格線的數量,其中列線是橙色圓圈內從 1 到 4 的數字,而行線是藍色圓圈內的數字從 1 到 3 圈。

瀏覽器使用這些網格線來控制網格中項目的布局和位置。CSS Grid 提供了一些屬性來控制網格項目沿這些網格線的位置,以及它們在水平和垂直方向上跨越的寬度。

可用于控制網格項的位置以及它們如何跨越這些行的屬性是:

  • grid-column-start
  • grid-column-end
  • grid-row-start
  • grid-row-end

(1)grid-column-start

可以使用 grid-column-start 屬性來指定網格項沿網格容器內的列網格線的水平起始位置。這個開始位置定義了網格項目左邊緣的開始。

使用下面的網格布局,來定位第一個網格項并將其水平起始位置設置為第 2 列。

選擇第一個子元素,并定位:

.container div:nth-of-type(1) {
  grid-column-start: 2;
}

這樣,所選網格項的水平起始位置將位于第二條垂直網格線(第 2 列)上。

上圖中,第一個網格項現在從第 2 列開始,而其他網格項被移動,換行到了新行或在網格上創建了空白空間。

(2)grid-column-end

除了使用 grid-column-start 指定網格項的水平起始位置外,還可以使用 grid-column-end 屬性設置網格項的結束位置。

例如:

.container div:nth-of-type(1) {
  grid-column-start: 2;
  grid-column-end: 4;
}

這使得第一個網格項從第 2 列開始,跨越兩條網格線,并在第 4 行結束。使用 grid-column-start 和 grid-column-end 屬性,可以有效地控制網格的水平起始位置以及它跨越網格的寬度。

結果如下:

(3)grid-row-start

可以使用 grid-row-start 屬性來指定網格項沿網格容器內水平(行)網格線的垂直起始位置。它用于設置網格項開始的行。

例如:

.container div:nth-of-type(2) {
  grid-row-start: 1;
}

在上面的代碼中,使用 grid-row-start屬性將第二個 div 元素的垂直起始位置設置為第 1 行。

結果如下:

(4)grid-row-end

可以使用 grid-row-end 屬性來指定網格項沿網格容器內水平(行)網格線的垂直結束位置。

例如:

.container div:nth-of-type(2) {
   grid-row-start: 1;
   grid-row-start: 4;
}

這使得第二個網格項從第一行開始,跨越三個網格線,在第 4 行結束。使用 grid-row-start 和 grid-row-end 屬性,可以有效地控制網格項的垂直起始位置及其在網格中的高度。

結果如下:

(5)其他

上面的四個屬性使用特定的網格線來確定網格項在網格內的位置,它們的屬性值有以下幾種:

  • <line>:可以是一個數字來指代相應編號的網格線,也可使用名稱指代相應命名的網格線。
  • span <number>:網格項將跨越指定數量的網格軌道。
  • span <name>:網格項將跨越一些軌道 ,直到遇到指定命名的網格線。
  • auto:自動布局,或者自動跨越,或者跨越一個默認的軌道。

下面來看一個例子:

.container div:nth-of-type(1) {
  grid-column-start: span 2;
}

這里使用 span 來表示第一個單元格跨越了2個網格。

結果如下:

下面來結合使用上面的四個屬性:

.container div:nth-of-type(1) {
  grid-column-start: 1;
  grid-column-end: 3;
  grid-row-start: 2;
  grid-row-end: 4;
}

結果如下:

10. 隱式網格軌道

當我們設置的網格不足以放下所有的網格項時,就會自動出現一些網格軌道,這些多出來的行的高度是auto的,可以使用grid-auto-columns和 grid-auto-rows 屬性來指定自動生成的網格軌道(又稱為隱式網格軌道)的大小。

例如:

.container {
   display: grid;
   grid-auto-columns: 100px
   grid-auto-rows: 80px
}

這里, grid-auto-columns 屬性指定了隱式創建的網格垂直方向軌道的寬度為 100px,grid-auto-rows 屬性指定了隱式創建的網格水平方向軌道的高度為 80px。

11. 速記屬性

像大多數 CSS 屬性一樣,CSS Grid 提供了一些速記屬性,它們提供了一種更短、更先進的方式來同時設置多個 CSS Grid 屬性的值。使用這些速記屬性,我們就可以編寫更簡潔 更易讀的樣式,從而節省開發時間。下面就來看看這些屬性。

(1)gap

column-gap 和 row-gap 屬性用來設置網格之前的距離,即網格線的寬度??梢酝ㄟ^ gap 屬性簡寫這兩個屬性,其語法如下:

gap: <row-gap> <column-gap>

其中 <column-gap> 是一個可選值,如果省略,則設置為與 <row-gap> 相同的值。下面來看一個例子:

.container {
   display: grid;
   gap: 20px;
}

這在網格容器中的所有列和行之間都添加了 20px 的空間,與下面的代碼等價:

.container { 
 display: grid; 
 column-row: 20px;
 row-gap: 20px;
}

(2)place-items

place-items 用來設置 align-items 和 justify-items 屬性的值,它能夠同時控制所有網格項目的水平和垂直對齊。

它接受兩個值:第一個值設置 align-items 屬性的值,第二個值設置 justify-items 屬性的值。如果未指定第二個值,則將第一個值指定為兩個屬性的值。

例如:

.container { 
 display: grid; 
 place-items: center; 
}

這會將 align-items 和 justify-items 屬性的值都設置為 center,將所有網格項放置在其網格區域的中心。

(3)place-content

place-content 用來設置網格屬性 align-content 和 justify-content 的值,它能夠同時控制網格容器內整個網格的水平和垂直對齊方式。

它接受兩個值:第一個值設置 align-content 屬性的值,第二個值設置 justify-content 屬性的值。如果未指定第二個值,則將第一個值指定為兩個屬性的值。

例如:

.container { 
 display: grid; 
 place-content: center; 
}

這樣就會將 align-content 和 justify-content 屬性的值都設置為 center,使整個網格在網格容器中水平和垂直居中。

(4)place-self

place-items 可以設置 align-self 和 justify-self 屬性的值。它能夠控制單個網格項目在其網格區域內的水平和垂直對齊方式。

它接受兩個值:第一個值設置 align-self 屬性的值,第二個值設置 justify-self 屬性的值。如果未指定第二個值,則將第一個值指定為兩個屬性的值。

例如:

.item { 
   place-self: end center;
}

在上面的代碼中,align-self 屬性的值設置為end,這會將網格項垂直向下推到其網格單元格的底部。justify-self 屬性設置為 center,將網格項目水平放置在其單元格的中心。

結果如下:

(5)grid-column

grid-column 是 grid-column-start 和 grid-column-end 屬性的簡寫屬性。它可以指定網格項沿網格容器內的列網格線的水平起始位置以及網格項應該結束的位置。

grid-column的語法如下:

grid-column: column-start / column-end;

grid-column 屬性接受兩個由斜線 (/) 分隔的網格線值,其中:

  • 第一個值 column-start 是 grid-column-start 屬性的值。
  • 第二個值 column-end 是 grid-column-end 屬性的值。
  • 斜杠 (/) 用作這兩個值之間的分界線,因為兩者都可以包含一個或多個空格。因此,需要通過斜線來消除錯誤和歧義。此外,作為最佳實踐,建議在斜杠 (/) 的兩側添加一哥空格,以使 CSS 更具可讀性。

例如:

.gird-item {
  grid-column: 1 / 3;
}

上面的代碼告訴網格項從網格中的第 1 列水平跨越到第 3 列,與下面的代碼等價:

.gird-item {
  grid-column-start: 1;
  grid-column-end: 3;
}

(6)grid-row

grid-row 屬性的工作方式與 grid-column 屬性一樣。它是 grid-row-start 和 grid-row-end 屬性的簡寫屬性。它可以指定網格項沿網格容器中的行網格線的垂直起始位置,以及網格項應該在網格中的何處結束。

例如:

.gird-item {
  grid-column: 2 / 5;
}

這就會使得網格項的高度從網格中的第 2 行向下跨越到第 5 行。

grid-column 和 grid-row 屬性中也可以使用 span 關鍵字,以下兩者是等效的:

.gird-item {
  grid-column: 1 / 3;
  grid-row: 1 / 3;
}

.gird-item {
  grid-column: 1 / span 2;
  grid-row: 1 / span 2;
}

斜杠后面的部分可以省略,表示跨越第一個網格。

(7)grid-template

grid-template-columns、grid-template-rows、grid-template-areas這三個屬性可以簡寫在grid-template屬性中。

grid-template屬性有三個屬性值:

  • none:將三個屬性都設置為其初始值,即一行一列一個單元格;
  • subgrid:把grid-template-columns和grid-template-rows設置為subgrid,并且把grid-template-areas設置為初始值;
  • grid-template-rows/grid-template-columns:將grid-template-columns和grid-template-rows設為指定值,而grid-template-areas設置為none。

(8)grid-area

grid-area 屬性指定網格元素在網格布局中的大小和位置,它是grid-row-start、grid-column-start、grid-row-end、grid-column-end屬性的合并簡寫形式,其語法如下:

grid-area: <row-start> / <column-start> / <row-end> / <column-end>;

對于下面這段代碼:

.container div:nth-of-type(1) {
  grid-column-start: 1;
  grid-column-end: 3;
  grid-row-start: 2;
  grid-row-end: 4;
}

可以簡寫成這樣:

.container div:nth-of-type(1) {
  grid-area: 2 / 1 / 4 / 3;
}

除此之外,grid-area 屬性還可以對網格元素進行命名。命名的網格元素可以通過容器的 grid-template-areas 屬性來引用。

下面來看一個例子:

.item1 { grid-area: header; }
.item2 { grid-area: main; }
.item3 { grid-area: sideber; }
.item4 { grid-area: footer; }
 
.container {
  grid-template-areas:
    'header header header'
    'menu main sideber'
    'footer footer footer';
}

結果如下:

(9)grid

grid 屬性可以為每個顯式網格容器屬性(例如 grid-template-rows、grid-template-columns 和 grid-template-areas)以及每個隱式網格容器屬性設置一個值(例如 grid-auto-rows、grid-auto-columns 和 grid-auto-flow)在一個聲明中。

grid 屬性的語法如下:

<grid-template> | <grid-template-rows> / [ auto-flow && dense? ] <grid-auto-columns>? | [ auto-flow && dense? ] <grid-auto-rows>? / <grid-template-columns>

12. CSS Grid 調試

上面我們介紹了如何定義 CSS Grid 布局,那該如何調試呢?Chrome DevTools 支持對 Grid 布局進行提示。如果一個元素是 Grid 布局,在 DevTools 的 Elements 面板中,Grid 布局的容器元素上就會顯示一個 grid 的標識,如下:

點擊這個 grid 標志,頁面的 grid 網格就會顯示數網格區域以及網格線,并且會為網格線進行編號,如下:

下面切換到 Layout 選項卡,就可以看到 Grid 布局的一些選項,我們可以設置頁面上是否顯示軌道的寬度/高度,是否展示網格區域的名稱,是否顯示網格線的延長,是否顯示網格線的名稱。除此之外,還會顯示當前頁面上所有使用 Grid 布局的地方,可以進行顯示隱藏:

通過這些選項,就可以對 CSS Grid 布局進行調試了。

13. CSS Grid 生成器

最后來分享幾個實用的 CSS Grid 生成器。通過這些生成器,可以可視化得調整 Grid 布局,最終會拿到生成的 Grid 布局代碼。

(1)CSS Grid Generator

在線體驗:https://cssgrid-generator.netlify.app/

(2)CSS Layout Generator

在線體驗:https://layout.bradwoods.io/customize。

(3)Grid LayoutIt

在線體驗:https://grid.layoutit.com/。

(4)Griddy

在線體驗:https://griddy.io/。

(5)Cssgr.id

在線體驗:https://cssgr.id/。

責任編輯:姜華 來源: 前端充電寶
相關推薦

2022-10-13 09:01:24

GridCSS二維布局

2021-12-01 09:53:46

CSS 技巧代碼重構

2022-10-08 00:02:00

CSS工具系統

2020-03-26 10:43:57

CSS Grid Ge Grid代碼

2023-02-07 09:01:22

CSS

2017-10-10 15:52:17

前端FlexboxCSS Grid

2025-04-27 09:12:42

2018-08-08 15:57:05

csshtml前端

2025-04-08 05:55:00

CSS布局Grid

2017-03-12 10:38:56

Chromewindows

2022-03-23 08:01:36

CSSGrid小游戲

2021-09-09 08:47:52

Dependency 安全漏洞工具

2022-04-15 14:57:57

Flex布局鴻蒙操作系統

2024-05-24 08:35:00

Angular 18版本更新

2024-03-21 08:21:34

Java 22Java 語言開發工具包

2010-08-24 11:00:55

DIV CSS

2024-04-23 10:29:44

SassCSS前端

2023-10-20 10:11:00

Nuxt 3.8前端

2021-10-11 08:21:23

@Valuespringspring框架

2010-09-02 13:53:58

CSS Sprites
點贊
收藏

51CTO技術棧公眾號

青春草视频在线| 国产日韩欧美一区二区东京热| 特黄特色欧美大片| 在线视频你懂得一区二区三区| 五月天久久狠狠| 国产av精国产传媒| 国产精品美女久久久浪潮软件| 永久555www成人免费| 韩国三级丰满少妇高潮| 免费日韩电影| 一级特黄大欧美久久久| 日韩精品一区二区三区丰满| 成人高潮片免费视频| 日韩不卡在线观看日韩不卡视频| 乱亲女秽乱长久久久| 在线 丝袜 欧美 日韩 制服| 日韩视频在线直播| 欧美羞羞免费网站| 久久视频这里有精品| 国产传媒在线播放| 日本一区二区成人| 国产一区二区三区免费不卡| 91丨porny丨在线中文 | 米仓穗香在线观看| 成全电影播放在线观看国语| kk眼镜猥琐国模调教系列一区二区| 国产欧美久久一区二区| 亚洲免费黄色网址| 亚洲午夜一级| 欧美成人午夜激情视频| 精品伦精品一区二区三区视频密桃 | 瑟瑟在线观看| 国产福利一区二区三区视频在线| 国产精品久久久久秋霞鲁丝 | 99精品热视频只有精品10| 两个人的视频www国产精品| 黄免费在线观看| 蜜桃久久久久| 欧美大片拔萝卜| 国产欧美精品一二三| 国产69精品久久| 在线视频中文字幕一区二区| jizzjizzxxxx| 狠狠躁少妇一区二区三区| 亚洲午夜久久久久久久久电影院| 日韩最新中文字幕| 老司机在线永久免费观看| 欧美激情综合五月色丁香| 免费看成人片| 青青草娱乐在线| 91美女片黄在线| 久久久7777| 亚洲三区在线播放| 99国内精品久久| 精品无人区一区二区三区| 亚洲精品成人电影| 不卡一卡二卡三乱码免费网站| 91九色在线免费视频| 亚洲第一成人av| 成人性色生活片免费看爆迷你毛片| 999国产在线| 丰满人妻一区二区| 成人sese在线| 另类欧美小说| 国产精品视频一区二区久久| 国产性色一区二区| 日韩hmxxxx| 日本在线视频站| 亚洲日本中文字幕区| 日本美女爱爱视频| www.youjizz.com在线| 欧美性xxxxx极品娇小| 国产激情在线观看视频| 日本精品另类| 5858s免费视频成人| 一级 黄 色 片一| 第四色在线一区二区| 精品日本一线二线三线不卡| 中国极品少妇xxxx| 九九视频精品全部免费播放| 伊人伊成久久人综合网小说| 国产3级在线观看| 欧美a级在线| 69视频在线播放| 国产99久久久久久免费看| 精品一区二区三区久久| 国产91免费视频| 久久久资源网| 一区二区在线看| 亚洲乱码中文字幕久久孕妇黑人| 123成人网| 精品日韩av一区二区| 一区二区三区四区免费| 五月精品视频| 91精品国产免费久久久久久| 一区二区不卡视频在线观看| 成人妖精视频yjsp地址| 午夜欧美一区二区三区免费观看| av网站在线看| 欧洲精品一区二区| 麻豆tv在线观看| 久久综合亚洲| 欧美激情第一页xxx| 男人天堂视频网| 丁香婷婷综合激情五月色| 日韩电影免费观看高清完整| 青草视频在线免费直播| 欧美色爱综合网| 国产精品手机在线观看| 天天做天天爱天天综合网| 97精品一区二区三区| 国产喷水福利在线视频| 国产三级久久久| 欧美午夜小视频| 99久久999| 亚洲视频axxx| 91av在线免费视频| 国产中文字幕一区| 日韩欧美三级电影| av福利在线导航| 3atv在线一区二区三区| 韩国三级hd中文字幕| 亚洲理论在线| 97超碰人人模人人爽人人看| 日本高清在线观看wwwww色| 精品免费在线视频| 欧美双性人妖o0| 亚洲国产日韩欧美在线| 国产精品久久久久免费a∨| 香蕉av在线播放| 亚洲国产另类av| 香蕉视频xxxx| 99久久精品国产亚洲精品| 国产成人精品在线播放| 欧美日韩伦理片| 精品久久中文字幕| 在线黄色免费网站| 国内在线观看一区二区三区| 成人免费自拍视频| 巨大荫蒂视频欧美另类大| 欧美色综合网站| 日本人亚洲人jjzzjjz| 麻豆久久婷婷| 免费毛片一区二区三区久久久| 超碰高清在线| 亚洲国产又黄又爽女人高潮的| www.天天色| 成人午夜av电影| 妺妺窝人体色777777| 91蝌蚪精品视频| 欧美精品18videos性欧| 欧美 中文字幕| 午夜精品123| 精品影片一区二区入口| 国产亚洲在线观看| 欧美综合激情| 蜜桃视频成人m3u8| 日韩视频免费大全中文字幕| 一级淫片免费看| 亚洲精品伦理在线| 五月天激情小说| 亚洲综合精品四区| 日韩精品成人一区二区在线观看| 99精品国自产在线| 久久视频在线观看免费| 国产草草影院ccyycom| 亚洲制服欧美中文字幕中文字幕| 理论片大全免费理伦片| 美女国产一区| 一区在线电影| 国产成人在线中文字幕| 91成人免费观看网站| 成人精品一区二区三区免费| 3d成人h动漫网站入口| 久久网一区二区| 久久综合九色综合97婷婷女人| 亚州精品一二三区| 欧美99在线视频观看| 精品国产一区二区三区免费| 羞羞影院欧美| 欧美成人精品激情在线观看| 色综合免费视频| 欧美性色综合网| 欧美成人精品激情在线视频| 91女人视频在线观看| 亚洲 欧美 另类人妖| 欧美午夜电影在线观看| 欧美亚洲丝袜| 国产精品日韩精品在线播放| 午夜欧美不卡精品aaaaa| 91成人高清| 亚洲成色777777女色窝| 中文字幕 国产| 亚洲国产乱码最新视频| 色屁屁草草影院ccyy.com| 国产99久久久国产精品免费看 | 国产白丝在线观看| 亚洲一区二区久久| 亚洲精品97久久中文字幕无码 | 亚洲91精品在线| 91女主播在线观看| 亚洲国产精品人人爽夜夜爽| 一区二区三区亚洲视频| 精品久久久久久久大神国产| 日韩激情小视频| 国产欧美日韩综合| 亚洲图片综合网| 韩国女主播成人在线| av黄色在线网站| 欧美福利影院| 亚洲国产精品久久久久婷婷老年| 国产精品乱战久久久| 成人中文字幕+乱码+中文字幕| 人在线成免费视频| 久久999免费视频| 97在线观看免费观看高清| 日韩不卡在线观看| 性生活视频软件| 欧美日韩激情一区二区三区| 影音先锋在线国产| 亚洲国产精品影院| 天天看片中文字幕| 国产精品国产三级国产普通话蜜臀| 真人bbbbbbbbb毛片| 国产成人久久精品77777最新版本| 亚洲欧美自偷自拍另类| 亚洲免费影院| 狠狠干 狠狠操| 国产主播精品| 黄色一级大片免费| 午夜欧美在线| 在线成人性视频| 成人情趣视频网站| 亚洲精蜜桃久在线| 精品国产一区二区三区香蕉沈先生| 精品午夜一区二区三区| 精品人人人人| 国产一区免费在线| 久久国产精品色av免费看| 成人免费视频观看视频| 日韩在线精品强乱中文字幕| 亚洲一区中文字幕在线观看| 麻豆国产一区| 亚洲最大成人在线| 日韩成人在线看| 俄罗斯精品一区二区| 一区二区在线视频观看| 成人免费视频网站| 国产精品对白| 精品视频第一区| 久久99久久人婷婷精品综合 | 邻家有女韩剧在线观看国语| 国产午夜精品久久久| 国内精品一区视频| 中文字幕欧美日韩va免费视频| 搞黄视频免费在线观看| 中文字幕亚洲无线码a| 欧美黑人激情| 欧美日韩福利电影| www555久久| 国产69久久精品成人看| 另类激情视频| 国产视频999| 一区二区三区亚洲变态调教大结局 | 91视频在线视频| 欧美日韩国产影片| 精品区在线观看| 亚洲国内精品在线| 欧美日本网站| 北条麻妃在线一区二区| 日本高清成人vr专区| 97香蕉久久超级碰碰高清版| 欧美精品总汇| 91精品国产高清久久久久久91裸体| www.成人网| 日韩福利视频| 亚洲天天综合| 免费成人午夜视频| 男女性色大片免费观看一区二区 | 日韩一级片免费视频| 亚洲免费影院| 永久免费黄色片| 97久久超碰精品国产| 少妇的滋味中文字幕bd| 亚洲一区二区三区不卡国产欧美 | 麻豆91精品| 成人黄色一级大片| 99久久免费视频.com| 国产精品无码无卡无需播放器| 亚洲另类在线视频| 亚洲乱码国产乱码精品| 日韩亚洲欧美在线| 国产资源在线观看| 欧美精品精品精品精品免费| 另类图片综合电影| 粉嫩av一区二区三区免费观看| 国产va免费精品观看精品视频| 超碰97免费观看| 免费在线亚洲| 制服.丝袜.亚洲.中文.综合懂| 久久精品男人天堂av| www.99re7| 欧美影院一区二区三区| 丁香六月色婷婷| 久久精品视频导航| 亚洲成a人片| 国产精品视频免费一区| 成人羞羞视频播放网站| 俄罗斯av网站| 国产成人小视频| 很污很黄的网站| 在线观看日韩av先锋影音电影院| 国产黄色小视频在线观看| 中文字幕亚洲欧美日韩高清| 96av在线| 痴汉一区二区三区| 亚洲综合色网| 污污动漫在线观看| 欧美国产激情一区二区三区蜜月| 91蜜桃视频在线观看| 欧美大片在线观看一区| 黄色av电影在线观看| 国产美女精品免费电影| 美女久久99| 青青视频在线播放| 暴力调教一区二区三区| 黄页网站免费观看| 日韩色在线观看| 中文字幕在线播放网址| 亚洲精品免费在线视频| 图片小说视频色综合| 中文字幕成人在线视频| 欧美国产视频在线| 天堂网视频在线| 亚洲人成网站色ww在线| 视频二区不卡| 欧美午夜精品久久久久免费视| 国产精品毛片| 国产麻豆天美果冻无码视频| 天天综合色天天综合| 无码国产精品96久久久久| 97视频在线播放| 牛牛精品成人免费视频| a√天堂在线观看| 久久嫩草精品久久久精品| 国产区一区二区三| 亚洲欧美中文字幕在线一区| 韩漫成人漫画| 日本午夜精品一区二区| 肉丝袜脚交视频一区二区| 免费在线观看a视频| 欧美日韩国产影片| 中文在线字幕免费观看| 电影午夜精品一区二区三区| 在线播放一区| 一本色道久久综合亚洲精品图片| 一本一本久久a久久精品综合麻豆| 欧美成熟毛茸茸| 国产精品国产自产拍高清av水多| 欧美中文一区二区| 五月激情婷婷在线| 亚洲精品免费看| 丰满大乳国产精品| 欧美一级淫片videoshd| 精品国精品国产自在久国产应用| 九九热99视频| 亚洲精品一卡二卡| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 欧美日韩一卡二卡三卡| 在线中文字幕视频观看| 国产自产精品| 奇米亚洲午夜久久精品| 欧美精品一区二区成人| 亚洲精品国产精品国产自| 浪潮色综合久久天堂| 丰满女人性猛交| 成人精品一区二区三区四区| 4438国产精品一区二区| 日韩在线视频二区| 精品欠久久久中文字幕加勒比| 99视频在线免费| 亚洲男同性视频| 日韩欧美在线观看一区二区| 国产精品综合不卡av| 影音先锋亚洲电影| 999福利视频| 亚洲激情视频在线| 色999久久久精品人人澡69| 男女猛烈激情xx00免费视频| 久久精品亚洲国产奇米99| 国产浮力第一页| 国产v综合ⅴ日韩v欧美大片| 中文不卡在线| 手机看片福利视频| 精品三级在线观看| 国产成人午夜性a一级毛片| 99在线精品免费视频| 国产精品久久国产精麻豆99网站| 囯产精品久久久久久| 国产日韩专区在线|