中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CSS二維網格系統Grid介紹

發布時間:2020-05-28 13:44:46 來源:億速云 閱讀:254 作者:鴿子 欄目:web開發

術語:Grid

Grid 是二維網格系統。它可以用來構建復雜的布局以及較小的界面。

屬性:display

只需要把一個元素的 display 屬性設置為 grid,它就成了網格。

.grid-to-be {
    display: grid;
}

這樣就使 .grid-to-be 成為 grid 容器,并使其子項成為 grid 項目。

術語:網格線

在定義明確的網格軌道時會創建網格線。你可以用它們去放置網格項。

術語:網格軌道

網格線是兩條網格線之間的空間。網格中的行和列是網格軌道。

屬性:grid-template-columns

可以使用 grid-template-columns 屬性來創建列。要定義列,應該按照你希望它們在網格中出現的順序,把grid -template-columns 屬性設置為列大小。我們來看一下:

.grid {
    display: grid;
    grid-template-columns: 100px 100px 100px;
}

這里定義了三個寬度為 100px 的列。所有網格項將會按順序排列在這些列中。行高將等于該行中最高元素的高度,但是可以用 grid-template-rows 來進行更改。

請注意,在僅定義列而未定義行的情況下,元素將會填充列,然后在行中折返。這是由于 Grid 使用了網格線和網格線創建的隱式網格。

屬性:grid-template-rows

grid-template-rows 用于定義網格中行的數量和大小。它的語法和 grid-template-columns 類似。

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

如果只有 grid-template-rows 而沒有 grid-template-columns 屬性會導致列寬等于該行中最寬元素的寬度。

屬性:grid-template

grid 是 grid-template-rows、grid-template-columns 和 grid-template-areas 三個屬性的簡寫。

使用方式如下:

.grid {
    grid-template:
        "header    header     header"  80px
        "nav       article    article" 600px
        / 100px 1fr;
}

你可以像平時那樣去定義模板區域,將每行的寬度放在最右面,最后再把所有列的寬度放在正斜杠之后。像以前一樣,你可以把所有內容放在一行。

數據類型:

fr 是為 CSS 網格布局創建的新單位。 fr 使你不需要計算百分比就能創建靈活的網格, 1fr 表示可用空間的一等份。可用空間被分為等份數字的總數個,所以 3fr 4fr 3fr 把空間劃分為 3 + 4 + 3 = 10 個部分,分別為三行或列分配 3、4 和 3 個等份的可用空間。例如:

.grid {
    display: grid;
    grid-template-columns: 3fr 4fr 3fr;
}

如果將固定單位與彈性單位相混合,則每個等份的可用空間是在減去固定空間后計算的。讓我們看另一個例子:

.grid {
    display: grid;
    grid-template-columns: 3fr 200px 3fr;
}

單個等份的寬度是這樣計算的:( .grid 的寬度 - 200px) / (3 + 3) 。如果存在間隔(gutter)的話,其空間一開始也會從 .grid 的寬度中減去。這是 fr 和 % 之間的區別,即百分比不包括你用 grid-gap 定義的 gutter。

這里的 3fr 200px 3fr 基本上等于 1fr 200px 1fr。

顯式網格和隱式網格

顯式網格是使用屬性 grid-template-rows 或 grid-template-columns 創建的網格。隱式網格由 Grid 創建的 網格線 和 網格軌道 組成,用來保存帶有 grid-template-* 屬性的手動創建的網格之外的項目。

自動放置(Auto-placement)

當我們創建這樣的網格時:

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

即使我們只定義了列,但作為 .grid 直接子項的單個單元格仍按行放置。這是因為 Grid 包含自動放置規則。

屬性:grid-auto-columns

沒有被 grid-template-columns 所定義的隱式創建的網格列軌道所創建的列的大小,可以用 grid-template-columns 屬性定義,其默認值為 auto;你可以把它設置為自己所需要的值。

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

屬性:grid-auto-rows

grid-auto-rows 的工作方式類似于 grid-template-columns 。

.grid {
    display: grid;
    grid-template-rows: 100px 100px 100px;
    grid-auto-rows: 50px;
}

