14: Choosing the right doctype

ホントは "Choosing the right doctype for your HTML documents"

The doctype comes first

あらゆる HTML document の最初には DTD declaration(="doctype")を置く。

DTD
Document Type Definition: どんな elements や attributes を許可する HTML なのか。

HTML には何種類かあるけど、そんなに気にすることでもない。

doctype の用途は

  1. ブラウザ: どの rendering mode を使うのか
  2. Validators: どのルールに従って検証するのか

example:

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

`"-//W3C//DTD HTML 4.01//EN"` は、W3C の HTML version 4.01 の DTD を使う、その DTD は英語で書かれてる、という意味。`"http://www.w3.org/TR/html4/strict.dtd"` は、この doctype で指定している DTD document の URL。

HTML でも XHTML でも必須(そう specification で決まってる)。無いと validation で error が出る。

Doctype switching and rendering modes

doctype を指定しなくてもブラウザは document を表示してくれる。が、"doctype sniffing" とか "doctype switching" とかいうもののせいで変な風に表示されるかも。

最近のブラウザはみんな、あらゆる HTML document に対して doctype を見ることでそれを書いた人が web standards に従って書いたかどうかを判断する。

もし doctype が「ちゃんと書いてあるお」って言ってたら、ブラウザは "Standards mode" で表示する。つまり CSS の specification に従って表示する。

あるいは doctype が古かったりおかしかったりすると "Quirks mode" で表示する。これは "Standards mode" より後方互換性がある(古い書き方の HTML とか、古いブラウザと同じように表示するとか)が、CPU を喰うし、変な風に表示されたりする。

影響を受けるのはほとんどの場合 CSS をどう表示するかで、HTML そのものがどう扱われるかに影響を与えることは希。ちゃんとした doctype 指定+web standards に従っておいて、ブラウザには Standards mode で表示させた方が、一貫した結果が得られる(どのブラウザでもちゃんと表示される)。

Validation

Validator に対して doctype を指定しておくのは、スペルチェッカーにどの言語なのか教えるようなもの。

Choosing a doctype

doctype はいろいろあるし何なら自分で作ることもできるが、ふつー必要なのは2つだけ。

HTML なら

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

XHTML なら

<!DOCTYPE html PUBLIC "-//W3C/DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

NOTE: 本物の XHTML document は XML として配信されなきゃならん。

どっちの doctype もブラウザに standards mode を使わせる。つまり CSS でスタイルを指定したときにちゃんと表示される。
その他の doctype のリスト->W3C QA - Recommended list of Doctype declarations you can use in your Web document

”Strict" っておっかない気がするけど、そんなこたぁない。HTML にも XHTML にも strict と transitional があって、strict の方が transitional より見た目に関するマークアップを許可しない。それらはどうせ使わないでおくべきなので strict で無問題。

The XML declaration

「HTML document の最初に doctype がなきゃいけない」とか言ったけど、XML declaration というのがあって、それは doctype の前に来なきゃいけない。

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

IE6 はこれがあると Quirks mode になってしまうという問題がある。

しかし XML declaration が必要なのは、以下の条件を全て満たす XHTML document のみ

なので、大抵は単に XML declaration は省略して問題ない。doctype は省略すんな。

Summary

上で出た doctype のどちらかを HTML document の最初に入れること。そうしておけば Validator がどのバージョンの HTML なのか判断して、どこが間違ってるとか教えてくれる。それに最近のブラウザなら Standards mode を使うようになるので、ちゃんと表示される。

Exercise questions

What are the two main purposes of including a doctype in HTML documents?

「どのバージョンの (X)HTML なのか指定する」で1つになっちゃった。

What are the benefits of using a strict doctype instead of a transitional one?

使うべきでない tags/elements を使うと、Validator が error 吐いてくれる。

Why is the XML declaration problematic?

all i can say is "stupid IE".

One doctype I haven't mentioned in this article is the frameset doctype --- research what this does, and why it shouldn't be used.

眠いので後日ってことで勘弁願います。