阿里雲最近在作活動,低至2折,有興趣能夠看看:promotion.aliyun.com/ntms/yunpar…css
爲了保證的可讀性,本文采用意譯而非直譯。html
CSS Grid Generator是一個由Sarah Drasner建立的免費工具。它是一個可視化設計工具,容許我們建立一個基本的 grid 佈局,而後就可使用生成對應的代碼,幫助我們快速佈局。前端
第一次進入是界面是這樣子的:git
當我正在學習一些東西時,我發現最好的學習方法是使用現有的工具構建實用的東西。 在本文中,我們先從一個簡單的佈局開始,而後使用CSS Grid Generator建立在實際項目中使用所需的代碼。github
首先從一個典型的佈局開始,以下所示:瀏覽器
接着在 CSS Grid Generator 界面的右側更新對應的如下內容:網絡
間距讓我們的內容之間有必定的空白。能夠只使用列間距,但我想在 Header 和 Footer 以前留出一些空白,因此還同時使用行間距。ide
接下來,就是須要定義應用程序的不一樣區域。在 CSS Grid Generator 中,能夠單擊並拖動到須要合併地方來建立一個區域。我們但願Footer
跨越整個網格,側邊欄佔用一個單元格,主內容區域跨越2
列,Footer
跨越4
列,最終效果,以下:工具
這看起來有點像我們想要的佈局,但仍然須要定義一些具體的尺寸。 在CSS Grid Generator 會注意到每行和每列旁邊都有一個輸入框,可用於設置特定大小。佈局
這看起來更像更像我們想要的佈局,可是你可能會問1fr
是多少。
軌道能夠用任何長度單位來定義。
Grid
還引入了一個額外的長度單位,以幫助各位建立靈活的Grid
軌道。新的fr
單元表示網格容器中可用空間的一小部分。
第二行的1fr
會告訴區域佔用剩餘的可用空間。若是將容器設置爲100vh
,就會佔據整個頁面的內容,列也是如此。
點擊「請給我示例中的代碼」就能夠查看對應佈局生成的 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 - .div
5添加一些背景色:
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;
}
複製代碼
最終效果:
兩個相鄰的網絡線之間爲網絡軌道。
圖中的同方向 1 和 2, 2 和 3 都是相鄰的網絡線,固然同方向的 1 和 3 或者不一樣方向的 1 和 2 就不是相鄰的網絡線。
相鄰的網絡線爲網格軌道,以下,黑色1 和 2 之間就構成了網絡軌道(背景深橘色):
上面總共有 5 個網絡軌道,水平方向灰色 1 和 2, 2 和 3, 3 和 4,豎直方向黑色的 1 和 2, 2 和 3,共 5 個。
兩個相鄰的列網絡線和兩個相鄰的行網絡線組成的就是網絡單元,以下面的深橘色背景就是網絡單元。
網絡單元要與網絡項(項目)區別開來,網絡項是 Html 中能夠找的到 Dom 元素,網絡單元是在定義容器的時候,它就會分割出來的一個一個單元格。
四個網絡線包圍的總空間。
剩餘空間分配數,用於在一系列長度值中分配剩餘空間,若是多個已指定了多個部分,則剩下的空間根據各自的數字按比例分配。
代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug。
慕課grid教程
乾貨系列文章彙總以下,以爲不錯點個Star,歡迎 加羣 互相學習。
我是小智,公衆號「大遷世界」做者,對前端技術保持學習愛好者。我會常常分享本身所學所看的乾貨,在進階的路上,共勉!
關注公衆號,後臺回覆福利,便可看到福利,你懂的。