屬性:grid-auto-flow

grid-auto-flow 屬性控制 網格單元 如何流入網格,其默認值為 row。

.grid {
    display: grid;
    grid-template-columns: 100px 100px 100px;
    grid-auto-flow: column;
}

上面網格中的“網格單元”將會被一一填充,直到沒有剩余的項目為止。

基于行的放置

用行號將項目放置在網格中的操作被稱為基于行的放置。

屬性:grid-row-start

如果你希望特定的網格項從特定的行開始,則可以這樣:

.grid-item {
    grid-row-start: 3;
}

屬性:grid-row-end

如果你希望特定的網格項目在特定的行上結束,則可以這樣:

.grid-item {
    grid-row-end: 6;
}

屬性:grid-column-start

如果你希望特定的網格項目從特定的列開始,可以這樣:

.grid-item {
    grid-column-start: 3;
}

屬性:grid-column-end

如果你希望特定的網格項在特定的列上結束,可以這樣:

.grid-item {
    grid-column-end: 6;
}

屬性:grid-row 和 grid-column

可以用 grid-row 和 grid-column 屬性來手動放置和調整網格項目的大小。每個屬性都是其各自的 star 和 end 屬性的簡寫:grid-row-start,grid-row-end,grid-column-start 和 grid-column-end。

用正斜杠 “/ ”來分隔開始和結束值:

.grid-item {
    grid-column: 3 / 5;
    grid-row: 2 / 7;
}

屬性:grid-area

你可以把 grid-area 用于對網格行和網格列的簡寫。它是這樣的:

.grid-item {
    grid-area: 2 / 3 / 7 / 5;
}

該代碼的行為與上一個標題中的代碼相同。

跨網格的元素

要使一個元素跨網格,可以使用 grid-row 或 grid-column 屬性。設置起始行 1 和結束行 -1。此處 1 表示相關軸上最左邊的網格線,-1 表示相關軸上最右邊的網格線。在從右到左的書寫腳本中,這是相反的,即 1 表示最右邊的行,-1 表示最左邊的行。

.grid-item-weird {
    grid-column: 1 / -1;
}

如果你希望單個項目占據整個網格,可以對 grid-row 和 grid-column 都這樣做:

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

或者簡單地:

.grid-item-weird {
    grid-area: 1 / 1 / -1 / -1;
}

關鍵字:span

當使用 grid-row 和 grid-column 時,不用顯式定義行號,而是可以用 span 關鍵字來聲明該項應涵蓋的行數或列數:

.grid-item {
    grid-column: 3 / span 2;
}

你也可以把項目固定在終點線上,并朝另一個方向跨越。下面的代碼實現了與上面相同的結果:

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

以用相同的方式把 span 應用在行上。

術語:網格單元

網格單元格是四個相交的網格線之間的空間,就像表格中的單元格一樣。

術語:網格區域

網格區域是占據網格上一個矩形區域的網格單元。它們是用命名的網格區域或基于行的放置創建的。

屬性:grid-template-areas (& grid-area)

除了用諸如 span、grid-column之類的東西放置和調整單個網格項目外,還可以用所謂的“模板區域”。grid-template-area 允許你命名網格區域,以便網格項目可以進一步填充它們。

.grid {
    display: grid;
    grid-template-columns: 100px 1fr 100px;
    grid-template-rows: 100px 800px 100px;
    grid-template-areas:
        "header     header   header"
        "sidebar-1  content  sidebar-2"
        "footer     footer   footer"
}

這里的一對引號代表一行網格。你可以將所有內容放在一行中,而不用列對齊,但是我所做的只是為了使它看起來更加整潔。我首先定義了三列三行,然后為每個單元命名。通過在第一行中重復執行三次 “header”,告訴 CSS 要做的是用名為 header 的網格項覆蓋整個過程。其余的也一樣。

以下是通過用 grid-template-areas 命名每個網格項目,使其擁有為其定義的空間的方式:

.header {
    grid-area: header
}
.sidebar-1 {
    grid-area: sidebar-1
}
.content {
    grid-area: content
}
.sidebar-2 {
    grid-area: sidebar-2
}
.footer {
    grid-area: footer
}

