web-dev-qa-db-ja.com

HTMLのさまざまなDoctypeとは何ですか?また、それらはどういう意味ですか?

タイトルが説明しているように、利用可能なさまざまなDoctypeとは何ですか?それらはどういう意味ですか? IE7から切り替えると、レイアウトが少し異なることに気付きました。

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

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

他に何かありますか、そしてその影響や​​影響は何ですか?

ありがとう!

35
Chris Conway

Doctype、またはDocument Type Declarationは、ドキュメントをDocument Type Definitionに関連付けます。

ドキュメントタイプ定義はXMLドキュメントの標準です。 XMLドキュメントとXHTMLドキュメントの両方に多くのDTDがあります。 XML自体には、すべてが整形式であるという要件を除けば、スキーマや非常に具体的なルールのセットはあまりありません。 DTDは、より具体的なものと考えることができますドキュメントのスキーマ

レンダリングモード

標準の動きにより、最近のほとんどのブラウザには、実際にはさまざまなレンダリングモードがあります(標準モード、最新のWeb標準に従ってドキュメントとCSSをレンダリングするため、および癖モード、ここでブラウザは、Webの初期の頃からいくつかのレンダリングのアイデアを取り戻します)。これらのモードは、下位互換性を目的として設定されています。 Webの最初の時代に作成されたWebページの広大な風景は、当時の規則に従ってレンダリングされますが、新しいドキュメントは新しい標準の波にアピールできます。時間が経ち、新しいフォーマットが想像されると、対応するDTDが作成される可能性があります。

ブラウザの不一致

理想的な世界では、ブラウザによってロードされているページは、上部にあるDoctypeを読み取り、それを使用してドキュメントタイプ定義を検索します。次に、そのDTDのスキーマを、ドキュメントの残りの部分を読み取るための基礎として使用します。したがって、Doctypeは、マークアップドキュメントを検証するために不可欠です。 DTDは、ドキュメントを検証するための基準を提供します。

残念ながら、それは理想的な世界ではありません。ブラウザは必ずしもここで一貫して動作するとは限りません。動作する場合、一貫した動作はDoctypesの当初のビジョンと完全には一致していません。解析はDoctypeとは独立して行われますが、主要なブラウザーは少なくともDoctypeを調べてレンダリングモードを決定します。 Doctypeが存在しないか不完全な場合、ブラウザはquirksモードでレンダリングしている可能性があります。適切に記述された最新のドキュメントを正しく表示するには、ブラウザが標準モードでレンダリングされている必要があります。 Mozilla、Safari、およびOperaのいくつかの最近のバージョンは、実際には ほぼ標準 モードを実装しています。これは完全に移行ページ専用です。

Doctypeを変更してページの表示方法が変更されたことに気付いた場合、それはブラウザがドキュメントを解析しようとしたときにわずかに異なるルールのセットを適用している可能性があるためです。結果として、結果のページは、そのすべての部分がDTDに準拠しているかどうかによって、または少なくともブラウザーによっては、Doctypeが提案するレンダリングモード内でデータが検証されるかどうかによって、少し異なる場合があります。

Doctypeの選択

標準への準拠を追求するために、可能な限り厳密なDoctypeを使用する必要があります。

