web-dev-qa-db-ja.com

HTML:オプションの終了タグを含めるか、除外しますか?

一部 [〜#〜] html [〜#〜]1 終了タグはoptional、つまり:

</HTML>
</HEAD>
</BODY>
</P>
</DT>
</DD>
</LI>
</OPTION>
</THEAD>
</TH>
</TBODY>
</TR>
</TD>
</TFOOT>
</COLGROUP>

注:含まれるforbiddenである終了タグと混同しないでください。

</IMG>
</INPUT>
</BR>
</HR>
</FRAME>
</AREA>
</BASE>
</BASEFONT>
</COL>
</ISINDEX>
</LINK>
</META>
</PARAM>

注:xhtmlはHTMLとは異なります。 xhtmlはxmlの形式で、every要素に終了タグが必要です。終了タグは、htmlではforbiddenxhtmlではmandatoryです。

オプションの終了タグは

  • 理想的にはincludedですが、忘れた場合は受け入れます。または
  • 理想的にはnot含まれますが、それらを入れれば受け入れます

言い換えれば、それらを含めるべきです、またはnotそれらを含めるべきですか?

HTML 4.01仕様では、要素タグを閉じることはオプションです を説明していますが、それらを含めるほうが好ましいか、含まないほうがよいかは述べていません。

一方、 DevGuruのランダムな記事によると

終了タグはオプションです。ただし、含めることをお勧めします。

私が尋ねる理由は、互換性の理由でオプションであるknowだけだからです。可能であれば、(mandatory|forbidden)にします。

別の言い方をすれば、HTML 1、2、3は、これらのオプション(現在はオプションの終了タグ)に関して何をしましたか。 HTML 5は何をしますか?そして、[〜#〜] i [〜#〜]はどうすればよいですか?

注意

HTMLの一部の要素は、終了タグを持つことをforbiddenしています。あなたはそれに反対するかもしれませんが、それは仕様であり、議論の余地はありません。私はoptionalタグを閉じることと、その意図が何であるかを尋ねています。

脚注

1HTML 4.01

149
Ian Boyd

オプションのものは、終了タグを必要とせずに、どこで終了するかを意味的に明確にする必要があるすべてのものです。例えば。各<li>は、直前にない場合は</li>を意味します。

禁止された終了タグにはすべて終了タグがすぐに続くため、毎回<img src="blah" alt="blah"></img>を入力する必要があり、冗長です。

ほとんどの場合、オプションのタグを使用します(理由がない限り).

49
aslum

明示的なタグが役立つ場合がありますが、時には不必要な知識が必要です。

HTML仕様では、タグを省略することがいつ有効であるかが明確に指定されているため、常にエラーとは限りません。

たとえば、</body></html>は必要ありません。 <tbody>を明示的に(XHTMLが例外を作成した点まで)置くことを誰も覚えていません。

実際に</head><body>を検索するDOM操作スクリプトがない限り、<head>は必要ありません(暗黙的に<head>の終わりのルールがあなたを驚かせる可能性があるため、明示的に閉じる方が良いでしょう)。

ネストされたリストは、実際には</li>なしの方が適しています。これは、エラーのあるul > ulツリーを作成するのが難しいためです。

有効:

<ul>
  <li>item
  <ul>
    <li>item
  </ul>
</ul>

無効:

<ul>
  <li>item</li>
  <ul>
    <li>item</li>
  </ul>
</ul>

また、すべての要素を閉じようとするかどうかに関係なく、終了タグが暗示されることに留意してください。終了タグを配置しても、解析がより堅牢になることはありません。

<p>foo <p>bar</p> baz</p>

次のように解析されます:

<p>foo</p><p>bar</p> baz

ドキュメントを検証する場合にのみ役立ちます。

58
Kornel

さまざまな矛盾を理解できるように、ここにHTMLの歴史を支援するためのリンクをいくつか追加します。これはあなたの質問への答えではありませんが、これらのさまざまなダイジェストを読んだ後にもっと知ることができます。

Dive Into HTML5 からの抜粋:

[壊れた] HTMLマークアップがWebブラウザーでまだ機能しているという事実により、著者は壊れたHTMLページを作成するようになりました。多くの壊れたページ。一部の推定では、今日のWeb上のHTMLページの99%以上に少なくとも1つのエラーがあります。しかし、これらのエラーはブラウザに目に見えるエラーメッセージを表示させないため、誰も修正することはありません。

W3CはこれをWebの根本的な問題と見なし、修正に着手しました。 1997年に公開されたXMLは、クライアントを容認するという伝統から脱却し、XMLを使用するすべてのプログラムは、いわゆる「整形式」エラーを致命的なものとして扱わなければならないことを義務付けました。最初のエラーで失敗するというこの概念は、ギリシャの指導者 ドラコ が彼の法律の比較的軽微な違反に対して死刑を制定した後、「過酷なエラー処理」として知られるようになりました。 W3CがHTMLをXMLボキャブラリーとして再編成したとき、新しいapplication/xhtml+xml MIMEタイプで提供されるすべてのドキュメントが厳しいエラー処理の対象になることを義務付けました。 XHTMLページに整形式のエラーが1つでもあった場合[…]、Webブラウザーは処理を停止し、エンドユーザーにエラーメッセージを表示する以外に選択肢はありません。

このアイデアは一般的に普及していませんでした。既存ページの推定エラー率は99%、エンドユーザーにエラーを表示する可能性が常に存在し、コストを正当化するためのXHTML 1.0および1.1の新機能が不足しているため、Web作成者は基本的にapplication/xhtml+xmlを無視しました。ただし、XHTMLを完全に無視したわけではありません。ああ、ほとんど間違いない。 XHTML 1.0仕様の付録Cは、世界中のWeb作成者に抜け穴を与えました。「XHTML構文に似たものを使用しますが、text/html MIMEタイプで提供し続けます。」 XHTML構文に「アップグレード」されましたが、text/html MIMEタイプで提供し続けました。

今日でも、何百万ものWebページがXHTMLであると主張しています。最初の行はXHTML doctypeで始まり、小文字のタグ名を使用し、属性値を引用符で囲み、<br /><hr />などの空の要素の後に末尾のスラッシュを追加します。ただし、これらのページのごく一部のみが、XMLの厳格なエラー処理をトリガーするapplication/xhtml+xml MIMEタイプで提供されます。 MIMEタイプtext/htmlで配信されるページは、doctype、構文、またはコーディングスタイルに関係なく、「寛容な」HTMLパーサーを使用して解析され、マークアップエラーを静かに無視し、エンドユーザー(または他のユーザー)ページは技術的に壊れています。

XHTML 1.0にはこの抜け穴が含まれていましたが、XHTML 1.1はそれを閉じ、決して終わらないXHTML 2.0は過酷なエラー処理を必要とする伝統を続けました。そして、それがXHTML 1.0(またはXHTML 2.0)であると主張する数十億のページがあり、XHTML 1.0(またはXHTML 2.0)であると主張するほんの一握りのページがある理由です。 XHTMLを本当に使用していますか? MIMEタイプを確認してください。 (実際、使用しているMIMEタイプがわからない場合、text/htmlを使用していることを保証できます。)application/xhtml+xmlのMIMEタイプでページを提供している場合を除き、いわゆる「 XHTML」は名前のみのXMLです。

[T]進化するHTMLおよびHTMLフォームを提案した人々は、2つの選択肢に直面しました。あきらめるか、W3Cの外部で作業を続けるかです。彼らは後者を選択し、 whatwg.org ドメインを登録し、2004年6月に WHATワーキンググループが誕生しました を登録しました。

[T] WHATワーキンググループは、他のいくつかの作業にも静かに取り組んでいます。それらの1つは、最初は Web Forms 2. と呼ばれる仕様で、HTMLフォームに新しいタイプのコントロールを追加しました。 ( A Form of Madness でWebフォームの詳細を学習します。)もう1つは、 直接モード描画canvas および プラグインなしのオーディオとビデオ のネイティブサポート。

2009年10月、W3C XHTML 2ワーキンググループをシャットダウン および 決定を説明するためにこの声明を発行

2007年3月にW3CがHTMLおよびXHTML 2ワーキンググループを発表したとき、XHTML 2の市場を引き続き監視することを示しました。W3Cは、HTMLの将来に関するコミュニティへの明確なシグナルの重要性を認識しています。

長年にわたるXHTML 2ワーキンググループの貢献の価値を認識していますが、参加者との議論の後、W3Cの管理者はワーキンググループの憲章の期限を2009年末に失効させ、更新しないことを決定しました。

勝つものは出荷するものです。

18
Srikar Doddi

私が尋ねる理由は、互換性の理由でオプションであることがわかっているからです。そして、もし可能なら、彼らはそれらを(必須|禁止)にしたでしょう。

それは興味深い推論です。私が読んだのは、タグを確実に推測できる場合はいつでも、タグはオプションだということです。設計は、意図がそれを素早く簡単に書くことであったことを示唆しています。

HTML 1、2、3は、これらのオプション(現在はオプションの終了タグ)に関して何をしましたか。

HTML 2のDTDは [〜#〜] rfc [〜#〜] に埋め込まれ、元の HTML DTD とともにオプションの開始タグと終了タグがすべてあります。場所の上。

HTML 3は(ブラウザ戦争のおかげで)放棄され、HTML 3.2(Webの現在の状態を記述するために設計された)に置き換えられました。

HTML 5は何をしますか?

HTML 5は、最初から「牛道を舗装する」ことに向けられていました。

そして、私は何をすべきですか?

ああ、今では主観的で議論的です:)

一部の人々は、読者の目の前にあるため、明示的なタグのほうが読みやすさと保守性に優れていると考えています。

一部の人々は、エディターを煩雑にしないため、推測されたタグの方が読みやすさと保守性に優れていると考えています。

12
Quentin

HTML 5は何をしますか?

この質問に対する答えは、W3C Working Draftにあります。 http://www.w3.org/TR/html5/syntax.html#syntax-tag-omission

そして、私は何をすべきですか?

それはスタイルの問題です。終了タグは絶対に省略しないようにします。これは、厳密にするのに役立ち、not必要なタグを省略するためです。

8
ghoppe

不要な場合は、省略します。

それが目的(IDEまたは目をなだめる)などの一見些細な目的であっても)に役立つ場合は、そのままにしておきます。

明確に定義された仕様では、動作に影響を与えないオプション項目を見るのはまれです。もちろん、「コメント」を除きます。ただし、HTML仕様は設計仕様ではなく、現在の主要な実装の状態に関するドキュメントです。そのため、アイテムがHTMLでオプションであり、それが目的を果たさないように思われる場合、オプションの性質は単に特定のブラウザーでの奇癖のドキュメントであると推測するかもしれません。

上にリンクされているHTML-5仕様のRFCセクションを見ると、オプションタグがコメントの存在に奇妙にリンクされていることがわかります。これは、著者がデザインの帽子をかぶっていないことを示しているはずです。代わりに、彼らは主要な実装で「癖を文書化する」ゲームをプレイしています。したがって、この点で仕様をあまり真剣に受け止めることはできません。

そのため、解決策は次のとおりです。汗をかかないでください。実際に重要なことに進みます。 :)