沒有什么比這更容易了,尤其是用于布置內容的 CSS 其他方法。

在前面你已經看到 grid-area 也用于基于行的定位。

如果想把單元格留空,則可以用點 . 來設置:

.grid {
    display: grid;
    grid-template-columns: 100px 1fr 100px;
    grid-template-rows: 100px 800px 100px;
    grid-template-areas:
        "header header header"
        "sidebar content sidebar"
        "footer footer ."
}

在這里,頁腳以第二列結束。

屬性:grid-template

grid 是 grid-template-rows,grid-template-columns 和grid-template-areas 三個屬性的簡寫。

使用方式如下所示:

.grid {
    grid-template:
        "header    header     header"  80px
        "nav       article    article" 200px
        / 100px auto;
}

可以像通常那樣定義模板區域,把每行的寬度放在其最右面,然后將所有列的寬度放在正斜杠之后。像以前一樣,你可以把所有得內容放在同一行。

函數:repeat()

repeat() 函數有助于使 網格軌道 列表變得不是那么多余,并為其添加了語義層。使用起來非常簡單直觀。我們來看一下:

你也可以重復某種形式的軌道列表,如下所示:

.grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr 2fr); // this is the same as: 1fr 2fr 1fr 2fr 1fr 2fr
}

repeat() 不必是值的唯一部分。你可以在其前后添加其他的值。例如:grid-template-columns:2fr repeat(5,1fr) 4fr;。

屬性:grid

這里的 grid 是 grid-template-rows、 grid-template-columns、 grid-template-areas、 grid-auto-rows、 grid-auto-columns 和 grid-auto-flow 六個屬性的簡寫。

首先,你可以像這樣使用 grid-template(上一個示例):

.grid {
    grid:
        "header    header     header"     80px
        "nav       article    article"    200px
        / 100px auto;
}

其次它不是你看上去的那樣,grid 與 css 屬性不一樣:

是的,你沒有看錯:一個名為 css 的屬性,所有 CSS 屬性的簡寫。我也是在某次思考中偶然知道了它。但是現在我不會教你怎么用,以后有可能會。

第三,你以某種方式使用 grid。你可以將 grid-template-rows 與 grid-auto-columns 或 grid-auto-rows 結合使用。語法非常簡單:

.grid-item {
    grid: <grid-template-rows> / <grid-auto-columns>; 
    grid: <grid-auto-rows> / <grid-template-columns>; 
}

例如:

.grid-item-1 {
    grid: 50px 200px 200px/ auto-flow 60px;
}
.grid-item-2 {
    grid: auto-flow 50px / repeat(5, 1fr);
}

請注意,在該值之前應該先使用 auto-flow 關鍵字。

術語:Gutter

Gutter 是單獨分隔 網格行 和 網格列 的空間。 grid-column-gap, grid-row-gap 和 grid-gap 是用于定義 gutter 的屬性。

屬性:grid-row-gap

grid-row-gap 用于定義各個 網格行 之間的空間。它是這樣的:

.grid {
    display: grid;
    grid-template-rows: 100px 100px 100px;
    grid-row-gap: 10px;
}

這會將 網格行 彼此隔開10個像素。

屬性:grid-column-gap

grid-column-gap 用于定義各個 網格列 之間的空間。它是這樣的:

.grid {
    display: grid;
    grid-template-columns: 100px 100px 100px;
    grid-column-gap: 10px;
}

這會將 網格列 彼此隔開 10 個像素。

屬性:grid-gap

grid-gap 是將 grid-column-gap 和 grid-row-gap 結合在一起的簡寫屬性。一個值定義了兩個 gutter。例如:

.grid {
    display: grid;
    grid-template-columns: 100px 100px 100px;
    grid-template-rows: 100px 100px 100px;
    grid-gap: 10px;
}

屬性:order

可以用 order 屬性來控制網格單元的順序。看下面的例子:

.grid {
    display: grid;
    grid-template-columns: 100px 100px 100px;
    grid-template-rows: 100px 100px 100px;
    grid-gap: 10px;
}
.grid .grid-cell:nth-child(5) {
    order: 1;
}

