731

W3C バリデーター( Wikipedia ) は、非 void要素の自己終了タグ (「<code>/>」で終わるタグ) を好みません。( Void 要素とは、コンテンツをまったく含まない可能性のある要素です。) それらは HTML5 でも有効ですか?

受け入れられるvoid 要素の例:

<br />
<img src="" />
<input type="text" name="username" />

拒否された非 void 要素の例:

<div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />
注:
W3C バリデーターは、実際には void の自己終了タグを受け入れます。作成者はもともと単純なタイプミス (\>の代わりに/>) が原因で問題を抱えていました。ただし、自己終了タグは一般に HTML5 で 100% 有効というわけではなく、さまざまな HTML フレーバーにわたる自己終了タグの問題について詳しく説明されています。
4

8 に答える 8

1299
  • (理論的には)HTML 4では、<foo /(はい、まったくなし>で)意味(意味(つまり)と意味<foo>につながります)。私が「理論上」という用語を使用するのは、これがブラウザのサポートが非常に不十分なSGMLルールだからです。サポートがほとんどなかったため (私はemacs-w3mで動作するのを見たことがあるだけでした) 、仕様では作成者に構文を避けるようにアドバイスしています<br /><br>><br>&gt;<title/hello/<title>hello</title>

  • XHTMLでは、<foo />を意味し<foo></foo>ます。これは、すべての XML ドキュメントに適用されるXML規則です。とはいえ、XHTML はtext/html(少なくとも歴史的には) として提供されることが多く、ドキュメントが として提供されるパーサーとは異なるパーサーを使用してブラウザーによって処理されますapplication/xhtml+xml。W3C は、XHTML について従うべき互換性ガイドラインtext/htmlを として提供しています。(基本的に: 要素が EMPTY として定義されている場合 (および HTML 仕様で終了タグが禁止されている場合) にのみ、自己終了タグ構文を使用してください)。

  • HTML5 では、の意味は<foo /> 要素のタイプによって異なります

    • void 要素(本質的には「HTML5 より前に存在し、コンテンツを持つことが禁止されていた要素」)として指定されている HTML 要素では、終了タグは単純に禁止されています。開始タグの末尾のスラッシュは許可されていますが、意味はありません。これは、XML に夢中になっている人々 (およびシンタックス ハイライター) のためのシンタックス シュガーにすぎません。
    • 他の HTML 要素では、スラッシュはエラーですが、エラー リカバリによりブラウザはそれを無視し、タグを通常の開始タグとして扱います。これは通常、終了タグの欠落で終わり、後続の要素が兄弟ではなく子になります。
    • 外部要素 (SVG などの XML アプリケーションからインポートされた) は、それを自己終了構文として扱います。
于 2010-08-24T15:37:41.560 に答える
427

Nikita Skvortsov が指摘したように、自己終了 div は検証されません。これは、div がvoid 要素ではなく、通常の要素であるためです。

HTML5 仕様によると、コンテンツを持たないタグ ( void 要素と呼ばれる) は自己終了* することができます。これには、次のタグが含まれます。

area, base, br, col, embed, hr, img, input, 
keygen, link, meta, param, source, track, wbr

「/」は上記のタグでは完全にオプションですが、<img/>と違いはありません<img>が、<img></img>無効です。

*注:外部要素も自己終了する可能性がありますが、この回答の範囲内ではないと思います。

于 2011-10-21T20:36:00.663 に答える
64

実際には、HTML で自己終了タグを使用すると、期待どおりに機能するはずです。しかし、有効なHTML5を記述することに関心がある場合は、使用できる 2 つの異なる 2 つの構文形式内でそのようなタグの使用がどのように動作するかを理解する必要があります。HTML5 では、HTML 構文と XHTML 構文の両方が定義されており、これらは似ていますが同一ではありません。どちらが使用されるかは、Web サーバーから送信されるメディアの種類によって異なります。

おそらく、あなたのページはtext/html、より寛大な HTML 構文に従っている として提供されています。このような場合、HTML5 では、特定の開始タグで、終了する > の前にオプションの / を含めることができます。これらの場合、 / はオプションで無視されるため<hr>、 と<hr />は同一です。HTML 仕様では、これらを「無効な要素」と呼び、有効な要素のリストを提供しています。厳密に言えば、オプションの / は、これらの void 要素の開始タグ内でのみ有効です。たとえば、<br /><hr />は有効な HTML5 ですが、<p />そうではありません。

HTML5 仕様では、HTML 作成者と Web ブラウザー開発者にとって何が正しいかを明確に区別しています。2 番目のグループは、あらゆる種類の無効な「レガシー」構文を受け入れる必要があります。この場合、HTML5 準拠のブラウザーは、 のような不正な自己終了タグを受け入れ、<p />期待どおりにレンダリングすることを意味します。しかし、著者にとって、そのページは有効な HTML5 ではありません。(さらに重要なことは、この種の違法な構文を使用して取得した<span />DOM ツリーは、深刻な混乱を招く可能性があります。たとえば、自己終了タグは、物事を混乱させる傾向があります)。

(サーバーが XHTML ファイルを XML MIME タイプとして送信する方法を知っているという異常なケースでは、ページは XHTML DTD および XML 構文に準拠する必要があります。つまり、そのように定義された要素には自己終了タグが必要です。)

于 2011-02-18T22:11:56.613 に答える
18

HTML5 は基本的に末尾のスラッシュがないかのように動作します。HTML5 構文には自己終了タグのようなものはありません。

  • ,のような非 void要素の自己終了タグはまったく機能しません。末尾のスラッシュは無視され、これらは開始タグとして扱われます。これにより、ネスティングの問題が発生する可能性があります。<p/><div/>

    これは、スラッシュの前に空白があるかどうかに関係なく当てはまります:<p />また<div />、同じ理由で機能しません。

  • orのようなvoid要素の自己終了タグは機能しますが、末尾のスラッシュが無視されるためだけであり、この場合はたまたま正しい動作になります。<br/><img src="" alt=""/>

その結果、以前の「XHTML 1.0 が text/html として提供された」で機能していたものはすべて、以前と同様に機能し続けます。非 void タグの末尾のスラッシュはそこでも受け入れられませんでしたが、void 要素の末尾のスラッシュは機能していました。

もう 1 つ注意: HTML5 ドキュメントを XML として表現することは可能であり、これは「XHTML 5.0」と呼ばれることもあります。この場合、XML の規則が適用され、自己終了タグが常に処理されます。常に XML MIME タイプで提供する必要があります。

于 2016-06-28T06:15:19.520 に答える
6

自動終了タグはHTML5で有効ですが、必須ではありません。

<br><br />どちらも大丈夫です。

于 2010-08-24T16:16:03.903 に答える
5

この例が示すように、自己終了タグには細心の注意を払います。

var a = '<span/><span/>';
var d = document.createElement('div');
d.innerHTML = a
console.log(d.innerHTML) // "<span><span></span></span>"

私の直感は<span></span><span></span>代わりだったでしょう

于 2017-05-20T19:09:10.040 に答える