6
John

最良の答えは、読みやすさやエラー検出のためにタグを閉じることです。ただし、生成されたHTML(データのテーブルなど)が多数ある場合は、オプションのタグを省略することで帯域幅を大幅に節約できます。

5
Gabe

私の推奨事項は、ほとんどのオプションの終了タグと、回避できるすべてのオプションの属性を省略することです。多くのIDEが文句を言うので、これらのいくつかを省略することで逃げることはできないかもしれませんが、一般的にはファイルサイズが小さく、混乱が少ない方が良いです。コードジェネレーターがある場合、そこから終了タグを確実に省略します。これは、サイズを適切に削減できるためです。通常、それは実際にはどちらの方法でも問題ではありません。

しかし、それが重要な場合は、それに基づいて行動します。最近の私の仕事では、生成されたHTMLのサイズを1.5 MBから800 KBに減らすことができました。これは、要素のテキストが値。約200個のタグがあります。これを別の方法で完全に実装することもできますが、それはより多くの作業($$$)になるため、これによりページの応答性を簡単に高めることができます。

好奇心から、必要のない属性の周りの引用符を削除すると20 KB節約できることがわかりましたが、私のIDE(Visual Studio)はそれが好きではありません。 ASP.NETが生成する本当に長いIDが私のファイルの20%を占めていることに驚いた。