在代碼中,第五個網格單元被放置在網格的最后,因為其他網格單元根本沒有定義順序。如果定義了順序,則會遵循數字順序。兩個或多個 網格單元 可以有相同的順序。具有相同順序或完全沒有順序的文件將會根據 HTML 文檔的邏輯順序進行放置。再看下面:

.grid {
    display: grid;
    grid-template-columns: 100px 100px 100px;
    grid-template-rows: 100px 100px 100px;
    grid-gap: 10px;
}
.grid .grid-cell {
    order: 1
}
.grid .grid-cell:nth-child(5) {
    order: 2;
}

上面的例子產生的結果與前面的例子相同。

函數:minmax()

maxmax() 函數是 CSS 網格布局的新增功能。此功能為我們提供了指定 網格軌道 的最小和最大尺寸的方法。

看下面的例子:

.grid {
    display: grid;
    grid-template-columns: 1fr minmax(50px, 100px) 1fr;
}

使用上面的代碼,在減小窗口寬度時,中間列將保持 100px 的寬度,直到第一列和最后一列減小到其內容的寬度為止。這對于制作響應式布局特別有用。

關鍵字:auto

如果父容器的尺寸是固定的(例如固定寬度),則 auto 關鍵字作為網格項目的寬度將會使該項目充滿容器的整個寬度。在有多個項目的情況下,就像 fr 那樣劃分空間。但是如果將 auto 與 fr 一起使用,則 auto 表現為該項目內容的寬度,剩余的可用空間被劃分為 fr。

函數:fitcontent()

當你希望寬度或高度表現得像 auto 一樣,但又希望受到最大寬度或高度約束時,可以用 fitcontent() 函數.

.grid-item {
    width: fitcontent(200px);
}

在這里,最小為適合內容,最大為 200px。

關鍵字:auto-fill

你可以用 auto-fill 來用最多的 網格軌道 填充相關的軸(行或列)而不會溢出。要實現這個目的,需要用到 repeat() 函數:

.grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, 50px);
}

但這會降低單個軌道的靈活性。通過與 minmax() 一起使用,可以同時具有自動填充功能和靈活性。

.grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(50px, 1fr));
}

這樣,你可以至少包含一列,并且在特定瀏覽器寬度中包含多個 50px 的列。

請注意,即使可能未用單元格填充,auto-fill 也會創建網格軌道。

auto-fit

auto-fit 的行為與 auto-fill 相同,不同之處在于它會折疊所有空的重復軌道。空軌道是指沒有放置網格項目或跨越網格項目的軌道。

dense

借助 dense 關鍵字,你可以將項目回填到 空網格單元 中,這些單元是因為你嘗試做了一些的奇怪的事(例如spanning)而被創建的。在任何 span 內你都可以將 dense 關鍵字與 grid-auto-flow 配合使用,如下所示:

.grid {
    display: grid;
    grid-template-column: repeat(auto-fill, minmax(50px, 1fr));
    grid-auto-flow: dense;
}

你可以把它用在照片庫之類的頁面中,但在用于表單時要特別小心,因為這可能會打亂表單子元素的特定順序。

瀏覽器支持

在撰寫本文時,瀏覽器對 CSS 網格布局有很好的支持。根據 caniuse.com 的說法,除了 Internet Explorer 11部分支持 -ms 前綴和 Opera Mini 之外,所有主流瀏覽器均支持 CSS 網格布局。

以上就是CSS Grid 深入理解的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郑州市| 菏泽市| 大田县| 德惠市| 吕梁市| 浙江省| 中卫市| 化州市| 扶余县| 铜山县| 疏附县| 南昌县| 洪湖市| 阿坝县| 临海市| 青海省| 车险| 沂南县| 东方市| 辽中县| 上犹县| 自治县| 图木舒克市| 延庆县| 肇东市| 会昌县| 康平县| 霍州市| 凤庆县| 遂川县| 汪清县| 玉龙| 和平县| 双柏县| 华蓥市| 上饶市| 西乌| 余江县| 德江县| 浮山县| 曲靖市|