CSS網格布局是瀏覽器Flexbox布局之后最重要的布局方式。我們可以忘記過去15年經常使用的的各種“神奇數字”,hacks和一系列變通布局方案。網格布局提供了非常簡單的聲明布局方式,之后再也不需要借助一些常見的主流css框架,也能減少很多手動實現的布局方式
如果你以前不熟悉CSS網格布局,那么你可以開始了解它了。它是一種適用于容器元素,并能指定子元素的間距、大小和對齊方式的布局工具。
CSS網格布局賦予我們更強大的能力——大家熟悉的水平垂直居中布局,不需要增加標簽就能做到。同樣,這也能讓我們不需要媒體查詢就能根據可用空間自動適應。
瀏覽器兼容性
CSS網格布局從Safari 10.1, Firefox 52, Opera 44, Chrome 57開始收到支持,微軟Edge在Edge 15會更新對網格布局的支持。
微軟的瀏覽器(IE10–11和Edge 13-14)有一種比較舊的實現,所以有不少限制,我們會簡單介紹新的實現方式和老的實現方式之間的區別,這樣你能知道如何規避他們。
創建帶有間距(gutter)的兩列(column)網格
為了創建上述網格布局,我們需要使用
grid-template-columns
和grid-gap
。grid-template-columns
表示網格中的列是如何布局的,它的值是一連串以空格分割的的值,這些值標識每列的大小,值的個數表示列的數目。
例如,四列250px寬度的網格布局可以這樣表示:
`grid-template-columns: 250px 250px 250px 250px;`
也可以使用repeat關鍵字表示:
grid-template-columns: repeat(4, 250px);
定義間距
grid-gap
定義了網格布局的間距大小,接收一個或兩個值,如果定義兩個值則表示列(column)和行(row)的間距大小。
*在兩列布局示例中,我們可以如下使用: *
`.grid {
display: grid;
grid-template-columns: 50vw 50vw;
grid-gap: 1rem;
}`
不幸的是,這個間距將會占用容器元素的整體寬度,計算出來就是100vw + 1rem,
最終這個布局會導致出現水平滾動條。
內容對齊
為了對齊示例中的內容,我們在子元素上使用grid布局,并加上對齊屬性來定位他們到指定軌道(track),軌道就是一個網格的列或行的某個位置的常見的名稱。網格跟Flex布局一樣,有一系列對齊的屬性——共有四種值——start, center, end, 和stretch,分別對應其子元素所在的軌道。stretch跟其他不太一樣,它會將元素從所在軌道的頭拉伸到尾。