いやぁ~もぉ~~ 今回もIE6と戦いました!戦いましたよ。(>.<)
で 行き着いた結論が 『IE6のXML宣言のバグ』 だったのです。
ネットを徘徊する事丸3日間 やっと見つけました。
と言う事で忘れないようにこちらのRyota Weblogさんより 転記させていただきます。
XHTMLでは、XML宣言を一番初めに書くことが推奨されています。
と言うか これ書かないと w3cのチェックで大幅な減点をされてしまいます。
でも 今回メニューを固定する案件を受けてjavaを使った方法とcssで制御する方法の
二つでいろいろ試したのですが どうしてもIE6だけが反応してくれなくて
でも、その方法を紹介しているサイトのDEMOでは、ちゃんと動いてて
で ハッって気が付いたら犯人は、『XML宣言』だったのです。
で クライアントに電話してデザインを取るかXML宣言を取るか
相談しようかと思っていたところRyota Weblogさんを見つけたんです。
その方法と言うのは、PHPとかややこしいことをせずにSSIを使ったお手軽な方法です。
と言う事で本題に
◆犯人のXHL宣言と言うのは、こいつ→ <?xml version="1.0" encoding="UTF-8"?>
普通の記述は、
<?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">
こんな感じにします。
◆でサーバーでSSIを使えるようにする為に 『.htaccess』ファイルを作ります。
内容は、
AddHandler server-parsed html
これ1行
.htaccessを書くときの注意点は、最終行に必ず改行を入れる事です。
でこの『.htaccess』ファイルをサーバーのindex.htmlと同じ場所にアップロードすれば完了です。
ちなみにローカルな環境では、『.htaccess』ファイルが効きません。
これで完了♪
◆XML宣言を別ファイルにする時は、
<!--#if expr="$HTTP_USER_AGENT != /compatible; MSIE 6/" --><!--#include virtual="/xml.inc"--><!--#endif --><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
と書いて
この時の注意点は、↑を改行しないで一行にする事です。
でないと IE6で一番上に空白の一行が出来てしまいます。
xml.incファイルには、「XML宣言」を書いてサーバーの同じ場所にアップロードします。
<?xml version="1.0" encoding="UTF-8"?>
Ryota Weblogさんには、感謝感謝でございます。