厳密に有効なHTMLの関連部分を取得できるという考えは、そもそも誤った方向に向かっていたので、あなたとあなたの顧客に最適なものを何でもしてください。私が今まで見たり使用したことのあるほとんどのツールは、xhtmlを生成すると言いますが、実際には100%は機能せず、とにかく厳守することには何の利点もありません。

4
user1777246

終了タグを使用すると、フラグメントの動作が兄弟要素に依存しないため、フラグメントの処理が簡単になります。この理由だけでも十分に説得力があるはずです。誰もがモノリシックなhtmlドキュメントをもう扱っていますか?

2
CurtainDog

個人的に、私はXHTMLのファンであり、ghoppeのように、「終了タグを絶対に省略しないようにしています。これは、厳密になり、必要なタグを省略しないために役立ちます。」

しかし

HTML 4.nを意図的に使用している場合、妥当性ではなく整形式の概念がXMLの概念であるため、それらを含めることでドキュメントの消費が容易になると主張することはできません。 禁止特定の終了タグ。したがって、唯一の問題は妥当性になります...そして、それがそれらなしでまだ有効であれば...帯域幅を節約することもできますか?

2

C#のような中かっこ言語では、2行しかない場合、ifステートメントを囲む中かっこを省略できます。例えば...

if([条件])
[コード]

しかし、あなたはこれを行うことはできません...

if([条件])
[コード]
[コード]

3行目はifステートメントの一部ではありません。それは読みやすさを損ない、バグは簡単に持ち込まれ、見つけるのが難しくなります。

同じ理由で、すべてのタグを閉じます。 imgタグなどのタグは、独立した終了タグだけでなく、閉じる必要があります。

1
MiguelR

HTMLパーサーを記述している場合、オプションの終了タグを含むHTML、または含まないHTMLを解析する方が簡単ですか?終了タグがどこにあるべきかを推測する必要がないので、オプションの終了タグが存在すると簡単になると思います。

そのため、オプションの終了タグを常に含めます。ブラウザのHTMLパーサーの作業量が少ないため、ページのレンダリングが高速になる可能性があるという理論上です。

0
Joel Mueller