iTheme でXML宣言してみる
XML宣言をするべきか?ということに対しては、いろんな方がそれぞれの考え方を持っているようですが、XHTML文書にはXML宣言を記述する事が強く奨励されており、UTF-8もしくはUTF-16以外のエンコーディングの場合においては必須であるといわれています。エンコーディングを UTF-8 もしくは UTF-16 とし、HTTP ヘッダの Content-Type リクエストヘッダ で charset にエンコーディングを指定すれば省略してもいいということになりますが、省略した場合、Another HTML-lint gatewayでチェックした際にエラー項目の一番最初に出てくるのでちょっと嫌だったりします。ちなみにW3CのMarkup Validation Serviceでのチェックでは特に指摘されません。XHTML文書を書く場合、エンコーディングをUTF-8にしておけば問題ないようなので、あとはどこまでこだわるのか?ってことかもしれません。
このXML宣言っていうのがコーディングする上で一番ややこしかったりします。FireFoxやOperaではXML宣言をすることによる弊害はないのですが、IE6.0の場合、文書型宣言(<!DOCTYPE縲鰀>)の前に何か文字が入ってしまうと後方互換モードになってしまい、いきなり表示が崩れたりします。これはIE6.0のバグで、IE7.0では改善されているそうです。text-align、文字サイズ、ボックスにおけるpaddingとmarginの解釈などが後方互換モードではかなり解釈が違うので、現在使用しているiThemeもXML宣言したとたんIE6.0で酷い崩れ方をします。
あまりの酷さにXML宣言をするのは諦めようかと思うくらいですが修正を入れてみました。
style.css
bodyにtext-align: center;を追加
#wrapperにtext-align: left;を追加
dbx.css
* html .dbx-handleのwidth指定を削除
これでIE6.0でも他のブラウザと同じように表示されるようになります。
Dockを使用する場合、スタイルシートを修正するだけでは、IE6.0でアイコンの表示がミニミニになってしまいます。これを修正するにはJavascriptの方を書き換える必要がありそうで手をつけることが出来ませんでした。XML宣言をとるか、Dockをとるかってなるんですが、回避方法を発見。
BirDesignさんのIE6でのXML宣言の問題と回避方法というエントリーの中でIE6以外でのみXML宣言をするPHPコードというのが紹介されています。
<?php $ua = $_SERVER['HTTP_USER_AGENT'];
if (!(ereg("Windows",$ua) && ereg("MSIE",$ua))
|| ereg("MSIE 7",$ua)) {
echo '<?xml version="1.0" encoding="'
. get_settings('blog_charset') .'"?>' . "\n"; } ?>
これを文書型宣言(<!DOCTYPE縲鰀>)の前に記述してやることで、IE6.0以外でのXML宣言が可能となります。※phpでの記述となります。
参考サイト
plucore.log:xml 宣言を利用すべきか否か
Lucky bag::blog::xml宣言について


















