doctype 変更 : 文書型宣言
説明
一応断っておくと、これはタグではないし要素でもない。HTML5では単に<!doctype html>
とだけ書いておくと良い。
これは文書の一番始めに書く。要素名や属性名と同じく大文字小文字を区別しないので、<!doctype html>
でも<!DOCTYPE HTML>
でも、中二病っぽく<!dOcTYpe hTmL>
とかでも良い。
なぜdoctypeの項目を書いたかと言うと、各ブラウザの独自実装だった互換モード(Quirks Mode)がHTML5で公式仕様になってしまったからだ。 ここから先は、昔話が不要な人は読まなくて良い。 WHATWGに互換モードの詳しい挙動の仕様があったりする。
HTML4時代までは、文書型宣言はこんな感じだった。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
- HTMLの部分は根っこの要素を示す。HTMLの場合はhtml
- PUBLICの部分は公開されているものかオレオレ文書型なのかを示す。これはPUBLICなので一般公開されたもの
- "-//W3C//DTD..."の部分は公開識別子で、文書型のIDみたいなもん
- "http://www.w3..."の部分はシステム識別子で、文書型宣言のURL
以下の場合に互換モードになる。
- 文書型宣言の取得に失敗した場合
- 要素名(
<!doctype html>
のhtml
の部分)がhtml以外 - 公開識別子が
-//W3O//DTD W3 HTML Strict 3.0//EN//
の場合 - 公開識別子が
-/W3C/DTD HTML 4.0 Transitional/EN
の場合 - 公開識別子が
HTML
の場合 - システム識別子が
http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd
の場合 - 公開識別子が
+//Silmaril//dtd html Pro v0r11 19970101//
で始まっている場合 - 公開識別子が
-//AS//DTD HTML 3.0 asWedit + extensions//
で始まっている場合 - 公開識別子が
-//AdvaSoft Ltd//DTD HTML 3.0 asWedit + extensions//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 2.0 Level 1//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 2.0 Level 2//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 2.0 Strict Level 1//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 2.0 Strict Level 2//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 2.0 Strict//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 2.0//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 2.1E//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 3.0//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 3.2 Final//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 3.2//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML 3//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML Level 0//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML Level 1//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML Level 2//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML Level 3//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML Strict Level 0//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML Strict Level 1//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML Strict Level 2//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML Strict Level 3//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML Strict//
で始まっている場合 - 公開識別子が
-//IETF//DTD HTML//
で始まっている場合 - 公開識別子が
-//Metrius//DTD Metrius Presentational//
で始まっている場合 - 公開識別子が
-//Microsoft//DTD Internet Explorer 2.0 HTML Strict//
で始まっている場合 - 公開識別子が
-//Microsoft//DTD Internet Explorer 2.0 HTML//
で始まっている場合 - 公開識別子が
-//Microsoft//DTD Internet Explorer 2.0 Tables//
で始まっている場合 - 公開識別子が
-//Microsoft//DTD Internet Explorer 3.0 HTML Strict//
で始まっている場合 - 公開識別子が
-//Microsoft//DTD Internet Explorer 3.0 HTML//
で始まっている場合 - 公開識別子が
-//Microsoft//DTD Internet Explorer 3.0 Tables//
で始まっている場合 - 公開識別子が
-//Netscape Comm. Corp.//DTD HTML//
で始まっている場合 - 公開識別子が
-//Netscape Comm. Corp.//DTD Strict HTML//
で始まっている場合 - 公開識別子が
-//O'Reilly and Associates//DTD HTML 2.0//
で始まっている場合 - 公開識別子が
-//O'Reilly and Associates//DTD HTML Extended 1.0//
で始まっている場合 - 公開識別子が
-//O'Reilly and Associates//DTD HTML Extended Relaxed 1.0//
で始まっている場合 - 公開識別子が
-//SQ//DTD HTML 2.0 HoTMetaL + extensions//
で始まっている場合 - 公開識別子が
-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions to HTML 4.0//
で始まっている場合 - 公開識別子が
-//SoftQuad//DTD HoTMetaL PRO 4.0::19971010::extensions to HTML 4.0//
で始まっている場合 - 公開識別子が
-//Spyglass//DTD HTML 2.0 Extended//
で始まっている場合 - 公開識別子が
-//Sun Microsystems Corp.//DTD HotJava HTML//
で始まっている場合 - 公開識別子が
-//Sun Microsystems Corp.//DTD HotJava Strict HTML//
で始まっている場合 - 公開識別子が
-//W3C//DTD HTML 3 1995-03-24//
で始まっている場合 - 公開識別子が
-//W3C//DTD HTML 3.2 Draft//
で始まっている場合 - 公開識別子が
-//W3C//DTD HTML 3.2 Final//
で始まっている場合 - 公開識別子が
-//W3C//DTD HTML 3.2//
で始まっている場合 - 公開識別子が
-//W3C//DTD HTML 3.2S Draft//
で始まっている場合 - 公開識別子が
-//W3C//DTD HTML 4.0 Frameset//
で始まっている場合 - 公開識別子が
-//W3C//DTD HTML 4.0 Transitional//
で始まっている場合 - 公開識別子が
-//W3C//DTD HTML Experimental 19960712//
で始まっている場合 - 公開識別子が
-//W3C//DTD HTML Experimental 970421//
で始まっている場合 - 公開識別子が
-//W3C//DTD W3 HTML//
で始まっている場合 - 公開識別子が
-//W3O//DTD W3 HTML 3.0//
で始まっている場合 - 公開識別子が
-//WebTechs//DTD Mozilla HTML 2.0//
で始まっている場合 - 公開識別子が
-//WebTechs//DTD Mozilla HTML//
で始まっている場合 - システム識別子が無く、公開識別子が
-//W3C//DTD HTML 4.01 Frameset//
で始まっている場合 - システム識別子が無く、公開識別子が
-//W3C//DTD HTML 4.01 Transitional//
で始まっている場合
- 公開識別子が
-//W3C//DTD XHTML 1.0 Frameset//
で始まっている場合 - 公開識別子が
-//W3C//DTD XHTML 1.0 Transitional//
で始まっている場合 - システム識別子があり、公開識別子が
-//W3C//DTD HTML 4.01 Frameset//
で始まっている場合 - システム識別子があり、公開識別子が
-//W3C//DTD HTML 4.01 Transitional//
で始まっている場合
細かい挙動の差については、解説しない。
ちなみに、文書型宣言の話をしていると、よくこわーいお兄さんやオジサンが寄ってくるから、夏の夜とかには話をしちゃいけないゾ☆