main要素にbackgroundやらmarginやら設定していて、なぜかIEで表示されなかった。
なんでや!HTML5勧告やぞ!とパニクったので忘備録として残しておきます。
IEでmain要素が認識していなかったコード
確認環境:InternetExplorer11.0.43
<body>
  <header>
    ヘッダー要素
  </header>
  <main> <!-- メイン要素ここから -->
    <section>コンテンツ</seciton>
    <section>コンテンツ</seciton>
    <section>コンテンツ</seciton>
  </main> <!-- メイン要素ここまで -->
</body>
main {
  background: url(img/bg.jpg);
  width: 1024px;
  height: 720px;
  margin: auto;
}
IEで背景が表示されないのはwidthやheight指定がされていないのが原因~というのもありましたが、どうもそうでもない様子。
それどころかmargin:autoが利いていなかったので、そもそもCSSが問題ではないのでは?と辿り着く。
するとこんな記事を見つけました。
HTML5 から追加された要素 main ですが、レイアウトに導入するには注意が必要です。
IE9 ~ IE11(開発者ツール上は Edge 表記)では、main 要素の display プロパティの規定値は inline です。
したがって、ページ全体の構成を main 要素で指定する場合には、main 要素に display:block を指定する必要があります。
Chrome や FireFox などは、main 要素の display プロパティの規定値は block ですから、重複する指定になりますが、IE のために回避できません。
カラクリ.jp より引用
なぜIE以外はdisplay:blockなのに……しぶしぶdisplayを指定してやる。
解決したコード
<body>
  <header>
    ヘッダー要素
  </header>
  <main> <!-- メイン要素ここから -->
    <section>コンテンツ</seciton>
    <section>コンテンツ</seciton>
    <section>コンテンツ</seciton>
  </main> <!-- メイン要素ここまで -->
</body>
main {
  background: url(img/bg.jpg);
  width: 1024px;
  height: 720px;
  margin: auto;
  display:block; /* IE対策に追加 */
}
これで問題なくbackgroundもmarginも利きました。やったぜ!
headerやfooterも利くのにmainだけ認識されていなかったため戸惑いましたが、これからは気を付けてあげよう……。
