亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

CSS Grid 網格布局全解析

2024-07-11 08:59:09
字體:
來源:轉載
供稿:網友

介紹

CSS Grid(網格) 布局使我們能夠比以往任何時候都可以更靈活構建和控制自定義網格。 Grid(網格) 布局使我們能夠將網頁分成具有簡單屬性的行和列。它還能使我們在不改變任何HTML的情況下,使用 CSS 來定位和調整網格內的每個元素。它允許 HTML 純粹作為內容的容器。HTML 結構不再受限于樣式表現,比如不要為了實現某種布局而多次嵌套,現在這些都可以讓 CSS 來完成。

定義一個網格

Grid(網格) 模塊為 display 屬性提供了一個新的值: grid 。當你將任何元素的 display 屬性設置為 grid 時,那么這個元素就是一個 網格容器(grid container),它的所有直接子元素就成了 網格項(grid items)。

讓我們創建創建一個 3×3 的布局,做一個 Tic-Tac-Toe (井字游戲) 棋盤。

首先,我們將寫一些 HTML:

    <div class="game-board">      <div class="box"></div>      <div class="box"></div>      <div class="box"></div>      <div class="box"></div>      <div class="box"></div>      <div class="box"></div>      <div class="box"></div>      <div class="box"></div>      <div class="box"></div>    </div>

如您所見, .game-board div 是網格容器,而 .box div 是網格項?,F在我們將通過 Grid 布局來實現 3×3 布局。

    .game-board     {        display: grid;        grid-template-rows: 200px 200px 200px;        grid-template-columns: 200px 200px 200px;    }

在這里,我還使用了其他兩個屬性。

grid-template-rows 屬性允許我們指定網格中的行數及行的高度。那么你應該猜到另一個屬性是干什么的了。

grid-template-columns 屬性允許我們指定網格中的列數及列的寬度。您可以指定任何單位的尺寸大小,包括像素,百分比和其他單位 fr ,我們將在下一步學習。

fr 單位(等分)

fr 是為網格布局定義的一個新單位。它可以幫助你擺脫計算百分比,并將可用空間等分。

例如,如果在網格容器中設置這個規則: grid-template-rows: 2fr 3fr , 那么你的網格容器將首先被分成 2 行。然后將數字部分加在一起,這里總和為 5, 即 5 等分。

就是說,我們將有 2 行:第一排占據垂直空間的 2/5 。 第二排占垂直空間的 3/5 。

回到我們的 Tic-Tac-Toe 例子,我們使用 fr 代替 px 。我們想要的是,應該有3行3列。所以,我們只需要用 3 個 1fr 替換 3 個 200px 即可:

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

這里特別需要注意的是: fr 單位是等分可用空間,或者說剩余空間。看個例子

    .game-board     {        grid-gap:2px;        display: grid;        width:300px;        height:200px;        grid-template-rows: 100px 1fr 1fr;        grid-template-columns: 1fr 50px 1fr;    }

布局效果如圖:

你會看到 fr 單位是將 總的尺寸 減去 單元格明確尺寸后,在等分剩余空間。 grid-gap 是間隔。

repeat() 函數

在某些情況下,我們可能有很多的列和行。在 grid-template 屬性中指定每一個值可能會很乏味。幸運的是,有一個 repeat 函數 ,就像任何一個循環重復多少次輸出某個給定值。它有兩個參數。第一個是迭代次數,第二個是要重復的值。我們用 repeat 函數重寫上面的例子。

    .game-board    {        display: grid;        grid-template-rows: repeat(3, 1fr);        grid-template-columns: repeat(3, 1fr);    }

等價于:

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

grid-template 屬性

grid-template 屬性是 grid-template-rows grid-template-columns 的簡寫語法。 這是它的語法:grid-template: rows/columns;

我們上面的例子使用這個簡寫語法后,看起來非常整齊。

    .game-board    {        display: grid;        grid-template: repeat(3, 1fr) / repeat(3, 1fr);    }

看,只需使用 2 行代碼,就可以使用網格布局創建 3×3 網格。

