DOCTYPEタイプの詳細な紹介

DOCTYPEタイプの詳細な紹介
<br />通常、HTML では次の方法で DOCTYPE を宣言します。
<!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 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
はい、HTML と XHTML があり、また Transitional と Strict もあります。名前が示すように、XHTML はドキュメントが XML 形式で記述されていることを意味し、HTML はドキュメントが HTML 形式で記述されていることを意味します。 Transition は、ドキュメントが Transitional.dtd または lose.dtd の要件を満たしていることを意味し、Strict は、ドキュメントが strict.dtd の要件を満たしていることを意味します。しかし、実際には次のような誤解がよくあります。
(1)私の文書はXHTMLとして宣言されているので、完全なXML形式である必要があります。
(2)文書がStrictとして宣言されている場合、文書は必ずStrictモードでレンダリングされます。そうでない場合は、Quirksモードでレンダリングされます。
これら 2 つの理解は非常に直接的ですが、間違っており、私たちはよくこの間違いを犯します。
まず、XHTML および HTML としてのドキュメント宣言は、ドキュメントの解析 (つまり、ブラウザーによるドキュメントの分析) と直接的な相関関係はありません。実際、ブラウザがドキュメントを解析する方法は、サーバーがドキュメントを提供する形式によって異なります。一般的には、「text/html」と「application/xhtml xml」の 2 つの方法があります。 「application/html xml」形式で提供されるドキュメントのみを XML として解析できます。ただし、ブラウザの歴史的理由により、すべてのブラウザが「application/xhtml xml」形式のドキュメントをサポートしているわけではありません。IE7 より前のバージョン (IE7 を含む) では、この形式をサポートできません。IE7 がこの形式のドキュメントを検出すると、ユーザーに別のファイルとして保存するように求めるメッセージが表示されます。 IE の普及を考慮して、現在、ほとんどのドキュメントは「text/html」形式で提供されています。 「text/html」形式で提供されるドキュメントは、HTML のセマンティクスに従って解析されます。ご存知のとおり、HTML は非常に寛容です。ドキュメント内のタグが正しく閉じられていない場合でも、HTML は正しく表示されます。したがって、XHTML が「text/html」として提供されている場合 (ほとんどの場合に当てはまります)、DOCTYPE で XHTML を宣言しても、ドキュメントは XML 形式で解析されないため、ドキュメントが XML 仕様に厳密に準拠しているという保証はありません。実際、多くの専門家は、ドキュメントが「application/xhtml xml」として提供されていない場合は、HTML として宣言することを推奨しています。
第二に、ブラウザがドキュメントをレンダリングする方法は、宣言した DTD によって決まるわけではありません。実際、DOCTYPE と DTD を宣言すると、ドキュメントは Strict モード (または標準モード。多くのブラウザには Almost Standard モードも含まれていますが、ここでは区別されません) でレンダリングされます。 DOCTYPE のないドキュメントは、Quirks モードでレンダリングされます。したがって、ブラウザのレンダリング モードは、宣言した DTD と直接関係がありません。
最後に、Strict.dtd として宣言するか Transitional.dtd として宣言するかは、現在のブラウザには影響しません。 Strict.dtd は Transitional.dtd や lose.dtd よりもはるかに厳格であり、多くの要素は strict.dtd では使用できません。ただし、ブラウザの互換性により、DOCTYPE で Strict.dtd を宣言した場合でも、ブラウザは strict.dtd で許可されていない要素に遭遇してもドキュメントを正しく表示できます。ブラウザは DTD を考慮していないようです。たとえば、strict.dtd には iframe タグが存在しません。ただし、DOCTYPE で strict.dtd を宣言し、iframe タグを使用した場合でも、ブラウザー (IE7、IE8、FF3.0、Safari 3.0 を含む) はドキュメントを正しく表示できます。ブラウザは宣言した DTD に従ってドキュメントを解析しません。現在、ドキュメントが strict.dtd または Transitional.dtd に準拠していることを確認する唯一の方法は、W3C Validator などのオンライン検証ツールで分析することです。ブラウザーでは十分なサポートを提供できません。もちろん、実際には、宣言した DTD に厳密に従ってドキュメントを作成できれば最適です。これにより、将来ブラウザーが DTD に厳密に従うときにドキュメントでエラーが発生しなくなります。
したがって、
(1)文書が「text/html」として提供される場合は、HTMLとして宣言する必要があります。 IE7 を正しく表示したい場合は、さらにこれを行う必要があります。
(2)文書がXHTMLとして宣言されている場合は、「application/html xml」として提供する必要があります。
(3)文書がQuirksモードでレンダリングされないように、文書の先頭でDOCTYPEとDTDを宣言するようにしてください。
(4)DTDを宣言する場合は、DTDの要件に厳密に従って文書を作成する必要があります。特に Strict.dtd を宣言する場合は、使用できない要素に注意する必要があります。
注: 時間が経つにつれて、HTML と XHTML、Strict.dtd、Transitional.dtd に対するブラウザのサポートは向上します。ご使用のブラウザが IE7、IE8、FF 3.0、Safari 3.0 よりかなり新しい場合は、この記事の適用性に注意する必要があります。

