35

タイトルが説明しているように、利用可能なさまざまな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">

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

ありがとう!

4

6 に答える 6

54

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

文書型定義は、特定の XML または SGML 文書の標準です。XML と SGML 自体には、タグと属性が一般的にどのように機能するかを除けば、多くのスキーマや特定のルール セットはありません。DTD は、特定の種類のドキュメント (HTML、SVG、MathML など) の規則の記述と考えることができます。どのタグがどこで許可されるかを示します (たとえば、要素には 1 つの要素とそれに続くhtml1 つの要素が含まれている必要があります)。headbody

今日より一般的に使用されている XML スキーマなど、DTD に代わるものがあります。

ただし、ブラウザーは DTD をまったく使用しません。レンダリング モードを決定するために Doctype を読み取りますが、ドキュメントを解析するためのルールは完全にブラウザーに組み込まれています。

これが、HTML 5 に (レンダリング モードを決定するための) Doctype があるのに、DTD がない理由です。

レンダリング モード

初期の Web ブラウザは非常にバグが多かったです。新しいバージョンがリリースされたとき、前任者やライバルとの互換性を維持する必要がありました。ウェブサイトはバグに依存して構築されていたため、バグの修正が非常に困難でした。

これを解決するために、最新のブラウザーにはさまざまなレンダリング モードがあります (標準に従ってドキュメントと css をレンダリングする標準モード、ブラウザーが以前のブラウザーのバグをエミュレートするquirks モード、およびこの 2 つの間に位置するほぼ標準モード)。

Doctype の選択

Doctype を選択する際に考慮すべき要素が 2 つあります。

  • 標準モードをトリガーしますか? (新しいページの場合、標準モードをサポートしていないブラウザーとの互換性が必要な場合は、今日では非常にまれです)
  • 必要な機能をサポートしていますか?

一般に、これは HTML 5 を使用する必要があることを意味します。これは現在の標準であり、ブラウザが実際にどのように動作するかを最もよく反映しています。

<!DOCTYPE html>

それに失敗しました。厳密な doctype は、CSS で処理する必要があるほとんどの機能を回避します。

XHTML 1.0で書く場合、この 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 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

HTML 4.01で書く場合、代わりにこれが一般的です:

<!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 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

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

上記のほとんどには、標準モードのサポートに影響を与えるバリエーション (たとえば、URL を省略して公開識別子に依存することができます) があることに注意してください。この記事には広範なリストが含まれています

Strict 対 Transitional Doctypes に関する議論

(以下は2008 年よりも 2021 年にあまり当てはまらないことに注意してください)

標準のエバンジェリストは、Web 開発者が新しいページで Transitional Doctype を使用するのをやめ、代わりに Strict を使用するよう求めています。繰り返しますが、これは、理論と実践を両立させるのが困難な場合です。移行用 Doctype の本来の目的は、レガシー Web サイトを標準準拠に移行するための中間点を提供することでした。移行用の Doctype では、要素と属性に対する制限は文字通り「それほど厳密ではない」ため、開発者は標準モードでより早く作業を開始し、時間の経過とともに未解決の相違点を段階的に廃止できます。

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

便利なツール

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

于 2008-11-01T03:23:52.170 に答える
7

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

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

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

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

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

ところで:他の回答の推奨事項(または推奨事項のように見えたもの)は壊れています。新しいドキュメントでは移行用のDTDを使用しないでください。常にstrictを使用してください(「strict」という用語は誤解を招く可能性があり、「デフォルト」またはその他の怖くないものにする必要があります)、ピリオド:

作成者は、可能な場合は Strict DTD を使用する必要がありますが、プレゼンテーション属性と要素のサポートが必要な場合は、Transitional DTD を使用できます。-- HTML 4.01: 22 Transitional Document Type Definition .

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

そして、これに関する多くのブログ投稿があります。たとえば、Transitional DOCTYPEs はもうやめてください(2006 年からですが、明らかに、これにはまだ問題があるものもあります :)

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

または、これをすべて無視して、代わりに次のものを使用でき ます

<!doctype html>

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

于 2008-11-01T16:29:39.900 に答える
3

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

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

また、次の利点がある場合もあります。

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

于 2008-11-01T03:23:06.070 に答える
3

レンダリング モードの選択に Doctype がどのように関与するかを説明する記事を書きました。

于 2008-11-02T21:00:33.737 に答える
2

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

Doctype 宣言は、今日のブラウザーでは、CSSのquirksレンダリング モードと標準レンダリング モードの切り替えという1 つの目的でのみ使用されます。したがって、基本的には HTML ではなく CSS です。

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

HTML と XHTML のどちらのドキュメントタイプを選択しても違いはありません。厳密なドキュメントタイプまたは移行的なドキュメントタイプを選択しても違いはありません。レンダリング モードは、基本的に次のように選択されます。

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

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

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

于 2008-11-02T08:48:32.763 に答える
0

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

XHTML に設定しない場合、または「厳密」に設定しない場合は、IE に関しては苦痛の世界に住むことになります (設定したとしても、IE を嫌うことは変わりませんが、それで問題は解決します)はるかに優れています)。

于 2008-11-01T22:11:25.373 に答える