[〜#〜] xhtml [〜#〜]で書き込む場合、このDoctypeは一般的です。

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

HTML 4.1で書き込む場合、代わりにこれが一般的です。

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

完全を期すために、XHTMLおよびHTML4のその他の一般的なDoctypeを以下に示します。

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

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

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

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

厳密なDoctypeと移行的なDoctypeに関する議論

標準のエバンジェリストは、Web開発者に、新しいページでのTransitional Doctypeの使用をやめ、代わりにStrictを使用するように求めています。繰り返しますが、これは理論と実践を調和させるのにいくつかの困難がある場合です。移行Doctypeの当初の希望は、レガシーWebサイトを標準への準拠に移行するための中間的な手段を提供することでした。移行型Doctypeを使用すると、要素と属性の制限は文字通り「それほど厳しくない」ため、開発者は標準モードで作業をより早く実行し、時間の経過とともに顕著な違いを段階的に廃止することができます。

開発者がエンタープライズ環境でDoctypeを変更することは必ずしもそれほど単純ではないため、論争が存在します。フリーランスの開発者や中小規模のWebサイトのメーカーは、Doctypeを決定し、この移行を行うのに時間がかかることがよくあります。需要の高いWebベースのサービスのエンタープライズ実稼働環境では、レガシーシステムとサードパーティのコード製品への依存関係が本質的に複雑になり、それら自体が削除または再設計のロードマップ上にある可能性がありますが、そのような変更の実行は系統的かつ段階的に行われます。

役立つツール

W3C( World Wide Web Consortium )は、これらの種類の標準を定義する上で積極的な役割を果たすグループです。彼らは、ドキュメントを標準に照らして検証および検証するための便利なオンラインツールを http://validator.w3.org/ に維持しています。他にも多くのサードパーティツールがあり、同様の機能を持つ ブラウザ拡張機能 があります。

54
keparo

ブラウザ 気にしない 使用するDoctype(まあ、ほぼ真実)、彼らはそれを1つのことと1つのことだけに使用します:どのレンダリングモードを決定するか使用します。たとえば、 Fx または Operaのドキュメント 使用するモードを決定するために使用されるアルゴリズムの実際の例(IE MSDNのどこかに埋もれています... [これは正しいページかもしれません]( http://msdn.Microsoft.com/en-us/library/ms535242(VS.85).aspx) 、わかりません、ごめんなさい)。

ただし、ほとんどのブラウザには2つの主要なモードがあります(一部のブラウザには ほぼ標準モード もあります):

  • quirks mode(「正しい」doctypeが見つからない場合に使用され、ブラウザの観点からは「正しい」):ドキュメントを古いものとしてレンダリングしてみてくださいIEのバージョンで十分です(最も重要な違いの1つ、つまりレンダリングに最も影響を与えるのは、一部のブラウザーがこのモードで IEボックスモデルのバグ を悪用することです)、
  • および標準モード(ブラウザーが正しいと見なすDoctypeを見つけたときに使用されます):標準に記載されているとおりに実行してみてください。

使用できます(非標準) document.compatMode 現在のドキュメントのレンダリングに使用されたモードを確認するための前述のブラウザのプロパティ。

(XHTMLに関する注意:ドキュメントをHTMLとして提供すると仮定しました(text/html)、ドキュメントをXHTMLとして提供する場合(おそらくapplication/xhtml+xml)ほとんどのブラウザは直接標準モードにジャンプし、Doctypeをまったく気にしません。)

ところで:他の回答の推奨事項(または推奨事項のように見えたもの)が壊れているため、 transitional DTDを新しいドキュメントで使用しないでください。常にstrictを使用します(「strict」という用語は誤解を招くようなものであり、「default」またはその他の怖くないものにする必要があります)、期間:

作成者は、可能な場合はStrict DTDを使用する必要がありますが、プレゼンテーションの属性と要素のサポートが必要な場合はTransitionalDTDを使用できます。 -- HTML 4.01:22移行ドキュメントタイプ定義

著者は、この仕様で定義されている他のDTDではなく、厳密なDTDに準拠するドキュメントを作成することをお勧めします。 -- HTML 4.01:4適合性:要件と推奨事項

そして、これに関する多くのブログ投稿があります。 これ以上の移行DOCTYPEはありません (2006年からですが、一部は、明らかに、これにはまだ問題があります:)。

この投稿は、ブラウザが何を選択してもかまわないことを指摘することから始まり、正しいDTDを選択する方法についての怒りに発展しました、興味深い...しかし、時間とエネルギーを費やす(/無駄にする?)場合DTDを選択するには、正しいものを選択することもできます(つまり、HTML 4.01標準の観点から)。

または、これをすべて無視して、代わりに次を使用できます すぐにとにかく

<!doctype html>

この回答 「HTML5 doctypeの使用を開始しない理由はありますか?」は、最後の部分に関連していました。)

7
cic
3
hsivonen

W3CのさまざまなDTDの公式説明は次のとおりです。

http://www.w3.org/QA/2002/04/valid-dtd-list.html

また、次の利点があります。

http://www.freedivs.com/tutorials/Choosing%20a%20DOCTYPE/

3
Noah Goodrich

Doctypeの周りには多くの誤った情報があります。混乱は、Doctypeが元々1つの目的(DTD、つまり使用されるHTMLバージョンを識別するため)を目的としていたという事実に起因しますが、実際のブラウザーではまったく関係のない目的で使用されます。

Doctype宣言は、今日のブラウザで1つのことにのみ使用されます。つまり、の癖レンダリングモードとCSSの標準レンダリングモード。つまり、基本的にはCSSのものであり、HTMLのものではありません。

Quirksモードのレンダリングは、古いブラウザのいくつかの古いレンダリングバグと下位互換性があり、修正したくないレガシーコンテンツに主に役立ちます。新しいコンテンツは、ブラウザ間でより正確かつ一貫してレンダリングされるため、常に標準モードを使用する必要があります。 (標準モードを使用する場合、ブラウザー間でレンダリングの違いはありますが、癖モードではさらに悪化します。)

HTMLまたはXHTMLのDocytypeを選択しても、notは違いません。また、strictまたはtransitional doctypeを選択しても、違いはありません。レンダリングモードは基本的に次のように選択されます。

  • ドキュメントにDoctypeがない場合は、quirksモードが選択されます。
  • ドキュメントにunrecognizeddoctypeがある場合、standardsモードが選択されます。これは、<!DOCTYPE Chris>のようなランダムなDoctypeを記述でき、完全に正常に機能することを意味します。
  • 公式のW3CDoctypeswithout正しいURL(タグの2番目の文字列)はquirksモードを選択します。他のすべてのDoctypeは、標準モードを選択します。 (編集:もちろんそれはそれよりも複雑であり、認識されたDoctypeのどれがquirksモードをトリガーするかはブラウザー間でさえ異なります。Se hsivonensの概要 、別の回答からリンクされています。)

歴史的に、doctypeは、使用されたHTMLのバージョンとサブセットを宣言することを目的としていました。 HTML4はいくつかのバージョンを定義しており、「transitional」では「strict」では許可されていない(FONTのような)多くの要素と属性が許可されます。ブラウザは、理論的には「移行」ドキュメントとは異なる「厳密な」ドキュメントを処理できます。ただし、実際にこれを行うブラウザはありません

編集:scunliffeは、IE8にはさらに別のレンダリングモードである「IE8標準」モ​​ードがあることを指摘しています。ただし、このモードはdoctypeではなく、メタタグによってトリガーされます。

2
JacquesB

基本的に、doctypeは、IEがどれほどクレイジーになるかを決定します。

XHTML、つまり「厳密」に設定しないと、IE(設定しても、それでもIEは嫌いですが、それははるかに良くなります)。

0
dicroce