トップページ > TIPS > DOCTYPE宣言について

CSSレイアウト[TIPS]

DOCTYPE宣言について

HTML, XHTMLファイルの最上部で、「!DOCTYPE」で始まるタグによる「文書型宣言(document type declaration)」をすることが、W3Cによって推奨されている。

下記はXHTML1.0の場合のDOCTYPE宣言の一例。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

DOCTYPEには大きく分けると「Strict(厳密な)」「Transitional(移行期)」「Frameset(フレームセット用)」の3つの種類がある。また、HTMLやXHTMLのバージョンによっても分けられる。

最大の注意点は、DOCTYPE宣言の書き方によって、モダンブラウザは「互換モード」「標準準拠モード」に変わること。それぞれのモードによってCSSの解釈の仕方が変わり、見た目に大きく差が出る。

見た目の大きな差については「CSSのボックス構造」>DOCTYPE宣言による表示の違いを参照に。
DOCTYPE宣言の構造

DOCTYPE宣言は下のような構造。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
それぞれ、文書型名外部識別子公開識別子システム識別子 と呼ばれるのだそうだ。

この中でもシステム識別子(DTDのURL)は、HTML4.01では無くても表示し、有無によって 「互換モード」「標準準拠モード」の表示の切り換えがブラウザによって変わるため注意が必要。XHTMLではシステム識別子の省略はできない。

DTDとは、Document Type Definitionの略で、W3Cの定義した、HTML文書のマークアップ規則を定めた文書型定義。
XML宣言について

ここで、XML宣言についても触れておく。
XML宣言とは、XHTMLの文頭に入っている下記のような1行。

<?xml version="1.0" encoding="UTF-8"?>

XHTMLはXML文書であるため、「XML宣言」が必要。XHTMLはHTML4.0の仕様をXMLに準拠するように再定義したものであるため。(詳しくは「HTMLの歴史とCSS」を参照に)
ただし、文字コードについては、下記の場合には省略可能なのだそうだ。
●文字コードがUTF-8もしくはUTF-16の場合。
●HTMLなどのプロトコルで文字コードが指定されている場合。

今のところ、この宣言が無くてもほとんどのモダンブラウザが標準準拠モードで表示する。IE6では、XML宣言をすると互換モードになってしまう(下の「表示モード一覧表」を参照)。 このため、個人的には、XML宣言は省略した方が今のところメリットは大きそうだと思う。 IE6ユーザが絶滅し、モダンブラウザでも「XML宣言」が標準になったときには必要だが。

DOCTYPE宣言と表示モード一覧表

くせのあるブラウザの、DOCTYPE宣言による切り換えについてを一覧表まとめたもの。
XML宣言の有無でも切り替わることにも注目。

文書型宣言 XML宣言 システム
識別子
WinIE6 MacIE5 Opera7/8 FireFox Safari
必要なし 互換
HTML 4.01 Strict 必要なし あり 標準
標準 互換 標準
HTML 4.01 Transitional 必要なし あり 標準 ほぼ標準
互換
HTML 4.01 Frameset 必要なし あり 標準 ほぼ標準
互換
XHTML 1.0 Strict あり あり 互換 標準
標準
XHTML 1.0 Transitional あり あり 互換 標準 ほぼ標準
標準
XHTML 1.0 Frameset あり あり 互換 標準 ほぼ標準
標準
XHTML 1.1 あり あり 互換 標準
標準
DTDと、DOCTYPEの3つのタイプ

DOCTYPEには、下記の3つのタイプがある。

「Strict(厳密な)」
HTML上で、W3C非推奨の、見栄えのための要素や属性、フレームが使えない。(⇒全てCSSで表現する)

「Transitional(移行期)」
Strictへの対応ブラウザが出揃うまでの移行期に 使えるように制定したもの。非推奨とされる要素や属性も使用可能。ただしインラインフレーム以外のフレームは使えない。

「Frameset(フレームセット用)」
Transitionalの亜種。フレームが使える。それ以外はTransitionalと同じ。
フレームセットを使うと、ブラウザで「ブックマーク(お気に入り)」にするとき、親ファイルのURLを保存するため、目的のページをダイレクトに記録できず不便。また、うまくページを印刷できないこともある。フレームはユーザの使い勝手のためにも使用しないほうが無難。
モダンブラウザが標準モードになる「DOCTYPE宣言」まとめ

上の「表示モード一覧表」でわかるように、どのブラウザでも標準モードで表示するには、「HTML4.0以上」「システム識別子(DTDのURL)」を記述すること。 「DOCTYPE宣言」そのものが無い場合は互換モードになる。

下記は、モダンブラウザで標準準拠モードになる記述。
「HTML4.01 Strict」
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
「HTML4.01 Transitional」
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
「XHTML1.0 Strict」
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
(注:先頭にXML宣言を入れるとIE6では互換モードになる)
「XHTML1.0 Transitional」
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
(注:先頭にXML宣言を入れるとIE6では互換モードになる)
「XHTML1.1」
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
(注:先頭にXML宣言を入れるとIE6では互換モードになる)