DOCTYPE スイッチについてのまとめと一覧表 (HTML 5 や IE 8 Beta 2 のモードスイッチなどの情報も含んだ 2008 年版 )

http://hxxk.jp/2008/09/29/0118

記事データ

投稿者

真琴

投稿日時

2008-09-29T01:18+09:00

タグ
概要

以前 DOCTYPE スイッチについてはまとめましたが、あれから 2 年弱が経過したので、改めてまとめてみようと思います。 DOCTYPE スイッチとは何か、でどうレンダリングが変わるのか、 HTML 5 の DOCTYPE 宣言、 IE 8 のモードスイッチなどを踏まえ、最後には一覧表を作成しています。

リプライ

2 件のリプライがあります。

記事本文

DOCTYPE スイッチについて再度まとめ

以前 DOCTYPE スイッチについての検証とまとめと一覧表という記事で DOCTYPE スイッチについてまとめましたが、あれから 2 年弱が経過したので、改めてまとめてみようと思います。

まとめるまでの話がけっこう長いので、一覧表だけ参照したい ! という場合は DOCTYPE スイッチの一覧表をご覧ください。

DOCTYPE スイッチとは何か

そもそも DOCTYPE スイッチとは何か、というのがまず書くべきところですが、これは私が書かずとも良質のリソースが各種ありますのでそのリンクのみまとめておきます。

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 宣言はどうなっているのでしょうか。 仕様を追ってみましょう。

  1. 現時点での最新の Working Draft である W3C Working Draft 10 June 20088.1.1 The DOCTYPE を見ると、非常にあっさりとした記述があります。
  2. これは HTML 5 における定義を書いているだけなので、むしろ HTML 5 differences from HTML 42.2 The DOCTYPE を参照する方が良いでしょう。
  3. この文書は、ミツエーリンクスの矢倉さんが HTML 5 における HTML 4 からの変更点として翻訳されてあるので、そちらを見てみます。
  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 宣言とレンダリングモードのテストの記述を参考にさせていただきました。

DOCTYPE 宣言 Firefox 3 Firefox 2 Firefox 1 IE 8 Beta2 IE 7 IE 6 Opera 9 Opera 8 Safari 3 Safari 2 Safari 1 Google Chrome NN 8 NN 7 MacIE 5
DOCTYPE 宣言 Firefox 3 Firefox 2 Firefox 1 IE 8 Beta2 IE 7 IE 6 Opera 9 Opera 8 Safari 3 Safari 2 Safari 1 Google Chrome NN 8 NN 7 MacIE 5
DOCTYPE宣言なし 後方互換 後方互換 後方互換 IE 5 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 後方互換 後方互換 後方互換 IE 5 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換 後方互換
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 後方互換
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 後方互換 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 後方互換 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 後方互換 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> の XML 宣言の区切りをタブ文字にしたもの 標準準拠 標準準拠 標準準拠 IE 5 後方互換 後方互換 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 テスト環境がなかったので未確認
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> の XML 宣言の区切りをタブ文字にし、 meta 要素で IE 8 モードを指定したもの 標準準拠 標準準拠 標準準拠 IE 8 後方互換 後方互換 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 テスト環境がなかったので未確認
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> の XML 宣言の区切りをタブ文字にし、 meta 要素で IE 7 モードを指定したもの 標準準拠 標準準拠 標準準拠 IE 7 後方互換 後方互換 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 テスト環境がなかったので未確認
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> の XML 宣言の区切りをタブ文字にし、 meta 要素で emulate IE 7 モードを指定したもの 標準準拠 標準準拠 標準準拠 IE 5 後方互換 後方互換 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 テスト環境がなかったので未確認
<!DOCTYPE html> 標準準拠 標準準拠 標準準拠 IE 8 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 標準準拠 テスト環境がなかったので未確認

リプライ

2 件のリプライが送られています。

2008-10-07T19:06+09:00 -

Gecko の場合、「標準準拠」でひとくくりにされている中に "full standards mode" と "almost standards mode" という、だいたい同じだけど一部違う区別があります。この区別もわかるような表になっているとうれしいです。

2009-02-20T16:31+09:00 - No beer, No Name!

DOCTYPEの一覧表にリンクされているXML宣言なしのXHTML 1.1のDOCTYPEのサンプルページをIE6で表示したところ、Javascriptの2つ目のアラートにundefinedが表示されました。

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

著作、講演、制作実績など