使用 CSS Grid Generator來快速使用及學習 Grid 佈局


阿里雲最近在作活動,低至2折,有興趣能夠看看promotion.aliyun.com/ntms/yunpar…css


爲了保證的可讀性,本文采用意譯而非直譯。html

CSS Grid Generator

CSS Grid Generator是一個由Sarah Drasner建立的免費工具。它是一個可視化設計工具,容許我們建立一個基本的 grid 佈局,而後就可使用生成對應的代碼,幫助我們快速佈局。前端

第一次進入是界面是這樣子的:git

CSS Grid 佈局示例

當我正在學習一些東西時,我發現最好的學習方法是使用現有的工具構建實用的東西。 在本文中,我們先從一個簡單的佈局開始,而後使用CSS Grid Generator建立在實際項目中使用所需的代碼。github

首先從一個典型的佈局開始,以下所示:瀏覽器

接着在 CSS Grid Generator 界面的右側更新對應的如下內容:網絡

  • 行: 4
  • 列: 3
  • 列間距: 20
  • 行間距: 20

間距讓我們的內容之間有必定的空白。能夠只使用列間距,但我想在 HeaderFooter 以前留出一些空白,因此還同時使用行間距。ide

接下來,就是須要定義應用程序的不一樣區域。在 CSS Grid Generator 中,能夠單擊並拖動到須要合併地方來建立一個區域。我們但願Footer跨越整個網格,側邊欄佔用一個單元格,主內容區域跨越2列,Footer 跨越4列,最終效果,以下:工具

這看起來有點像我們想要的佈局,但仍然須要定義一些具體的尺寸。 在CSS Grid Generator 會注意到每行和每列旁邊都有一個輸入框,可用於設置特定大小。佈局

  • Header: 100px height
  • Sidebars: 200px width
  • Footer: 50px height

這看起來更像更像我們想要的佈局,可是你可能會問1fr是多少。

軌道能夠用任何長度單位來定義。Grid還引入了一個額外的長度單位,以幫助各位建立靈活的Grid軌道。新的fr單元表示網格容器中可用空間的一小部分。

第二行的1fr會告訴區域佔用剩餘的可用空間。若是將容器設置爲100vh,就會佔據整個頁面的內容,列也是如此。

CSS Grid Generated 生成的代碼

點擊「請給我示例中的代碼」就能夠查看對應佈局生成的 CSS 代碼:

.parent { 
display: grid; 
grid-template-columns: 200px 1fr 1fr 200px; 
grid-template-rows: 100px 1fr 50px; 
grid-column-gap: 20px;
grid-row-gap: 20px; 
.div1 { grid-area: 1 / 1 / 2 / 5; } 
.div2 { grid-area: 2 / 1 / 3 / 2; } 
.div3 { grid-area: 2 / 2 / 3 / 4; } 
.div4 { grid-area: 2 / 4 / 3 / 5; } 
.div5 { grid-area: 3 / 1 / 4 / 5; } 
}
複製代碼

建立一個simple-layout.htm並添加如下代碼:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Simple Layout</title>
  <style>
    body {
      margin: 0;
      padding: 0;
    }
  </style>
</head>
<body>

</body>
</html>
複製代碼

接下來添加上面生成的 CSS:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Simple Layout</title>
  <style>
    body {
      margin: 0;
      padding: 0;
    }
    .parent {
      display: grid;
      grid-template-columns: 200px 1fr 1fr 200px;
      grid-template-rows: 100px 1fr 50px;
      grid-column-gap: 20px;
      grid-row-gap: 20px;
      height: 100vh;
    }

    .div1 {
      grid-area: 1 / 1 / 2 / 5;
    }

    .div2 {
      grid-area: 2 / 1 / 3 / 2;
    }

    .div3 {
      grid-area: 2 / 2 / 3 / 4;
    }

    .div4 {
      grid-area: 2 / 4 / 3 / 5;
    }

    .div5 {
      grid-area: 3 / 1 / 4 / 5;
    }
  </style>
</head>
<body>

</body>
</html>
複製代碼

接着添加對應的標籤:

<body>
  <div class="parent">
    <div class="div1">
      Header
    </div>
    <div class="div2">
      Left Sidebar
    </div>
    <div class="div3">
      Main Content
    </div>
    <div class="div4">
      Right Sidebar
    </div>
    <div class="div5">
      Footer
    </div>
  </div>

</body>
複製代碼

最後添加下面的CSS,它將爲.div1 - .div5添加一些背景色:

div:not(.parent) {
  padding: 10px;
  background-color: rgb(199, 199, 199);
}
複製代碼

運行:

這看起來很好,但你但願它佔據整個瀏覽器窗口。因此須要向.parent類添加height: 100vh

.parent {
  display: grid;
  grid-template-columns: 200px 1fr 1fr 200px;
  grid-template-rows: 100px 1fr 50px;
  grid-column-gap: 20px;
  grid-row-gap: 20px;
  height: 100vh;
}
複製代碼

最終效果:

網格軌道(Grid Track) 加餐

兩個相鄰的網絡線之間爲網絡軌道。

圖中的同方向 1 和 2, 2 和 3 都是相鄰的網絡線,固然同方向的 1 和 3 或者不一樣方向的 1 和 2 就不是相鄰的網絡線。

相鄰的網絡線爲網格軌道,以下,黑色1 和 2 之間就構成了網絡軌道(背景深橘色):

上面總共有 5 個網絡軌道,水平方向灰色 1 和 2, 2 和 3, 3 和 4,豎直方向黑色的 1 和 2, 2 和 3,共 5 個。

網格單元(Grid Cell) 加餐

兩個相鄰的列網絡線和兩個相鄰的行網絡線組成的就是網絡單元,以下面的深橘色背景就是網絡單元。

網絡單元要與網絡項(項目)區別開來,網絡項是 Html 中能夠找的到 Dom 元素,網絡單元是在定義容器的時候,它就會分割出來的一個一個單元格。

網格區域(Grid Area) 加餐

四個網絡線包圍的總空間。

fr單位(加餐)

剩餘空間分配數,用於在一系列長度值中分配剩餘空間,若是多個已指定了多個部分,則剩下的空間根據各自的數字按比例分配。

代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug

參考

dev.to/therealdanv…

慕課grid教程

交流(歡迎加入羣,羣工做日都會發紅包,互動討論技術)

乾貨系列文章彙總以下,以爲不錯點個Star,歡迎 加羣 互相學習。

github.com/qq449245884…

我是小智,公衆號「大遷世界」做者,對前端技術保持學習愛好者。我會常常分享本身所學所看的乾貨,在進階的路上,共勉!

關注公衆號,後臺回覆福利,便可看到福利,你懂的。

相關文章
相關標籤/搜索