ネットビジネスを覚えるWEBマーケティング  RSSを登録する

ネットビジネスに携わる人のためのメルマガ。サイドビジネス業界のリサーチ結果や統計データが満載です。独立、起業をお考えの方は必見!

現在休刊中です    
解除

規約に同意して

2009/02/07

【GROWメール】CSSハックを使わずIEのバグに対処する方法

━━≪ GROWマガジン ≫━━━━━━━━━━━━━━━━━━━━
  ┌──┐
  |\/|CSSハックを使わずIEのバグに対処する方法
    └──┘
━━━━━━━━━━━━━━━━ http://www.grow-planning.com/


スタイルシートを使ってデザインしていると、
他のブラウザではうまく表示されるのに、 
IEでのみ崩れて表示されてしまうことがありますね。 

IE7ではうまく表示されるのに、
IE6以下ではおかしくなってしまう…
という場合もあるでしょう。

そういったときには、
IEにのみ別のスタイルを適用させる、

「CSS Hack(ハック)」

がよく使われますね。

CSS Hackは、様々なものが考案されています。 
IEに限らず、OperaやSafariなど、
特定のブラウザにのみ適用する方法や、
特定のブラウザのみ除外する方法などがあります。

それらは、
うまく活用すると、
どんなブラウザで見てもうまく表示されるデザインを作れますが、
使いすぎるとソースが読みにくくなりますよ。 

CSS Hackは、
ブラウザのバグを利用した複雑な記述方法で
あることが多いので、後から見たとき、
自分が何を意図して書いたものなのか、
分からなくなることもあると思います。

そこで今回は、
CSS Hackを使わない方法で、

「IEでのみ表示がおかしくなる場合」

に対処する方法をご紹介いたします。


■□IEの「条件付きコメント」を使う

IEには、HTMLの独自拡張として

「条件付きコメント」(Conditional Comments)

という記述方法が用意されています。
これは、

HTMLのコメント( <!-- 〜 --> )

の記述方法を拡張したもので、
以下のようなことが簡単に実現できます。

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

この方法を使えば、CSS Hackを使わずに、
IEの表示上の問題に細かく対処することができます。

IEの問題にしか対処できない方法ですが、
表示上の問題が発生するのがIEだけの場合は、
この方法が便利に活用できるできますよ。

※この「条件付きコメント」は、
HTMLを独自に拡張したものですから、
スタイルシート以外にも活用できます。
例えば、
IEにのみJavaScriptを読ませたり、
IEでのみ表示されるメッセージを作ったりもできます。 


■□「条件付きコメント」とは

スタイルの適用方法を説明する前に、

「条件付きコメント」

の記述方法を説明しておきます。

IEの独自拡張である「条件付きコメント」は、
以下のような書式でHTML中に記述します。

 <!--[if 条件式 ]>
    (中身)
 <![endif]-->

「条件式」の部分に合致するブラウザのみが、
「中身」の部分に記述されたHTMLを読みます。

それ以外のブラウザは、
「中身」の部分をコメントだと判断するため、
無視します。

※HTMLの文法的には、
条件式や中身の部分も含めて全体が
「コメント」になっています。

以下に、具体的な記述例を記載します。

■最も簡単な記述

 <!--[if IE ]>
    <p>この表示はIEだけで見えます。</p>
 <![endif]-->

上記のソースをHTML中に記述すると、
IEで閲覧した場合だけ、

「この表示はIEだけで見えます。」

という文字列が表示されます。
※「条件付きコメント」は、
 IE5から搭載された機能なため、
 IE4以下は対象外です。

「<!--[if IE ]>」〜「<![endif]-->」

までの領域には、
通常のHTMLを何行でも記述できます。
ただし、
コメント(<!-- 〜 -->)の
記述を含めることはできませんので注意して下さい!

■対象バージョンの幅を指定する記述 

IE5「以上」を対象にする場合は、
次のような記述になります。

「 gte 」は、「Greater-Than or Equal」の略で
「以上」の意味です。

 <!--[if gte IE 5 ]>
    <p>この表示はIE5以上で見えます。</p>
 <![endif]--> 

IE5「より上」を対象にする場合は、
次のような記述になります。
「 gt 」は、「Greater-Than」の略で
「より上」の意味です。
※「IE5より上」の場合「IE5自身」は含みません。

 <!--[if gt IE 5 ]>
    <p>この表示はIE5より上のバージョンで見えます。</p>
 <![endif]-->

IE6「以下」を対象にする場合は、
次のような記述になります。
「 lte 」は、「Less-Than or Equal」の略で
「以下」の意味です。

 <!--[if lte IE 6 ]>
    <p>この表示はIE6以下で見えます。</p>
 <![endif]-->

IE6「未満」を対象にする場合は、
次のような記述になります。
「 lt 」は、「Less-Than」の略で
「未満」の意味です。

 <!--[if lt IE 6 ]>
    <p>この表示はIE6未満で見えます。</p>
 <![endif]-->

■指定バージョン「以外」を対象にする記述 

「条件付きコメント」には
「否定」の
記述方法もあるため、指定した条件式に
合致しないブラウザのみを対象にすることもできますよ。

 <!--[if !IE 6 ]>
    <p>この表示はIE6以外で見えます。</p>
 <![endif]-->

