CSS Gridの基本

2018/12/09

グリッドの作成

grid-template-columns、gird-template-rows

grid-template-columns、gird-template-rowsでグリッドを作成していきます。
grid-template-columns: グリッドの横方向のサイズを指定
gird-template-rows:グリッドの縦方向のサイズを指定

HTML

<div class="grid">
  <div class="grid__item1"></div>
  <div class="grid__item2"></div>
  <div class="grid__item3"></div>
  <div class="grid__item4"></div></div>

pxでの指定

.grid {  
  display: grid;
  grid-template-columns: 500px 300px 200px;
  grid-template-rows: 300px 200px 100px;
}

pxで指定

frでの指定

frは全体を等分割した値
1fr 1fr 1fr:1/3ずつ

.grid {  
  display: grid;  
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: 1fr 1fr 1fr;
  height:600px;
}

frで指定
2fr 1fr 1fr:最初のセルが全体の1/2になり、2,3番目のセルが残りの1/2を等分割した大きさになる (2/4, 1/4,1/4)
frで指定

px,frを組み合わせた指定

600px 1fr 1fr だと最初のセルに600pxが割り当てられ、残りのセルを2つに等分割する

.grid {
  display: grid;
  grid-template-columns: 600px 1fr 1fr;  
  grid-template-rows: 100px 1fr 1fr;
  height:600px;
}

pxとfrで指定

repeat

repeatを使うことで短く記述できる
repeat(繰り返す数,サイズ指定)
構文
grid-template-columns: repeat(繰り返す数,数値);
grid-template-columns: 1fr 1fr 1fr;

.grid {  
  grid-template-columns: repeat(3, 1fr);
}

repeatは途中に入れたり、何回も記述できるので以下のような書き方もできる
grid-template-columns: 600px 1fr 1fr;

.grid {  
  grid-template-columns: 600px repeat(2, 1fr);
}

repeatを複数
grid-template-columns:1fr 1fr 1fr 2fr 2fr 2fr;

.grid {  
  grid-template-columns: repeat(3, 1fr) repeat(3, 2fr);
}

途中にrepeat\grid-template-columns:1fr 2fr 2fr 300px;

.grid {  
  grid-template-columns: 1fr repeat(2, 2fr) 300px;
}

グリッドアイテムの配置

grid-column,grid-row

grid-template-columns,gird-template-rowsでグリッドを作成できたのでグリッドアイテムを配置してみる(位置を指定しなくてもIE以外は左上から自動配置してくれます)

HTML

<div class="grid">
  <div class="grid__item1"></div>
  <div class="grid__item2"></div>
  <div class="grid__item3"></div>
  <div class="grid__item4"></div>
</div>

CSS

.grid {  
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 1fr);
  height: 600px;
}

位置の指定

grid-column,grid-rowを使って位置を指定していきます
この時に重要なのがグリッドラインです
グリッドには以下のようにgrid-columnのグリッドラインが左から1,2,3,4...、
grid-rowのグリッドラインが上から1,2,3,4となっています
グリッドライン

grid-row、grid-columnは、開始のグリッドライン/終わりのグリッドラインで指定します。左から2番目、上から2番目のセルに指定するとしたら以下のように記述します。

.grid__item1 {  
  grid-column: 2/3; //横のグリッドライン2〜3
  grid-row: 2/3; //縦のグリッドライン2〜3
}

1/2,2/3,3/4など終わりのグリッドラインに1つ隣のグリッドラインを指定する場合は省略して記述することもできます。

.grid__item1 { 
  grid-column: 2/3; //横のグリッドライン2〜3
  grid-row: 2/3; //縦のグリッドライン2〜3
}
   ↓
.grid__item1 {
  grid-column: 2; //開始のグリッドラインのみ指定 
  grid-row: 2; //開始のグリッドラインのみ指定
}

grid-column: 2/3、grid-row: 2/3

2つ以上のグリッドにまたがってグリッドアイテムを配置することもできます。
以下のように記述することで、左から2、3番目のセルにまたがって配置できます。

.grid__item1 {
  grid-column: 2/4; //横のグリッドライン2〜4
  grid-row: 2/3; //縦のグリッドライン2〜4
}

grid-column: 2/4、grid-row: 2/3

spanで指定

開始のグリッドラインのみ指定して、そこから何個さきのグリッドラインまで伸ばすかで指定することもできます
開始のグリッドライン/ span 何個先まで伸ばすか

grid-column: 2/4;の場合
2から2つ先の4まで伸ばすのでgrid-column: 2/ span 2;
grid-column: 1/5;の場合
1から4つ先の5まで伸ばすのでgrid-column: 1/ span 4;

.grid__item1 {
  grid-column: 2/4;
  grid-row: 2/3;
}
       ↓
.grid__item1 {
  grid-column: 2/ span 2; //2から2つ先の4まで伸ばす  
  grid-row: 2 / span 1;  //2から1つ先の3まで伸ばす
}

gap(grid-gap)

gapでグリッド間の余白を定義できます。
※当初はgrid-gapで定義されていましたが、現在は接頭語なしのgapに変わりました。ちなみに、現在はFirefoxのみですが、Flexboxでもgapを使うことができます。
gap: row(縦)の余白 横(column)の余白 で指定します。

.grid {  display: grid; 
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: repeat(3, 1fr);
  height: 600px;
  gap: 10px 20px; //row(縦)の余白10px column(横)の余白20px
}

grid-gap
rowのみ指定する場合

gap: 10px 0; //rowのみ

columnのみ指定する場合

gap: 0 10px; //columnのみ

rowとcolumnの余白が同じ場合は一括指定もできます。

gap: 10px //rowとcolumnどっちも

また、column-gap,row-gapでも横のみ、縦のみ余白を定義することができます。

column-gap: 10px; //columnのみ
row-gap: 10px; //rowのみ