トップ > スキル : Web > CSSハック

Web

IEの条件付きコメント

CSSを使ってデザインを適用していて、他のモダンブラウザ(FireFox、Safariなど)ではうまく表示されるが、IEだけレイアウトなどのデザインが崩れてしまうことがあります。また、IE7ではうまく表示されたけど、IE8にバージョンアップしたらおかしくなった・・ということもあります。

マイクロソフトは、IEに対してHTMLの独自の拡張として「条件付きコメント」という記述方法をサポートしています。これは、HTMLのコメントの記述方法を拡張したもので、次のようなことが実現できます。

  • IEのみにスタイルを適用する
  • IEだけ除外してスタイルを適用する
  • IEの特定のバージョンのみにスタイルを適用する
  • IEの指定バージョン以上にスタイルを適用する
  • IEの指定バージョン以下にスタイルを適用する

この条件付きコメントは、HTMLを独自に拡張したものなので、IEだけにJavaScriptを読み込ませたり、IEのみに表示されるメッセージを作るような、CSS以外にも活用できます。但し、Mac用IEには対応できません。

条件付きコメントの書式

条件付きコメントの書式は以下のようになります。

<!--[if 条件式]>
    (内容)
<![endif]-->

条件式の部分に合致するブラウザのみが、(内容)の部分に記述されたHTMLを読みます。それ以外のブラウザは、(内容)の部分はコメントだと判断されるので表示されません。


IEで閲覧した時のみ表示される

IEで閲覧した場合だけ内容が表示されるようにするには、以下のように記述します。ブラウザがIEの時は、「IEだけ表示されます。」と表示されるが、その他のブラウザはHTMLコメント判断して無視され、何も表示されません。

<!--[if IE]>
    <p>IEだけ表示されます。</p>
<![endif]-->


IEの対象バージョンを指定する

IEのそれぞれのバージョンを指定する時は、以下のように記述します。ブラウザがIE6であれば、「IE6のブラウザです。」と表示され、それ以外のバージョンは無視されるので何も表示されません。

<!--[if IE 6]>
    <p>IE6のブラウザです。</p>
<![endif]-->


IEの対象バージョンの幅を指定する

IEのバージョンに幅を持たせることができます。例えば、「IE6以上」のバージョンとか「IE7以下」のバージョンと指定することで、複数のバージョンに対して適用されます。

「以上」を対象にする

例えば、IE6以上を対象にする場合は、次のように、「gte」をブラウザのバージョンの前に記述します。ちなみに「gte」は「Greater-Than or Equal」の略です。

<!--[if gte IE 6]>
    <p>IE6以上のブラウザです。</p>
<![endif]-->


「以下」を対象にする

例えば、IE8以下を対象にする場合は、次のように、「lte」をブラウザのバージョンの前に記述します。ちなみに「lte」は「Less-Than or Equal」の略です。

<!--[if lte IE 8]>
    <p>IE8以下のブラウザです。</p>
<![endif]-->


IEすべてをを対象外にする

IEには読ませず、IE以外のすべてのブラウザを対象にするには、「!」をIEの前に記述します。

<!--[if !IE]>
    <p>IE以外のブラウザで表示されます。</p>
<![endif]-->

同様に、特定のIEのバージョン以外を対象にすることができます。例えば、IE6以外のブラウザだけを対象にするには以下のように記述します。

<!--[if !IE 6]>
    <p>IE6以外のブラウザで表示されます。</p>
<![endif]-->

スタイルシートを振り分ける

IEのみに発生するCSSの解釈問題を解決するには、すべてのブラウザ用とIE専用のスタイルシートに分けて作成し、それを条件付きコメントを利用してスタイルシートを振り分ける方法を行います。

例えば、次のようなスタイルシートを2つ作成したとします。また、それぞれの中には、p要素の文字色をすべてのブラウザには「赤」、IEには「緑」を指定したスタイルが記述されているとします。

style.css(すべてのブラウザのためのスタイルシート)
    p { color:#333333; }
ie.css(IE専用のスタイルシート)
    p { color:green; }


条件付きコメントを使って、IEだけにie.cssのスタイルシートを読み込ませるリンクを記述します。

<head>
<link rel="stylesheet" type="text/css" href="style.css" />
<!--[if !IE]>
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->
</head>
<body>
   <p>IEは緑色、その他のブラウザは赤になります。</p>
</body>

IEの条件付きコメント1
IEの条件付きコメント2

また、IE8以下のブラウザだけに適用したいのであれば、<!--[if IE ]> の部分を「<!--[if lte IE 8 ]>」とします。

CSSハックを使わないで、IEで起こってしまうスタイルシート解釈問題に対処する条件付きコメントを使う方が、将来的な展望を考えた時には良いかもしれません。

【IEの条件付きコメント】