DOCTYPE 宣言による「解釈モード」の切り替え

HTML ソースの冒頭にある(べきである) DOCTYPE 宣言を見て、HTML や CSS 解釈の挙動を変えるブラウザがあるんスよ、というハナシ。

「DOCTYPE スイッチ」

Mozilla (Netscape6), MacIE5 は「HTML/CSS をその仕様どおりにかなり正しく解釈することのできる高度なブラウザ」と言われてます。しかし、これまでそういうブラウザが少なかったこともあって、巷には「あんまり正しい解釈をしない古いブラウザ」に合わせて記述された HTML/CSS が数多いです。

そういう世の中を、仕様どおり厳格に解釈しまくるだけじゃぁ「アタマが固い頑固者」呼ばわりされかねないので(笑)、Mozilla (Netscape6), MacIE5 には「解釈モードの切替」という機構が装備されとります。これによって、 HTML/CSS の仕様通りの解釈をするモードと、過去慣習的な「正しくない」解釈を意図的に行うモードとを切り替えさせることができます。

先日正式リリースされた WinIE6 もこの機構を備えているです。

で、何をもってその「解釈モード」を切り替える合図とするかというと、HTML ソースの DOCTYPE 宣言を見て判断が下されるです。DOCTYPE 宣言の有無や、宣言した HTML 種別の選択から感じ取れる書き手の気合いの入り具合(笑)によって、「 過去の慣習的な解釈を再現するモード (Quirks mode) 」「 仕様準拠の厳格解釈モード (Standards mode) 」のどちらかへ切り替わるです。

この「DOCTYPE 宣言による解釈モード切り替え」のことを、 Microsoft の呼称にならって「 DOCTYPE スイッチ」と呼ぶことにするです。

DOCTYPE 宣言とわ

DOCTYPE 宣言とわ、その HTML 文書がどの仕様・バージョン・文法に従って書かれているかを示す物です。たとえば、以下に示すようなものです。HTML 文書はこの DOCTYPE 宣言にて「自分がナニモノであるか」を自分で示すべき、とされてます。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

これによって「この HTML は W3C 謹製の文法、 HTML 4.01 Strict に従ってるんだよ〜」と示してます。"-//W3C//DTD HTML 4.01//EN" の部分は「 公開識別子 」と呼ばれます。

HTML 4.01 ならこの記述だけで OK なのだけど、やっぱ、文法の裏付けはなんだ?というのも示すほうがよろしかろー、というわけで、以下のような記述にしたり。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

"http://www.w3.org/TR/html4/strict.dtd" は、この W3C HTML 4.01 の文法を定義しているモノ (DTD) のありかです。「 システム識別子 」と呼ばれます。

各ブラウザの「DOCTYPE スイッチ」状況

「DOCTYPE スイッチ」は HTML の解釈も CSS の解釈も切り替わる機構、という事だけど、以下は CSS の記述に対して解釈方法が切り替わるかどうかに着目した調査結果です。

HTML 種別 Mozilla MacIE5 WinIE6 WinIE5.5 Opera6 NN4.x iCab
DOCTYPE 宣言無し Quirks Quirks Quirks
HTML 4.01 Transitional
(公開識別子のみ)
Quirks Quirks Quirks
HTML 4.01 Transitional
(公開識別子 + システム識別子)
Stdrds Stdrds Stdrds
HTML 4.01 Strict
(公開識別子のみ)
Stdrds Quirks Stdrds
HTML 4.01 Strict
(公開識別子 + システム識別子)
Stdrds Stdrds Stdrds
XHTML 全般
(DOCTYPE宣言のみ)
Stdrds Stdrds Stdrds
XHTML 全般
(XML宣言 + DOCTYPE宣言)
Stdrds Stdrds Quirks
ISO/IEC 15445:2000
(公開識別子 "HTML")
Quirks Quirks Quirks
ISO/IEC 15445:2000
(公開識別子 "HyperText Markup Language")
Quirks Stdrds Stdrds

凡例

Stdrds
CSS 仕様に従った正しい解釈をするモード (Standards mode) に切り替わる。
Quirks
過去慣習的な解釈を再現するモード (Quirks mode) に切り替わる。
DOCTYPE スイッチ機構なし。

試したブラウザ

  • Mozilla 0.9.4 (Mac/Win)
  • Internet Explorer 5.0 (Mac)
  • Internet Explorer 6.0 (Win)
  • Internet Explorer 5.5 (Win)
  • Opera 6.05 (Win) / 6.0 (Mac)
  • Netscape Navigator 4.7 (Mac)
  • iCab pre2.5.2 (Mac)

補足

Mozilla, Netscape6/7 について

  • 現行バージョン (Mozilla0.9.4/Netscape6.1) で試したトコロ、CSS の解釈においてはほとんど「DOCTYPE スイッチ」しません。「不正な数値の解釈」の取り扱い状況にだけ変化が見られたので、上記表はそれに関してのハナシということになります。それ以外は Standards 的解釈のみに固定されてる模様。注意。
  • NewZilla の記載によると、DOCTYPE 宣言が「HTML 4.01 Strict (公開識別子のみ)」の場合は Quirks モードとなる、となっているけど、自前で試した結果は Standards モードのようです…。

Internet Explorer 6.0 (Win) について

  • DOCTYPE 宣言の出現以前に半角空白または改行以外の文字が存在する場合、有無を言わさず Quirks モードとなってしまうようです。という事は XML 宣言のある XHTML の場合は、上記理由で Quirks モードとなってしまうという〜。なんじゃそりゃ。

Opera 6.0x について

  • DOCTYPE の種別に関係なく、仕様通りの正しい解釈をしようとします。

「実例編」へつづきます

「DOCTYPE スイッチ」 CSS 解釈実例編


Copyright © 1998-2006 ALIMIKA SATOMI/NYAN-NYAN-HANTEN.Created: 2001/07/16, Last-modified: 2002/12/17