HTML ソースの冒頭にある(べきである) DOCTYPE 宣言を見て、HTML や CSS 解釈の挙動を変えるブラウザがあるんスよ、というハナシ。
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 宣言とわ、その 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 スイッチ」は 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 | − | − | − | − |