上記の場合は、
IE6以外のIEでのみ表示されます。
つまり、
IE5やIE7では表示されます。
このような記述が必要になることは、
あまりないでしょうね。

■IEすべてを対象外にする記述 

これまでの記述はすべて、

「IEのみを対象にする」記述でした。

その逆に、

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

記述方法も用意されています。

 <![if !IE ]>
    <p>この表示はIE以外のブラウザで見えます。</p>
 <![endif]>

上記の記述は、IE以外のブラウザでのみ表示されます。

(ただし、IE4以下は条件付きコメントに対応していないため
 「その他のブラウザ」と同じ扱いになります。
 ですから、IE4以下も表示対象になります。)

※この「IEを除外する記述」は、
 今までの条件付きコメントと異なり、
 「 <!--[if… 」ではなく「 <![if… 」
 で始まる点に注意して下さい。
 終わりも
 「 <![endif]--> 」ではなく「 <![endif]> 」
 になります。
 (この記述方法だけは、HTMLの文法的には誤りになります。
  文法チェッカーで調べるとエラーになります。)

他にもいろいろ記述方法のバリエーションはありますが、
長くなるので・・・
またの機会にさせてもらいます。


■□「条件付きコメント」を使ってIEの問題を解決するには?

「条件付きコメント」を活用して、
IEのみに発生するスタイルシート解釈上の問題を解決するには、
スタイルシートを2ファイルに分割します。

 all.css : すべてのブラウザに適用するスタイル 
 ie.css  : IE用に上書きするスタイル

このようにスタイルシートを2つに分割し、
ie.cssをIEにのみ読ませるようにすれば、
スタイルシートのソースを分かりにくくすることなく、
IEの問題を解決できます。


■□スタイルシートは、後の記述が採用される 

スタイルシートでは、
同一の装飾内容については、
最後に記述された指定が採用される規則になっています。

例えば、
all.cssの中に以下のようなスタイルの指定が
ある場合を考えて見ましょう。

 h1 { color: red; } 

これは、h1要素(見出し)の文字色を赤色にする指定です。
ここで、ie.cssに以下のような記述があるとします。

 h1 { color: blue; }

これは、h1要素の文字色を青色にする指定です。

all.cssを先に読み込み、
後からie.cssを読み込んだ場合は、
後の記述が採用されるため、
h1要素の文字色は青色になりますね。

すべてのブラウザに all.css を読ませ、
その後、IEだけに ie.css を読ませれば、

「IE以外のブラウザでは見出しは赤色、IEでは見出しは青色」

という装飾が実現できます。

この方法を使って、

「IEのみで問題の発生する記述」を、
「IEでうまく表示されるような記述」で

上書きすることで、 
IEとIE以外のどちらのブラウザでも
うまく表示できるようにすれば良いのですね。


■□「条件付きコメント」でIE用のスタイルを読ませる方法

条件付きコメントを使ってIEにのみ対策用スタイルを適用させるには、
次のように記述します。

<link rel="stylesheet" type="text/css" href="all.css">
<!--[if IE ]>
<link rel="stylesheet" type="text/css" href="ie.css">
<![endif]-->

上記のソースを、

HTMLのhead要素内(<head>〜</head>の中)

に記述すれば、 
all.cssはすべてのブラウザで読まれ、
ie.cssはIEのみで読まれるようになります。

(※IEは all.css と ie.css の両方を読むことになります。)

もし、問題が「IE6以下」でのみ発生するのであれば、

「IE6以下のみに適用させるスタイルシート」(例えば、ie6.css)

を用意しておき、以下のように記述します。

<link rel="stylesheet" type="text/css" href="all.css">
<!--[if lte IE 6 ]>
<link rel="stylesheet" type="text/css" href="ie6.css">
<![endif]-->

上記のソースだと、ie6.css は、IE6以下にしか適用されません。

      
特に、IE6以下でのみ問題が発生するような場合は、
スタイルシートにCSS Hackを用いて対策を書き込むよりも、 
IE6以下専用の修正用スタイルシートを用意する方が、

スタイルシートのソースが
シンプルになって管理しやすくなるでしょう。

(Windows版の)IEだけで問題が発生する場合には、
検討してみて下さい。

以上、長々と失礼しました。
by.グロママ 
http://www.grow-planning.com


◆◇===========================================================◇◆
  
  センスの良いホームページでネットショップを運営しましょう!

  http://www.grow-planning.com/p01.html

◆◇===========================================================◇◆


◆━━━━━━━━━━━━━━━━━━━━━━━━━━━◆

毎日NEW情報をてんこもりにご紹介!!
読まなきゃそん♪そん♪ですよ(〇^∀')O*.b

最後までご覧いただきまして本当にありがとうございます(*:U:*)ノ♪*゜

それではまた、次回のメルマガでお会いしましょう!(^▽^)ノ☆彡

***********************************************************
札幌市中央区南1条西13丁目4-52山新ビル4F
株式会社グロウプランニング
URL:http://www.grow-planning.com/
現在休刊中です
解除

規約に同意して

最近の記事

上へ戻る