MENU

IE6/7/8/9/10/11それぞれのバージョンのみに適用させるCSSハックまとめ

最近ではIE8のサポート終了などにより使う機会が減ってきましたが、それでも一部バージョンのみに対応させたいときもあるかと思います。そんな時に便利なのがCSSハックです。以下で紹介するソースコードは仮想環境上でしっかり確認していますので、大丈夫です。

CSSハック


この要素をCSSハックしたいと思います。

IE6のみ


.element 
{
  color: #000;
  _color: #666;  /* IE6のみ */
}

いまどきIE6に対応させるWeb制作者はいないと思いますが一応。プロパティの前に _ をつけます。

IE7のみ


.element 
{
  color: #000;
  *color: #777;  /* IE7以下 => 結果的にIE7のみ */
  _color: #000;  /* IE6のみ */
}

プロパティの前に * をつけるとIE7以下に効かせることができるので、さらにIE6のみ上書きすることでIE7のみに対応させることができます。

IE8のみ


.element 
{
  color: #000;
  color: #888\9;  /* IE10以下 => 結果的にIE8のみ */
  *color: #000;   /* IE7以下 */
}
.element:not(:target)  /* IE9以上 */
{
  color: #000\9;  /* IE10以下 */
}

値の末尾に \9 をつけるとIE10以下に効きます。次に * をつけてIE7以下を上書きさせることで、color: #888;IE8/9/10のみに効くことになります。IE9/10を除くことができればIE8のみに対応できますね。そこで、:not(:target) をつけるとIE9以上に効きます。さらに、\9 を末尾につけることでIE10以下に効くので、IE9/10のみに効かせることができます。よって、IE8のみに効かせることができます。

IE9のみ


.element 
{
  color: #000;
}
.element:not(:target)  /* IE9以上 */
{
  color: #999\9;  /* IE10以下 => 結果的にIE9のみ */
}
@media all and (-ms-high-contrast: none)  /* IE10以上 */
{
  .element:not(:target) 
  {
    color: #000;
  }
}

:not(:target)\9IE9/10だけに効きます。@media all and (-ms-high-contrast: none)IE10以上に効くので、上書きされて color: #999\9;IE9のみに効きます。

IE10のみ


.element 
{
  color: #000;
}
@media all and (-ms-high-contrast: none)  /* IE10以上 */
{
  .element 
  {
    color: #100\9;  /* IE10以下 => 結果的にIE10のみ */
  }
}

@media all and (-ms-high-contrast: none) でIE10以上の効かせることができ、\9 でIE10以下に効かせることができます。よって、IE10のみに効かせることができます。

IE11のみ


.element 
{
  color: #000;
}
*::-ms-backdrop, .element  /* IE11のみ */
{
  color: #110;
}

*::-ms-backdrop をつけるとIE11のみに効かせることができます。

IE6〜IE11まで同時にCSSハック


.element 
{
  color: #000;
  *color: #777;  /* IE7以下 (上書きされて結果的にIE7のみ) */
  _color: #666;  /* IE6のみ */
}
.element 
{
  color: #888\9;  /* IE8のみ */
}
.element:not(:target) 
{
  color: #999\9;  /* IE9,10 (上書きされて結果的にIE9のみ) */
}
@media all and (-ms-high-contrast: none) 
{
  .element:not(:target)  /* 詳細度の関係でこっちにも:not(:target)つける */
  {
    color: #100;  /* IE10,11 (上書きされて結果的にIE10のみ) */
  }
  *::-ms-backdrop, .element:not(:target)  /* 詳細度の関係でこっちにも:not(:target)つける */
  {
    color: #110;  /* IE11のみ */
  }
}

全部同時に使うときは、CSSの詳細度に注意しなければいけません。