IEの異なるバージョンごとにスタイルシートを適用する方法のおさらい
Post on:2011年12月15日
CSSやJavaScriptを使って、IE6, IE7, IE8, IE9 とIEの異なるバージョンごとにスタイルシートを適用する方法のまとめを紹介します。
Use Different Styles For Different Internet Explorer Versions
[ad#ad-2]
下記は各ポイントを意訳したものです。
CSS: 条件付きコメント
条件付きコメントを使用して、ドキュメントの一番上の要素(html)にIE6/7/8用のclassを付与します。
HTML
<!--[if IE 6]> <html class="ie6"> <![endif]--> <!--[if IE 7]> <html class="ie7"> <![endif]--> <!--[if IE 8]> <html class="ie8"> <![endif]--> <!--[if gte IE 8]> <html class="ie9"> <![endif]--> <!--[if !IE]><!--> <html> <!--<![endif]-->
例えば、IE8で表示した場合は下記のようになり、classに「ie8」が適用されます。
HTML
<html class="ie8">
スタイルは下記のように「html.ie8」を加えて使用します。
CSS
html.ie6 input { padding:10px; } html.ie7 input { padding:15px; } html.ie8 input { padding:20px; }
IE6には「padding:10px;」、IE7には「padding:15px;」、IE8には「padding:20px;」が適用されます。
CSS: 条件付きコメント(外部スタイルシート)
条件付きコメントを使用して、IEの異なるバージョンごとに外部スタイルシートを利用します。
HTML
<!--[if IE 6]> <link rel="stylesheet" type="text/css" href="ie6.css" /> <![endif]--> <!--[if IE 7]> <link rel="stylesheet" type="text/css" href="ie7.css" /> <![endif]--> <!--[if IE 8]> <link rel="stylesheet" type="text/css" href="ie8.css" /> <![endif]--> <!--[if gte IE 8]> <link rel="stylesheet" type="text/css" href="ie9.css" /> <![endif]--> <!--[if !IE]><!--> <link rel="stylesheet" type="text/css" href="default.css" /> <!--<![endif]-->
IE6には「ie6.css」、IE7には「ie7.css」、IE8には「ie8.css」、IE9には「ie9.css]、最後にIE以外のすべてのブラウザ用に「default.css」が適用されます。
[ad#ad-2]
CSS: CSS Hack
IEの異なるバージョンごとのCSS Hackです。
これらは基本的には制作時での一時的な利用をおススメします。
IE6のみ有効
* html input { padding:10px; }
IE7のみ有効
*+html input { padding:10px; }
IE8のみ有効
input { padding:10pxinput { padding:10px\0/; }/; }
IE7/8のみ有効
input { padding:10px; }
IE7以外有効
_input { padding:10px; }
JavaScript
JavaScriptを使用して、htmlタグにIEの各バージョン用のclassを記述します。
JavaScript
if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { //test for MSIE x.x; var ieversion=new Number(RegExp.$1) // capture x.x portion and store as a number if (ieversion>=8) //For IE8 document.getElementsByTagName('html')[0].className+='ie8'; else if (ieversion>=7) //For IE7 document.getElementsByTagName('html')[0].className+='ie7'; else if (ieversion>=6) //For IE6 document.getElementsByTagName('html')[0].className+='ie6'; }
JavaScript: jQuery
上記のJavaScriptでの記述は、jQueryを使用するとシンプルに記述できます。
JavaScript
if ($.browser.msie) { if(parseInt($.browser.version) == 8){ //For IE8 $("html").addClass("ie8"); } else if(parseInt($.browser.version) == 7){ //For IE7 $("html").addClass("ie7"); } else if(parseInt($.browser.version) == 6){ //For IE6 $("html").addClass("ie8"); } }
おまけ
親要素にclassを与える方法、外部スタイルシートを使う方法、CSS Hack、とさまざまな方法がありますが、それぞれの長所と欠点は以前の記事にまとめてあるので、参考にしてください。
sponsors