例子:

HTML

<div class="game-board">  <div class="box">X</div>  <div class="box">O</div>  <div class="box">O</div>  <div class="box">O</div>  <div class="box">X</div>  <div class="box">O</div>  <div class="box">O</div>  <div class="box">X</div>  <div class="box">X</div></div>

CSS

.game-board{    width: 600px;    height: 600px;    margin: 0 auto;  background-color: #34495e;  color: #fff;  border: 6px solid #2c3e50;  border-radius: 10px;        display: grid;    grid-template: repeat(3, 1fr) / repeat(3, 1fr);}.box{  border: 6px solid #2c3e50;  border-radius: 2px;  font-family: Helvetica;  font-weight: bold;  font-size: 4em;  display: flex;  justify-content: center;  align-items: center;}

網格線編號,網格單元格,網格軌道

網格線是存在于列和行每一側的線。一組垂直線將空間垂直劃分成列,而另一組水平線將空間水平劃分成行。這意味著在我們之前的例子中,有四條垂直線和四條水平線包含它們之間的行和列。

在將網格項從一個位置跨越到另一個位置時,網格線變得非常有用。

網格軌道是兩條線之間的空間。 網格軌道可以是一行或一列。

網格單元格很像表格單元,是兩條相鄰垂直線和兩條相鄰水平線之間的空間。 這是網格中最小的單位。

定位網格項

我采取了前面的例子的網格,并用數字從1到9標記每個單元格,而不是X或O,下面是它的樣子:

假設我想將第 6 個框移到第 2 個框的位置。沒有CSS網格,不改變 HTML 的情況下,這幾乎是一個不可能的任務,至少對我而言。但是如果我們使用網格模塊,改變網格中網格項的位置是一件輕而易舉的事情。要將第6個框移到第2個框的位置,我們必須確切知道第2個框在哪里。通過網格線編號的幫助,我們可以很容易地找到這個位置。第二個方框位于第2條列網格線之后,第3條列網格線之前,第1條行網格線之下,第2條行網格線之上。現在我們可以使用以下屬性將這些網格線編號分配到第6個框中:

  1. grid-column-start
  2. grid-column-end
  3. grid-row-start
  4. grid-row-end

前兩個屬性對應于垂直網格線,也就是列網格線的開始和結束。 最后兩個屬性是指水平網格線,也就是行網格線的開始和結束。 讓我們分配正確的網格線編號來移動第 6 個框。

    .box:nth-child(6)    {        grid-row-start: 1;        grid-row-end: 2;        grid-column-start: 2;        grid-column-end: 3;    }

還有兩個簡寫屬性用于將行和列的開始網格線和結束網格線設置在一起。

    .box:nth-child(6)    {        grid-row: 1 / 2;        grid-column: 2 / 3;    }

此外,還有一個 grid-area 屬性是所有四個上述屬性的簡寫屬性。 它按以下順序取值:grid-area: <row-start> / <column-start> / <row-end> / <column-end>;

現在我們的例子可以寫成這樣

    .box:nth-child(6)    {        grid-area: 1 / 2 / 2 / 3;    }

上面的代碼行也可以進一步減少。正如您所看到的,這個框只占用一行和一個列,所以我們只需要指定行和列的起始線,而無需結束線的值

    .box:nth-child(6)    {        grid-area: 1 / 2;    }

如果我們想要第6個框跨越兩個框的區域呢? 這很容易通過將 column-end 值加 1 的辦法來完成。

    .box:nth-child(6)    {        grid-area: 1 / 2 / 2 / 4;    }

您也可以使用 span 關鍵字和占據的 軌道數量,來代替指定 grid-row-end grid-column-end 的結束網格線編號。 在這種情況下,第6個框是跨越 2 列和 1 行。

    .box:nth-child(6)    {        grid-area: 1 / 2 / 2 / span 2;    }

網格區域命名

grid-area 屬性也可以用來命名網格的某一個部分,然后我們可以用 grid-template-areas 屬性來定位。讓我們創建一個簡單的 bread-and-butter 布局,頂部有一個 top, nav,中間有 main 和 aside,下面是 footer。這是所需的HTML:

    <div class="container">      <header></header>      <nav></nav>      <main></main>      <aside></aside>      <footer></footer>    </div>

我們需要使用 grid-area 屬性來命名每個區域:

    header    {      grid-area: header;      background-color: #9b59b6;    }         nav    {      grid-area: nav;      background-color: #3498db;    }         main    {      grid-area: main;      background-color: #2ecc71;    }         aside    {      grid-area: aside;      background-color: #f1c40f;    }         footer    {      grid-area: footer;      background-color: #1abc9c;    }

現在我們將使用 grid-template-areas 屬性來指定每個網格區域所占據的行和列。 以下是我們如何做到的:

    .container    {          display: grid;          grid-template-rows: 1fr 5fr 1fr;          grid-template-columns: 2fr 5fr 3fr;          grid-template-areas:            "header  header  header"            "nav     main    aside"            "footer  footer  footer";          grid-gap: .75em;    }

請注意,header 和 footer 單詞重復三次。 這表明,header 和 footer 橫跨 3 列的寬度。 你可以把它全部寫在一行中,但是把每一行寫在一個單獨的行上很好,很干凈。 你可以看到我在這里使用了一個新的屬性 grid-gap 。 它所做的只是在兩個網格區域之間添加一個間距。 你也可以使用 grid-row-gap grid-column-gap 來為行和列指定不同的間距值。

例子:

HTML

<div class="container">  <header></header>  <nav></nav>  <main></main>  <aside></aside>  <footer></footer></div>

CSS

.container{  display: grid;  grid-template-rows: 1fr 5fr 1fr;  grid-template-columns: 2fr 5fr 3fr;  grid-template-areas:    "header header header"    "nav    main   aside"    "footer footer footer";  grid-gap: .75em;  background-color: #eee;  width: 100vw;  height: 100vh;}header{  grid-area: header;  background-color: #9b59b6;}nav{  grid-area: nav;  background-color: #3498db;}main{  grid-area: main;  background-color: #2ecc71;}aside{  grid-area: aside;  background-color: #f1c40f;}footer{  grid-area: footer;  background-color: #1abc9c;}

結論

CSS網格布局允許我們更快地布局,并且更容易控制。在本教程中,我們學習了如何用CSS網格來定義布局, fr 單位,repeat 函數和一些網格系統中特定的術語。我們還學習了如何使用網格線和網格命名區域在網格容器內定位網格項目

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲欧洲黄色| 91最新在线免费观看| 日韩欧美国产中文字幕| 97视频在线观看免费高清完整版在线观看| 亚洲国产中文字幕在线观看| 国产精品久久久久久婷婷天堂| 国产成人精品一区二区| 国产区亚洲区欧美区| 欧美自拍视频在线观看| 日韩欧美精品在线观看| 国产精品视频一区二区三区四| 国产亚洲a∨片在线观看| 亚洲国产美女久久久久| 亚洲开心激情网| 91av在线影院| 国产日韩欧美中文在线播放| 久久国产精彩视频| 91po在线观看91精品国产性色| 中文字幕欧美在线| 国产视频自拍一区| 在线看日韩欧美| 亚洲人成电影网站色xx| 午夜精品久久久久久久白皮肤| 国产精品第二页| 在线精品高清中文字幕| 91av免费观看91av精品在线| 欧美一区二区三区精品电影| 色综合视频一区中文字幕| 日韩**中文字幕毛片| 91产国在线观看动作片喷水| 国产精品丝袜久久久久久不卡| 精品美女久久久久久免费| 亚洲精品白浆高清久久久久久| 国产成人精品最新| 亚洲欧美中文字幕在线一区| 国产一区二区三区免费视频| 国产精品7m视频| 国产免费一区二区三区香蕉精| 中国日韩欧美久久久久久久久| 亚洲精品国产欧美| 91久久精品日日躁夜夜躁国产| 亚洲欧洲国产一区| 欧美国产在线电影| 国产成人97精品免费看片| 日韩av中文字幕在线免费观看| 92国产精品视频| 精品视频在线导航| 成人黄色av网站| 久久久国产一区二区三区| 综合网中文字幕| 国产欧美一区二区白浆黑人| 日韩麻豆第一页| 日韩在线观看网址| 日本国产高清不卡| 国内外成人免费激情在线视频| 最近2019免费中文字幕视频三| 国产v综合v亚洲欧美久久| 欧美极品少妇xxxxⅹ裸体艺术| 在线视频中文亚洲| 国产精品久久一区| xxav国产精品美女主播| 国产香蕉97碰碰久久人人| 最近中文字幕日韩精品| 亚洲精品日韩丝袜精品| 欧美成人午夜免费视在线看片| 欧美成人在线免费视频| 亚洲国产女人aaa毛片在线| 最近日韩中文字幕中文| 久久久久久中文| 欧美性高潮在线| 欧美成人sm免费视频| 欧美成人在线影院| 欧美极品在线视频| 狠狠色狠狠色综合日日小说| 欧美国产亚洲精品久久久8v| 国产精品美女av| 97成人精品区在线播放| 国产精品九九九| 日本不卡视频在线播放| 亚洲天天在线日亚洲洲精| 欧美激情国产精品| 欧美激情一区二区三区高清视频| 456国产精品| 欧美—级a级欧美特级ar全黄| 欧美激情一区二区久久久| 欧美视频国产精品| 国产精品网站视频| 国产精品免费观看在线| 欧美激情乱人伦| 亚洲精品视频久久| 精品久久久久久久久久ntr影视| 亚洲国产精品va在线观看黑人| 亚洲网站在线播放| 68精品国产免费久久久久久婷婷| 欧美激情区在线播放| 欧美天天综合色影久久精品| 热门国产精品亚洲第一区在线| 国产自产女人91一区在线观看| 精品中文视频在线| 欧美激情区在线播放| 久久亚洲国产精品| 神马国产精品影院av| 成人免费激情视频| 日韩小视频网址| 亚洲精品网址在线观看| 欧美日韩福利在线观看| 粗暴蹂躏中文一区二区三区| 亚洲影院色在线观看免费| 欧美多人爱爱视频网站| 国产精品都在这里| 亚洲男女性事视频| 91在线精品视频| 日韩动漫免费观看电视剧高清| 亚洲国产精品久久久久秋霞蜜臀| 亚洲欧美在线第一页| 欧美激情在线播放| 色偷偷偷亚洲综合网另类| 91精品久久久久久久久久久久久久| yellow中文字幕久久| 国产原创欧美精品| 欧美国产日韩一区| 亚洲精品98久久久久久中文字幕| 欧美野外猛男的大粗鳮| 成人黄色av网| 国产欧美va欧美va香蕉在| 日韩av综合网| 原创国产精品91| 日韩精品小视频| 国产999精品| 欧美二区乱c黑人| 日韩欧美一区二区三区| 91精品国产色综合久久不卡98口| www日韩欧美| 亚洲国产欧美日韩精品| 精品爽片免费看久久| 久久亚洲精品网站| 色偷偷综合社区| 亚洲一区www| 久久久成人的性感天堂| 国产精品久久久久久搜索| 97精品视频在线| 久久久精品亚洲| 欧美国产视频一区二区| 日韩电影免费在线观看| 欧美电影在线观看完整版| 欧美性色视频在线| 国内精品久久久久久久| 久久91超碰青草是什么| 欧美丝袜一区二区| 久久99国产综合精品女同| 在线亚洲国产精品网| 久久好看免费视频| 91经典在线视频| 亚洲性xxxx| 成人精品aaaa网站| 97香蕉超级碰碰久久免费软件| 国产精品久久久久7777婷婷| 91av在线网站| 日韩暖暖在线视频| 亚洲人成电影网站色…| 狠狠躁18三区二区一区| 麻豆精品精华液| 中文字幕欧美精品日韩中文字幕| 69精品小视频|