CSS基礎篇--快速使用CSS Grid佈局,實現響應式設計

經常使用Grid佈局屬性介紹

下面從一個簡單Grid佈局例子提及。css

CSS Grid 佈局由兩個核心組成部分是 wrapper(父元素)和 items(子元素)。 wrapper 是實際的 grid(網格),items grid(網格) 內的內容。瀏覽器

下面是一個 wrapper 元素,內部包含6個 items :app

<div class="wrapper">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
</div>

要把 wrapper 元素變成一個 grid(網格),只要簡單地把其 display 屬性設置爲 grid 便可:佈局

.wrapper {
    display: grid;
}

圖片描述

Columns(列) 和 rows(行)

爲了使其成爲二維的網格容器,咱們須要定義列和行。讓咱們建立3列和2行。咱們將使用grid-template-rowgrid-template-column屬性。spa

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

grid-template-columns的3個值表示三列,相應的數值表示列寬即都爲100px。
grid-template-rows的2個值表示兩行,相應的數值表示行高即都爲50pxcode

獲得的結果以下:
圖片描述教程

咱們能夠變化一下行高跟列寬的值看下效果,代碼:圖片

.wrapper {
    display: grid;
    grid-template-columns: 200px 50px 100px;
    grid-template-rows: 100px 30px;
}

效果如圖:
圖片描述get

放置 items(子元素)

咱們使用與以前相同的 HTML 標記,爲了幫助咱們更好的理解,咱們在每一個 items(子元素) 加上了單獨的 class :域名

<div class="wrapper">
  <div class="item1">1</div>
  <div class="item2">2</div>
  <div class="item3">3</div>
  <div class="item4">4</div>
  <div class="item5">5</div>
  <div class="item6">6</div>
</div>

建立一個 3×3 的 grid(網格):

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

獲得以下效果:
圖片描述

咱們只在頁面上看到 3×2 的 grid(網格),而咱們定義的是 3×3 的 grid(網格)。這是由於咱們只有 6 個 items(子元素) 來填滿這個網格。若是咱們再加3個 items(子元素),那麼最後一行也會被填滿。

定位和調整 items(子元素) 大小,咱們將使用 grid-column grid-row 屬性來設置:

.item1 {
    grid-column-start: 1;
    grid-column-end: 4;
}

固然能夠有簡寫方式:

.item1 {
    grid-column: 1 / 4;
}

上面代碼意思就是: item1 佔據從第一條網格線開始,到第四條網格線結束。顯示效果以下:
圖片描述

若是你不明白咱們設置的只有 3 列,爲何有4條網格線呢?看看下面這個圖像,黑色的列網格線你就明白了:
圖片描述

若是上面的看懂了,來個複雜點的鞏固下。

.item1 {
    grid-column-start: 1;
    grid-column-end: 3;
}
.item3 {
    grid-row-start: 2;
    grid-row-end: 4;
}
.item4 {
    grid-column-start: 2;
    grid-column-end: 4;
}

效果如圖:
圖片描述

響應式佈局例子

實現如圖效果:
圖片描述

結構佈局

<style>
.container {
    display: grid;    
    grid-template-columns: repeat(12, 1fr);
    grid-template-rows: 50px 350px 50px;
    grid-gap: 5px;
}
</style>
<div class="container">
  <div class="header">HEADER</div>
  <div class="menu">MENU</div>
  <div class="content">CONTENT</div>
  <div class="footer">FOOTER</div>
</div>

使用 grid-template-columns 屬性建立一個 12 列的網格,每一個列都是一個單位寬度(總寬度的 1/12 )。(愚人碼頭注:其中, repeat(12, 1fr) 意思是 12 個重複的 1fr 值。 fr 是網格容器剩餘空間的等分單位。)

使用 grid-template-rows 屬性建立 3 行,第一行高度是 50px ,第二行高度是 350px 和第三行高度是 50px。

使用 grid-gap 屬性在網格中的網格項之間添加一個間隙

添加 grid-template-areas

這個屬性被稱爲網格區域,也叫模板區域,可以讓咱們輕鬆地進行佈局實驗。

要將它添加到網格中,咱們只需給網格容器加一個 grid-template-areas 屬性便可。 語法可能有點奇怪,由於它不像其餘的 CSS 語法。例如:

.container {
    display: grid;
    grid-gap: 5px;    
    grid-template-columns: repeat(12, 1fr);
    grid-template-rows: 50px 350px 50px;
    grid-template-areas:
        "h h h h h h h h h h h h"
        "m m c c c c c c c c c c"
        "f f f f f f f f f f f f";
}

上面代碼建立3行12列,上面grid-template-areas屬性中的值,每行表明一行,用網格術語來講是 網格軌道(Grid Track) ,每一個字符( h,m,c,f)表明一個網格單元格。愚人碼頭注:實際上是 網格區域(Grid Area) 名稱,你可使用任意名稱

你可能已經猜到,我選擇了字符 h,m,c,f,是由於他們是 header, menu, content 和 footer 的首字母。 固然,我能夠把它們叫作任何想要的名稱,可是使用他們所描述的東西的第一個字符更加容易讓人理解。

給網格項設定網格區域名稱

如今咱們須要將這些字符與網格中的網格項創建對應的鏈接。 要作到這一點,咱們將在網格項使用 grid-area 屬性:

.header {
    grid-area: h;
}
.menu {
    grid-area: m;
}
.content {
    grid-area: c;
}
.footer {
   grid-area: f;
}

這樣就實現了上面的佈局效果。

嘗試其它佈局

1.把 menu 移到右邊

grid-template-areas:
        「h h h h h h h h h h h h」
        "c c c c c c c c c c m m」
        「f f f f f f f f f f f f」;

實現後的效果:
圖片描述

2.使用點 . 來建立空白的網格單元格

grid-template-areas:
        「. h h h h h h h h h h .」
        "c c c c c c c c c c m m」
        「. f f f f f f f f f f .」;

實現效果:
圖片描述

3.真正的響應式佈局
假設你想在移動設備上查看的是:標題旁邊是菜單。那麼你能夠簡單地這樣作:

@media screen and (max-width: 640px) {
    .container {
        grid-template-areas:
            "m m m m m m h h h h h h"
            "c c c c c c c c c c c c"
            "f f f f f f f f f f f f";
    }
}

能夠看到以下效果:
圖片描述

注:全部這些更改都是使用純 CSS 完成的,不須要修改 HTML 。這被稱爲結構和表現分離, Grid(網格) 佈局真正作到了這點。

瀏覽器兼容

如圖所示:
圖片描述

參考地址

相關文章
相關標籤/搜索