CSS GridをIE11、EDGEに対応させるために注意する点
IEでもCSS Gridを適用させる時に注意するポイントです。
IE11からCSS Gridに対応しています。
そのため、案件の定義が「IE11以上」であればCSS Gridでコーディングすることもできます。
「Gridでコーディングするのか?」「Flex Boxでコーディングするのか?」迷うところです。
実際にコーディングしてみると、下記のようなレイアウトの場合は「Flex Box」によるコーディングが最適かと思いました。
トップページや、ランディングページなどに多いレイアウトで、縦のグリッド線が多くなる場合です。

CSS Gridの恩恵を受けることができるレイアウトは下記のような場合です。
レスポンシブレイアウトにした場合、ピンク色のコンテンツが2段目になるレイアウトです。
Flexboxでもコーディングできますが、構造が分かりやすい点でCSS Gridによるコーディングが最適です。

IEにも対応させるCSS Gridの3つのポイント
CSS GridをIEに適用した時に、ちょっとハマりました。
まず、名称が違うプロパティがあり「ベンダープレフィックス付けとけばOKだろう」という訳ではありません。
ちょっと詳しくメモっておくと下記になります。
IE用のベンダープレフィックスと異なるプロパティ名
IEの場合は、CSSのプロパティにベンダープレフィックスの「-ms-」を追記させる必要があります。
また、プロパティ名が違うプロパディもあります。
グリッドの列サイズを指定するプロパティなどが代表例です。
モダンブラウザ:grid-template-columns
IE:-ms-grid-columns

IE10では、ベンダープレフィックスを付けても対応していないプロパティもあります。
ちょっと古い情報ですが、ベンダープレフィックスでも対応していない情報をまとめられています。
IE10では「grid-area」が使えないのは不便ですね。(IE11では対応しています)
「grid-row」と「grid-column」で対応すればOKです。
IEでは、行を指定するgrid-rowsが必須になる
グリッドの行数やサイズを指定するプロパティ「grid-rows」は、chromeやFirefoxでは不要な場合もありますが、IEの場合は必要になります。
コンテンツの縦サイズが可変する場合の値は「auto」にします。

IEではグリッドの解釈が異なる
chrome、FirefoxとIEとでは、グリッドの数え方が異なります。
chrome、Firefoxは「グリッド線」で指定しますが、IEは「ボックス」で指定します。

グリッドを使ったサンプル
下記のレイアウトをCSS Gridでコーディングしたサンプルです。

HTML
<div class="wrap"> <div class="main-cont"> メイン </div> <div class="sub-cont"> サブ </div> <div class="side-cont"> サイド </div></div>chorome、FireFoxなどのモダンブラウザだけに対応した場合は下記になります。
CSS
.wrap { display: grid; grid-template-columns:300px 200px; grid-template-rows:auto auto; } .main-cont { grid-column: 1 / 2; grid-row: 1; } .sub-cont { grid-column: 1 / 2; grid-row: 2; } .side-cont { grid-column: 2 / 3; grid-row: 1 / 3; }IEにも対応させた場合は下記になります。
CSS
.wrap {display: grid;display: -ms-grid;grid-template-columns:300px 200px;grid-template-rows:auto auto;-ms-grid-columns:300px 200px;-ms-grid-rows:auto auto;}.main-cont {grid-column: 1 / 2;grid-row: 1;-ms-grid-column: 1;-ms-grid-row: 1;}.sub-cont {grid-column: 1 / 2;grid-row: 2;-ms-grid-column: 1;-ms-grid-row: 2;}.side-cont {grid-column: 2 / 3;grid-row: 1 / 3;-ms-grid-column: 2;-ms-grid-row: 1;-ms-grid-row-span: 2;}Gulpのautoprefixerを利用する
Gulpを利用している方ならベンダープレフィックスを自動的に付加する「autoprefixer」を使っていると思います。
gridのベンダープレフィックスはデフォルトではfalseになっているのでtrueにします。
gulpfile.jsのautoprefixerのタスクに「grid:"autoplace"」を追記します。
Gulp
gulp.task('autoprefixer', function (){ gulp.src('src/style.css') .pipe(autoprefixer({ browsers: ['ie >= 11'], grid: "autoplace" })) .pipe(gulp.dest('./dest/css'));});これでIEのベンダープレフィックスが自動的に付加されます。
CSS Gridはレイアウトの自由度が高くなりますが、グリッド数が多い場合やページごとにグリッド数が変わる場合はFlexBoxの方が良い場合もあります。


