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のフィルターについて知っておくべきこと

推薦する

nginx+FastDFS を使ってファイル管理システムを段階的に構築する

目次1. FastDFS の概要1. はじめに2. FastDFSストレージ戦略3. FastDFS...

CSS で 3 列レイアウトを実装するいくつかの方法と利点と欠点

序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...

Linuxがすべてのコマンドをサポートしていない問題の解決策

Linux がすべてのコマンドをサポートしていない場合はどうすればいいですか?すべてのLinuxコマ...

Linuxでpyファイルを直接実行する方法

1. まずファイルを作成します(ファイルを配置するディレクトリにcdします) myTest.py を...

CentOS7 に Redis をインストールして設定する方法

導入Redis を詳しく説明する必要はありません。インストールと設定を始めましょう。インストールソー...

HTML の基礎必読 - CSS スタイルシートの包括的な理解

CSS (カスケーディング スタイル シート) は、HTML Web ページを美しくするために使用さ...

HTML 言語百科事典

123WordPress.com-HTML noscriptオブジェクトolオプションPパラントプレ...

Linux dirnameコマンドの具体的な使い方

01. コマンドの概要dirname - ファイル名からディレクトリ以外のサフィックスを削除しますd...

Linux (CentOS7) に Tomcat をインストールし、Tomcat をスタートアップ項目として設定します (tomcat8 を例に挙げます)

目次TomcatをインストールするTomcat 圧縮パッケージをダウンロードTomcatには3つの主...

Ajax は CORS レスポンス ヘッダーを設定してクロスドメインの問題を解決し、クロスドメインのケース スタディを実現します。

1. クロスドメインを実現するためにCORSレスポンスヘッダーを設定するクロスオリジンリソース共有...

k8s に ingress-nginx をデプロイする手順

目次序文1. Ingressの展開と構成2. httpsを使用する序文k8sクラスタサービスがデプロ...

Vue プラグイン エラー: このページで Vue.js が検出されました。問題は解決しました

Vue プラグインがエラーを報告しました: このページで Vue.js が検出されましたVueプラグ...

MyISAMとInnoDBの違いについてお話しましょう

主な違いは次のとおりです。 1. MySQL はデフォルトで MyISAM を使用します。 2. M...

Ubuntu 16.04 に Docker と nvidia-docker をインストールするための詳細なチュートリアル

目次DockerのインストールNvidia-docker のインストールDockerのインストール1...

Reactはconetxtを通じてマルチコンポーネント値転送関数を実装します

この関数の効果はvue的provide/injectに似ています。 contextを通じて反応できる...