CSS網格佈局(又稱「網格」),是一種二維網格佈局系統。CSS在處理網頁佈局方面一直作的不是很好。一開始咱們用的是table(表格)佈局,而後用float(浮動),position(定位)和inline-block(行內塊)佈局,可是這些方法本質上是hack,遺漏了不少功能,例如垂直居中。後來出了flexbox盒佈局,解決了不少佈局問題,可是它僅僅是一維佈局,而不是複雜的二維佈局,實際上它們(flexbox與grid)能很好的配合使用。css
在咱們開始正式學習Grid佈局以前,先看一下can i use上grid佈局在各個瀏覽器下的支持狀況是頗有用的,html
要想學好Grid佈局的用法,基本概念的介紹是少不了的,雖然看起來比較枯燥。瀏覽器
經過display屬性設置屬性值爲grid或inline-grid能夠建立一個網格容器。網格容器中的全部子元素就會自動變成網格項目(Grid item)函數
組成網格線的分界線。它們能夠是列網格線(column grid lines),也能夠是行網格線(row grid lines)而且居於行或列的任意一側佈局
兩個相鄰的網格線之間爲網格軌道。你能夠認爲它們是網格的列或行學習
兩個相鄰的列網格線和兩個相鄰的行網格線組成的是網格單元,它是最小的網格單元flex
網格區是由任意數量網格單元組成flexbox
要介紹Grid佈局屬性,讓咱們先從一個簡單例子開始:spa
如上圖所示,若是咱們要實現一個3x3的正方形矩陣,用Grid佈局要怎麼實現?code
<div class="container"> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div>
.container { display: grid; width: 200px; height: 200px; grid-template-rows: repeat(3, 50px); grid-template-columns: repeat(3, 50px); grid-row-gap: 10px; grid-column-gap:10px; } .container div { background-color: #ccc; border: 1px solid #333; }
如上面代碼所示,3x3的矩陣佈局,用Grid佈局去寫,很是簡單方便,相對於使用其餘佈局來講,Grid佈局的優勢就顯現出來了,那麼,接下來就讓咱們看看Grid局部中那些經常使用屬性:
依舊是上面html代碼,一個3x3的矩陣,不一樣的是此次咱們經過網線號碼來定位某一個特定方塊。
.container { display: grid; width: 200px; height: 200px; grid-template-rows: repeat(3, 50px); grid-template-columns: repeat(3, 50px); } .container div { background-color: #ccc; border: 1px solid #333; grid-column-start: 2; grid-column-end: 3; grid-row-start: 2; grid-row-end: 3; /* grid-area: 2/2/3/3; */ }
經過上面的代碼咱們能夠實現以下效果:
咱們定位矩陣正中間的小方塊顯示出來,其他的就不顯示了,下面咱們網格線號碼定位的那些屬性:
經過上面的例子,咱們知道了如何用網格線去定位網格項目,接下來咱們將學習如何經過網格區域的命名來定位網格項目,老樣子,依舊從一個例子開始:
<div class="container"> <div class="first"></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div>
.container { display: grid; width: 400px; height: 400px; grid-template-rows: repeat(3, 100px); grid-template-columns: repeat(3, 100px); grid-template-areas: "header header2 header3" "body body2 body3" "footer footer2 footer3"; } .container div { background-color: #ccc; border: 1px solid #333; } .container .first { grid-row-start: header2; grid-row-end: body2; grid-column-start: header; grid-column-end: header2; }
如上述例子看到的,原本是一個3x3的矩陣,可是經過區域命名的方式,將第一個div設置了跨兩行兩列,接下來讓咱們一塊兒瞭解一下網格區域命名定位網格項目的相關屬性:
這篇文章簡單的介紹了一些Grid佈局的屬性和用法,但沒有涉及全部,Grid佈局還有不少屬性和用法須要本身去探索,經過不一樣屬性的排列組合,能夠發掘不一樣的玩法,這不正是佈局的魅力嗎?
若是你們想要更加全面的瞭解Grid佈局,能夠去Mozilla Grid板塊去探索發現Grid佈局的魅力。這篇文章若是有錯誤或不嚴謹的地方,歡迎批評指正,若是喜歡,歡迎點贊收藏