天天看點

CSS 網格 Gird 布局

CSS 網格 Gird 布局

建立網格 Gird

通過将屬性 ​

​display​

​ 的值設為 ​

​grid​

​,HTML 元素就可以變為網格容器。

注意: 在 CSS 網格中,父元素稱為容器(container),它的子元素稱為項(items)。

#container {
  display: grid;
}      

列,行 Column Row

在一個網格容器中使用 ​

​grid-template-columns​

​ 屬性可以添加一些列,示例如下:

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

上面的代碼會在網格容器中添加兩列,寬度均為 50px。 ​

​grid-template-columns​

​ 屬性值的個數表示網格的列數,每個值表示相應的列寬度。

建立的網格會自動設定行數。 要手動調整行,使用 ​

​grid-template-rows​

​ 屬性。

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

機關 Unit

在 CSS 網格中,可以使用絕對機關(如 ​

​px​

​)或相對機關(如 ​

​em​

​)來定義行或列的大小。 下面的機關也可以使用:

​fr​

​:設定列或行占剩餘空間的比例,

​auto​

​:設定列寬或行高自動等于它的内容的寬度或高度,

​%​

​:将列或行調整為它的容器寬度或高度的百分比,

grid-template-columns: 1fr 100px 2fr;      

間距 Gap

如果需要在列與列之間添加一些間距,我們可以使用 ​

​grid-column-gap​

​.

grid-column-gap: 20px;      

還可以用 ​

​grid-row-gap​

​設定行間距。

grid-row-gap: 5px;      

​grid-gap​

​ 屬性是前兩個挑戰中出現的 ​

​grid-row-gap​

​ 和 ​

​grid-column-gap​

​ 的簡寫屬性,它更友善使用。 如果 ​

​grid-gap​

​ 隻有一個值,那麼這個值表示行與行之間、列與列之間的間距均為這個值。

如果有兩個值,那麼第一個值表示行間距,第二個值表示列間距

grid-gap: 10px 20px;      

空間大小 Spacing

到目前為止,所有的讨論都是圍繞網格容器的。 ​

​grid-column​

​ 屬性是用于網格項本身的屬性。

網格中,假想的水準線和垂直線被稱為線(lines)。 這些線在網格的左上角從 1 開始編号,垂直線向右、水準線向下累加計數。

要設定一個網格項占據幾列,使用 ​

​grid-column​

​ 屬性加上網格線條的編号來定義網格項開始和結束的位置。

grid-column: 2 / 4;      

也可以設定它占用多行。 使用 ​

​grid-row​

​ 屬性來定義一個網格項開始和結束的水準線。

grid-row: 2 / 4;      

對齊 Align

在 CSS 網格中,每個網格項的内容分别位于被稱為單元格(cell)的框内。 使用網格項的 ​

​justify-self​

​ 屬性,設定其内容的位置在單元格内沿水準軸的對齊方式。 預設情況下,這個屬性的值是 ​

​stretch​

​,這将使内容占滿整個單元格的寬度。 該 CSS 網格屬性也可以使用其他的值:

​start​

​:使内容在單元格左側對齊,

​center​

​:使内容在單元格居中對齊,

​end​

​:使内容在單元格右側對齊

justify-self: center;      

正如能設定網格項沿水準方向的對齊方式一樣,我們也可以設定網格項沿豎直方向的對齊方式。 為此,可以對網格項使用 ​

​align-self​

​ 屬性來實作。

align-self: end;      

CSS 網格中的網格項共享對齊方式。 可以分别設定它們的對齊方式,也可以對網格容器使用 ​

​justify-items​

​ 使它們一次性沿水準軸對齊。 這個屬性能接受之前兩個中學到的所有值作為屬性值,但與之前不同的是,它會将網格中 所有 的網格項按所設定的方式對齊。

justify-items: center;      

對網格容器使用 ​

​align-items​

​ 屬性可以讓網格中所有的網格項沿豎直方向對齊。

align-items: end;      

分區 Area

可以将網格中的一些單元格組合成一個區域(area),并為該區域指定一個自定義名稱。 可以通過給容器加上 ​

​grid-template-areas​

​來實作:

grid-template-areas:
  "header header header"
  "advert content content"
  "advert footer footer";      

在為網格添加區域模闆後,可以通過引用所定義的區域的名稱,将元素放入相應的區域。 為此,需要對網格項使用 ​

​grid-area​

​:

.item1 {
  grid-area: header;
}      

​grid-area​

​ 屬性還有另一種使用方式。 如果網格中沒有定義區域模闆,也可以像這樣為它添加一個模闆:

item1 { grid-area: 1/1/2/4; }      

上例中數字代表這些值:

grid-area: horizontal line to start at / vertical line to start at / horizontal line to end at / vertical line to end at;      

重複 Repeat

使用 ​

​repeat​

​ 方法指定行或列的重複次數,後面加上逗号以及需要重複的值。

grid-template-columns: repeat(2,1fr,50px) 20px;      

限制項目大小 Limit Item Size

内置函數 ​

​minmax​

​ 也可用于設定 ​

​grid-template-columns​

​ 和 ​

​grid-template-rows​

​ 的值。 它的作用是在網格容器改變大小時限制網格項的大小。 為此,需要指定網格項允許的尺寸範圍。

grid-template-columns: 100px minmax(50px, 200px);      

自動填充 Auto Fill

repeat 方法帶有一個名為自動填充(auto-fill)的功能。 它的功能是根據容器的大小,盡可能多地放入指定大小的行或列。 可以通過結合 ​

​auto-fill​

​ 和 ​

​minmax​

​ 來更靈活地布局。

grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));      
grid-template-columns: repeat(auto-fit, minmax(60px, 1fr));      

嵌套網格 Nested Grid

display: grid;
grid-template-columns: auto 1fr;      
css