<<:  DockerはホストのMysql操作に接続します

>>:  Vueのフィルターについて知っておくべきこと

推薦する

Dockerを使用して分散lnmpイメージを作成する

目次1. Docker分散lnmpイメージ生成1. Nginx、MySQL、PHPコンテナを実行する...

JDBC 接続 (MySQL への接続) の 6 ステップのサンプル コード

JDBC の 6 つのステップ: 1. ドライバーを登録する2. データベース接続を取得する3. デ...

MySQL共通ストレージエンジンの機能と使用方法の詳細な説明

この記事では、一般的な MySQL ストレージ エンジンの機能と使用方法を例を使って説明します。ご参...

方言変換のためのApache Calciteコード

意味Calcite は、Sql を SqlNode に解析し、次に SqlNode を特定のデータベ...

MySQL8のパスワードを忘れた場合の簡単な解決策

序文MySQL データベースのパスワードを忘れると、データベースに正常にアクセスできなくなり、パスワ...

JS の精度外数値問題の解決

精度の問題に対する最もわかりやすい説明たとえば、1÷3=0.33333333...という数字は、3が...

mysql 8.0.16 winx64 および Linux でルート ユーザーのパスワードを変更する方法

データベースへの接続などの基本的な操作はご自身で行ってください。この記事ではパスワードの変更方法を中...

スライドによるページめくり効果とクリックイベント問題をモバイル端末上で実装する

前述のこの記事はとても短いです〜主な目的は、モバイル端末上のクリックと js イベントのメカニズムに...

MySQLのネクストキーロックのロック範囲についての簡単な説明

序文ある日、突然 MySQL の次のキー ロックについて尋ねられ、私の即座の反応は次のようなものでし...

HTML 初心者のためのベストプラクティス 15 選

HTML 初心者向けのベストプラクティスを 30 個紹介します。 1. タグを閉じたままにする過去に...

JS WebSocket 切断理由とハートビートの仕組みの詳しい説明

1. 切断理由WebSocket が切断される理由は多数あります。WebSocket が切断されたと...

JavaScriptは、マウスが通過したときにドロップダウンボックスを表示するように実装します。

この記事では、マウスがドロップダウンボックスの上を通過するときにドロップダウンボックスを表示するため...

MySQLフィールド定義でnullを使用しない理由の分析

NULL が頻繁に使用されるのはなぜですか? (1)Javaのnull Java の NullPoi...

Tencent Cloudでhive3.1.2を構築する方法を教えます

環境の準備操作を開始する前に、hadoop バージョンがインストールされていることを確認してください...

v-html レンダリング コンポーネントの問題

以前 HTML を解析したことがあるので、今日は Vue ドラッグ アンド ドロップを使用して、Ku...