2012年10月25日木曜日

IE6にはホントに悩まされる その2

はい、IE6以前のバージョンさえこの世から消えてくれれば…
WEB製作に携わる人の大半はかなりハッピーだと思いますっていうお話です。

サイトにおいて、XHTMLでは「XML宣言」をすることが強く推奨されています。
<?xml version="1.0" encoding="UTF-8"?>
というヤツですね。

今回プチリニューアルしたサイトでももちろん挿入しました。
するとIE6でレイアウトが崩れ倒しまくり!!!
すぐさまググってみると世の中の皆さんは結構苦労されてました。

IE6では対応してないので入れるとレイアウトが崩れる、と。

この間作ったサイトでは、全く崩れなかったので
サイトの作りが崩れにくいものだったんだなー、と。

しかし、このままにはしておけません。
IE5.5はもう見ないことにしても(←をいをい…)
IE6ユーザーはまだ結構いるんだぞ。

そこで下記の2サイトを参考に対処することにしました。
ホントいつも色んな方にお世話になっております。

■IE6でのXML宣言バグ対処
http://n-mode.ddo.jp/weblog/2009/02/20090208.html

こちらのサイトではIE6.0で閲覧した時だけXML宣言の記述が
表示されないようにされています。

変更前
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
↓↓↓↓↓
変更後
<!–#if expr="$HTTP_USER_AGENT != /MSIE 6.0/ || $HTTP_USER_AGENT != /Windows/ " –<<?xml version="1.0" encoding="UTF-8"?> <!–#endif –<<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

しかし、今回のサイトはすべてPHPで作成しているので
この方法をそのまま取り入れるとエラーになります。

■XHTML+CSSでIEだと表示くずれが発生してしまう原因
http://www.infinity-dimensions.com/blog/archives/xhtmlcssie.html

こちらのサイトではすべてのIEで閲覧したらXML宣言の記述が
表示されないようにされています。
なのでこれをIE6.0だけ除外されるようにしました。

サイトでの表記
<?  
$UA=getenv("HTTP_USER_AGENT");  
if(!substr_count($UA,"MSIE")){  
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";  
}  
?>
↓↓↓↓↓
E6だけ除外の場合
<?php $UA=getenv("HTTP_USER_AGENT"); if(!substr_count($UA,"MSIE 6.0")){ echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; } ?>

これでIE6で閲覧した時だけ除外されるようになりました。
IE7以降ではレイアウトも崩れずに表示されるので入るようにしたんですよ。

ちなみにIE5.5に対応させることもできるんですが、
そもそもIE5.5はDTD宣言入れただけで崩れることもある素敵なブラウザなので
今回申し訳ないですが、そちらでは崩れたまんまでいくことに。

みーんなIEで苦労しているのでありました。