記事本文
DOCTYPE スイッチについて再度まとめ
以前 DOCTYPE スイッチについての検証とまとめと一覧表という記事で DOCTYPE スイッチについてまとめましたが、あれから 2 年弱が経過したので、改めてまとめてみようと思います。
まとめるまでの話がけっこう長いので、一覧表だけ参照したい ! という場合は DOCTYPE スイッチの一覧表をご覧ください。
DOCTYPE スイッチとは何か
そもそも DOCTYPE スイッチとは何か、というのがまず書くべきところですが、これは私が書かずとも良質のリソースが各種ありますのでそのリンクのみまとめておきます。
- !DOCTYPE スイッチ
- 各UAのDOCTYPEスイッチについて - CSS Dencitie
- Mozilla's DOCTYPE sniffing - MDC
- The Opera 9 DOCTYPE Switches
DOCTYPE 宣言の記述によって、過去のブラウザのレンダリングを行うモード ( 後方互換モード ) と、より最新の仕様に基づいたレンダリングを行うモード ( 標準準拠モード ) を切り替えることができる、というものです。 ( 厳密には標準準拠モードを更に細分化できるのですが、ここではまとめて標準準拠モードとして扱います。 )
例えば、 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> という、システム識別子が無い DOCTYPE 宣言が記述された HTML 4.01 Transitional 文書は、ほとんどのブラウザで後方互換モードでレンダリングされます。
DOCTYPE スイッチでどうレンダリングが変わるのか
では、そのレンダリングの違いとは実際にどういったものでしょうか。 これも私が書かずとも、 2xup.org の上ノ郷谷さんが恐ろしく充実したリソースを作ってあるので、そちらを紹介します。
HTML 5 の DOCTYPE 宣言
hxxk.jp ではちょうど休止時期に入ったこともあって取り上げていませんでしたが、最近は HTML 5 に関する話題もホットになっています。 では、その HTML 5 の DOCTYPE 宣言はどうなっているのでしょうか。 仕様を追ってみましょう。
- 現時点での最新の Working Draft である W3C Working Draft 10 June 2008 の 8.1.1 The DOCTYPE を見ると、非常にあっさりとした記述があります。
- これは HTML 5 における定義を書いているだけなので、むしろ HTML 5 differences from HTML 4 の 2.2 The DOCTYPE を参照する方が良いでしょう。
- この文書は、ミツエーリンクスの矢倉さんが HTML 5 における HTML 4 からの変更点として翻訳されてあるので、そちらを見てみます。
- 2.2 DOCTYPE に、
HTML 5 の HTML 構文では、ブラウザがページを標準モードで描画することを保証するため、
とあります。DOCTYPEが必須となります。DOCTYPEはこのほかに何も目的を持っていないため、XML 構文での記述は任意となります。これは、XML の MIME 型で供給される文書は常に標準モードで扱われるためです。[DOCTYPE]DOCTYPE宣言は<!DOCTYPE html>となります。HTML 構文では、大文字と小文字を区別しません。以前の HTML は SGML であり、DTD を参照する必要があったためDOCTYPEは長くなっていました。しかし、これは HTML 5 において異なり、DOCTYPEは HTML 構文において標準モードを有効にする手段として必要となっています。なお、ブラウザは現段階において既に、<!DOCTYPE html>を標準モードのトリガーとして解釈しています。
HTML 5 の場合は DOCTYPE 宣言は (XML 構文を使わないのであれば。 XML の MIME 型で供給される文書は常に標準モードで扱われ
ますし。 ) モード切り替えのみに使われるようですね。
ちなみにこの辺りの情報は HTML5 の DOCTYPE 宣言って IE6 でも標準モードになるんですね - IT戦記でのやり取りから得ることができました。
なお、
<!DOCTYPE html>
は、
In other words,
のように、大文字と小文字は区別しないとされています。
<!DOCTYPE HTML>, case-insensitively.
IE 8 のモードスイッチ
こちらもミツエーリンクスが提供する Web標準Blog からの情報の紹介になりますが、 IE8のモードスイッチという記事で DOCTYPE スイッチとはまた異なるモード切り替えのことが紹介されています。
IE 8 は現時点で Beta 2 ですが、 meta 要素に特定の記述をすることで、
DOCTYPEを上書きする
モードスイッチを実現できます。
IE 6 では DOCTYPE 宣言より前にコメント以外の記述があれば ( それが記述することを認められている XML 宣言であっても ) 後方互換モードになるというバグが、 IE 7 では XML 宣言の区切り文字に半角スペース文字以外を用いると後方互換モードとしてレンダリングするというバグがあったのですが、これで (IE 以外には全く無意味な meta 要素を記述することにはなりますが ) 確実なモードスイッチが実現できますね。
......と思ったら、はてなブックマーク - Les cafe's blancs / 2008年09月05日にて
IE8ではIE=8でもIE=7でも直ってる。ただIE=EmulateIE7にすると互換モードに。なぜー
という情報も。
確かに
<meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" />
と指定したサンプルを作成して、 IE 8 Beta 2 で確認してみると、
半角スペース区切りの XML 宣言の XHTML 1.0 Strict では IE 7 モードでレンダリングされるのに対し、タブ文字区切りの XML 宣言の XHTML 1.0 Strict では IE 5 モードでレンダリングされました。
ちなみに、 <meta http-equiv="X-UA-Compatible" content="IE=7" /> と指定したタブ文字区切りの XML 宣言の XHTML 1.0 Strict でも <meta http-equiv="X-UA-Compatible" content="IE=8" /> と指定したタブ文字区切りの XML 宣言の XHTML 1.0 Strict でも、それぞれ本来の指定したモードでレンダリングされます。
DOCTYPE スイッチの一覧表
これまでの節で書いたことと、以前の記事の DOCTYPE スイッチについての検証とまとめと一覧表をもとに、一覧表を再作成しました。 DOCTYPE 宣言の列は、確認用のサンプルページにリンクしていますので、一覧表の記述だけではなく、実際に各種ブラウザでアクセスして確認してみてください。 なお、確認用サンプルページでは先ほど取り上げた HTML5 の DOCTYPE 宣言って IE6 でも標準モードになるんですね - IT戦記で作られた HTML5 の DOCTYPE 宣言とレンダリングモードのテストの記述を参考にさせていただきました。

