ITTI STAFF
BLOG

イッティWEBスタッフの制作ブログ

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 Autoprefixer

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:true」を追記します。

Gulp
gulp.task('autoprefixer', function (){
    gulp.src('src/style.css')
    .pipe(autoprefixer({
    browsers: ['last 5 versions','> 3%'],
    cascade: false,
    grid: true

    }))
    .pipe(gulp.dest('./dest/css'));
});

これでIEのベンダープレフィックスが自動的に付加されます。

CSS Gridはレイアウトの自由度が高くなりますが、グリッド数が多い場合やページごとにグリッド数が変わる場合はFlexBoxの方が良い場合もあります。

新しい記事

東京のWEB制作会社イッティ