CSS Grid 布局完全指南1-grid基礎知識

CSS Grid 布局是 CSS 中最強大的布局系統。與 flexbox 的一維布局系統不同,CSS Grid 布局是一個二維布局系統,也就意味著它可以同時處理列和行。通過將 CSS 規則應用于 父元素 (成為 Grid Container 網格容器)和其 子元素(成為 Grid Items 網格項),你就可以輕松使用 Grid(網格) 布局。

簡介

CSS Grid(網格) 布局(又稱為 “Grid(網格)” ),是一個二維的基于網格的布局系統它的目標是完全改變我們基于網格的用戶界面的布局方式。CSS 一直用來布局我們的網頁,但一直以來都存在這樣或那樣的問題。一開始我們用表格(table),然后是浮動(float),再是定位(postion)和內嵌塊(inline-block),但是所有這些方法本質上都是只是 hack 而已,并且遺漏了很多重要的功能(例如垂直居中)。Flexbox 的出現很大程度上改善了我們的布局方式,但它的目的是為了解決更簡單的一維布局,而不是復雜的二維布局(實際上 Flexbox 和 Grid 能結合在一起工作,而且配合得非常好)。Grid(網格) 布局是第一個專門為解決布局問題而創建的 CSS 模塊,我們終于不需要想盡辦法hack 頁面布局樣式了。

有兩個主要的事情啟發我創建了本指南。第一個是 Rachel Andrew 出色的書籍 為CSS網格布局做好準備。這本書徹底,清晰的介紹 CSS Grid(網格) ,也是本指南的基礎。我強烈建議你購買并閱讀。另一個靈感來自 Flexbox 完整指南 ,這也是我學習 flexbox 經常前往的資源。這篇文章是幫助了很多人,顯然是因為 Google “flexbox” 排名第一。你會發現它和我的文章有很多相似之處,為什么不跟從最好的呢?

本指南的目的是介紹存在于最新版本的規范中 Grid(網格) 概念。所以我不會覆蓋過時的 IE 語法,而且隨著規范的逐漸成熟,我會盡我最大的努力去更新這個指南。

基礎知識和瀏覽器支持

首先,你必須使用 display: grid 將容器元素定義為一個 grid(網格) 布局,使用 grid-template-columnsgrid-template-rows設置 列 和 行 的尺寸大小,然后通過 grid-columngrid-row將其子元素放入這個 grid(網格) 中。與 flexbox 類似,網格項(grid items)的源順序無關緊要。你的 CSS 可以以任何順序放置它們,這使得使用 媒體查詢(media queries)重新排列網格變得非常容易。定義整個頁面的布局,然后完全重新排列布局以適應不同的屏幕寬度,這些都只需要幾行 CSS ,想象一下就讓人興奮。Grid(網格) 布局是有史以來最強大的CSS模塊之一。

截至2017年3月,許多瀏覽器都提供了對 CSS Grid 的原生支持,而且無需加瀏覽器前綴:Chrome(包括 Android ),Firefox,Safari(包括iOS)和 Opera 。 另一方面,Internet Explorer 10和11支持它,但是是一個過時的語法實現。 Edge 已經宣布支持,但還沒有到來。(愚人碼頭注:翻譯這篇文章時,Edge 16 已經支持)。

這個瀏覽器支持數據來自 Caniuse ,你可以查看更多的細節。 數字表示支持以上功能的瀏覽器版本號。

桌面(Desktop) 瀏覽器

Chrome Opera Firefox IE Edge Safari
57 44 52 11* 16 10.1

手機(Mobile) / 平板(Tablet)瀏覽器

iOS Safari Opera Mobile Opera Mini Android Android Chrome Android Firefox
10.3 No No 62 62 57

除了微軟之外,瀏覽器廠商似乎還沒有對 Grid(網格) 搞自己的一套實現(比如加前綴),直到規范完全成熟。這是一件好事,因為這意味著我們不必擔心學習多個語法。

在生產中使用 Grid 只是時間問題。 但現在是學習的時候了。

重要術語

在深入了解 Grid(網格) 的概念之前,理解術語是很重要的。由于這里涉及的術語在概念上都很相似,如果不先記住 Grid(網格) 規范定義的含義,很容易混淆它們。但是別擔心,術語并不多。

網格容器(Grid Container)

應用 display: grid 的元素。這是所有網格項(Grid Items)的直接父級元素。在這個例子中,container 就是 網格容器(Grid Container)。

HTML 代碼:

<div class="container">
  <div class="item item-1"></div>
  <div class="item item-2"></div>
  <div class="item item-3"></div>
</div>

網格項(Grid Item)

網格容器(Grid Container)的子元素(例如直接子元素)。這里 item 元素就是網格項(Grid Item),但是 sub-item 不是。

HTML 代碼:

<div class="container">
  <div class="item"></div> 
  <div class="item">
    <p class="sub-item"></p>
  </div>
  <div class="item"></div>
</div>

網格線(Grid Line)

構成網格結構的分界線。它們既可以是垂直的(“列網格線(column grid lines)”),也可以是水平的(“行網格線(row grid lines)”),并位于行或列的任一側。例如,這里的黃線就是一條列網格線。

網格線(Grid Line)

網格軌道(Grid Track)

兩條相鄰網格線之間的空間。你可以把它們想象成網格的列或行。下圖是第二條和第三條 行網格線 之間的 網格軌道(Grid Track)。

網格軌道(Grid Track)

網格單元格(Grid Cell)

兩個相鄰的行和兩個相鄰的列網格線之間的空間。這是 Grid(網格) 系統的一個“單元”。下圖是第1至第2條 行網格線 和第2至第3條 列網格線 交匯構成的 網格單元格(Grid Cell)。

網格單元格(Grid Cell)

網格區域(Grid Area)

4條網格線包圍的總空間。一個 網格區域(Grid Area) 可以由任意數量的 網格單元格(Grid Cell) 組成。下圖是 行網格線1和3,以及列網格線1和3 之間的網格區域。

網格區域(Grid Area)

下篇繼續介紹網格容器(Grid Container) 屬性。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容

  • 需要以下準備環境 1、jdk-6u22-windows-i586.exe 2、apache-tomcat-7.0....
    sleepySnail閱讀 869評論 0 0
  • 20180731工作總結 1.回復京東顧客咨詢并協助下單 20180731準備工作 京東昨日銷售0 1.回復京東顧...
    lucia芳閱讀 177評論 0 0
  • 520要來了。 零點過后,涂荼像檢閱軍隊一般把空間、朋友圈里井噴式秀恩愛的所有動態都禮貌性點贊一遍,無波無瀾地擱下...
    布魯啵閱讀 260評論 0 0
  • 我是日記星球239號星寶寶,深圳水晶媽媽,朋友們都叫我葉子。我正在參加日記星球第五期蛻變之旅,這是我的第13篇原創...
    水晶媽咪閱讀 210評論 2 0