(非voidではない)自己終了タグはHTML5で有効ですか?


670

W3Cのバリデータは、自己終了タグ(持つものそのため、「好きではない/>の「)非空要素。(Void要素とは、コンテンツを一切含まない可能性がある要素です)。HTML5でも有効ですか?

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

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

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

<div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />

注:
W3Cバリデーターは実際にはvoid自己終了タグを受け入れます。作成者は元々、単純なタイプミス(の\>代わり/>)のために問題がありました。ただし、HTML 5では一般に自己終了タグは100%有効ではありません。回答は、さまざまなHTMLフレーバーにわたる自己終了タグの問題について詳しく説明しています。


2
@ベン:ああ、すみません、あなたは正しいと思います。この場合、私は元の質問を誤解しました。OP5はHTML5で自己終了タグが有効かどうかを知りたいと思っていました。しかし、これは彼がコードにタイプミスをしたか、自己終了タグを適切に記述する方法を知らなかったことを意味します。これは、W3Cバリデーターが自分のコードを無効としてマークしたことを意味します。
Sk8erPeter

16
将来の読者のために時間を節約するには:はい、質問の構文は正しくありません。いいえ、変更しないでください。OPはその理由を明確かつ正当に説明しています。この質問の原因となった検証エラーが発生したため、構文を修正しないでください。
ジョーダングレイ

2
あなたはまだスラッシュが向いているべき方向をめぐって争っていますか?いい加減にして。
BoltClock

3
@BoltClockうん、まだ戦っている。みんな:この質問がについて尋ねていた\>場合、それは役に立たない修正私のタイプミスの質問として閉じられるべきです。すべてのアドレスに回答します/>/>バージョンにのみ有用です。なるがままに。
Gilles「SO-邪悪なことをやめなさい」2014

1
次に、W3Cバリデーターは実際には自己終了タグを受け入れるため、質問を言い換える必要があります。元の意図に関する整合性を損なうことなく、このような方法で質問を言い換えることは困難です。したがって、SOのルールを守りたい場合、質問を編集することだけが賢明なことのように思われる場合でも、このような質問では明確さを犠牲にする必要があるかもしれません。平均。同様の問題が他にもたくさんある場合は、メタに関する別のディスカッションを開始できます。
osa 2015年

回答:


1238
  • ではHTML 4<foo /(YES、NOと>手段の全てで)<foo>(につながる<br />という意味<br>>(つまり<br>&gt;)と<title/hello/の意味<title>hello</title>)。これはSGMLルールであり、ブラウザはサポートの非常に貧弱な作業を行いました。仕様では、構文を避けるように作成者にアドバイスしています

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

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

    • void要素として指定されたHTML要素(基本的に「HTML5より前に存在し、コンテンツを含めることが禁止されている要素」)では、終了タグは単に禁止されます。開始タグの末尾にスラッシュを使用できますが、意味がありません。これは、XMLにハマっている人(および構文強調表示機能)にとっては単なる構文上の砂糖です。
    • 他のHTML要素では、スラッシュはエラーですが、エラーが回復すると、ブラウザーはそれを無視してタグを通常の開始タグとして扱います。これは通常、終了タグが欠落し、後続の要素が兄弟ではなく子になる原因になります。
    • 外部要素(SVGなどのXMLアプリケーションからインポートされる)は、それを自己終了構文として扱います。

24
" ... XMLにはまっている人。 " XMLへの準拠が悪いことを示唆しているようです。それでも、HTML5の最終結果は、とにかく山かっこ(つまり、XMLのほとんどの不便さを伴うもの)に対処する必要があるようですが、XMLベースのツール(たとえば、テンプレートツールやさまざまなプロセッサ)を使用することを難しくします。 )。でも、ビューの発生点から、それはそれを思わ<object data="..." /><img src="..."></src>ながら、ないOKです<object data="..."></object>し、<img src="..." />ツールの一貫性のために困難になりた、です。これは負け負けの状況のようです。
Bruno

7
@Bruno — HTMLはXMLよりも古いものです。人々をXHTMLに移行させる努力は失敗しました。を使用するとtext/html、ブラウザはスラッシュに特別な意味を与えないため、スラッシュを含めても実際的な目的はありません。習慣から抜け出すことができない人々にとって、それをXMLのように見せるためだけにあります。
クエンティン

6
@クエンティン私は完全に同意しません。同等の有効なXMLが必ずしも有効なHTML5であるとは限らないことを少し残念に思います(たとえば<img ...></img><img ...>またはの代わりに<img ... />)。HTML5は、一般に(おそらくXHTMLが失敗した理由で)事実上それほど厳密ではないので、のようなものを許容できたはず<img ...></img>です。残念ながら、そうではありません。そのため、XMLベースのテンプレートジェネレーターは、void要素または自己終了要素の生成を区別する方法を知る必要があります<tag></tag>。すべての空の要素をとして書き込むというルールを1つも持つことができません。
Bruno

3
HTML 5にも地平線上にあった、とあなたはXHTMLを先行したブラウザのエラー訂正が治療のようなものだろうので、長い空の要素を形成することはできません前に、XHTMLは、失敗した</br>として、<br>その<br></br>二重の改行になります。(そして(のような</br>)現実世界の悪いマークアップとの下位互換性は、HTML 5の設計目標の1つです)。
Quentin

1
FROM W3C:Void要素:area、base、br、col、embed、hr、img、input、keygen、link、meta、param、source、track、wbr "Void要素には開始タグしかありません。終了タグは指定できません無効要素の場合。」 w3.org/TR/html5/syntax.html#void-elements
Fabio Nolasco

406

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>無効です。

*注意:外来要素も自己完結する可能性がありますが、これはこの回答の対象ではないと思います。


1
IE10の開発者ツールから「HTML1500:タグを自動で閉じることはできません。明示的な終了タグを使用してください。」行の<meta charset = "UTF-8" />それがなぜなのか、どんな考えですか?
James氏、インディの

わかりました。自動終了タグにスラッシュを含めないでください(これを削除するとエラーが修正されます)。シテ:tiffanybbrown.com/2011/03/23/...
インディでジェームズ・

仕様が変更されました。HTML 5 doctypeとして提供される場合、「void」または「自己終了」要素にスラッシュを含めないようになりました。ただし、XHTMLとして提供されている場合は、終了スラッシュが必要な場合があります(この場合はドキュメントを確認してください)。実際の使用では、クロージング/が含まれている場合でも、ページは通常期待どおりに表示されますが、これは保証されていません(ブラウザーがコードを効果的に書き換え、意図したとおりに解釈することに依存しています)。なんらかの理由で、ページがHTML 5検証に合格する必要がある場合、void要素のタグを閉じるとページが合格しない可能性があります。
SherylHohman

@SherylHohmanのコメントに関しては、仕様が変更されたとは思わない(変更されている場合は元に戻った)。w3.org/TR/html5/syntax.html#start-tags(8.1.2.1.6)を参照してください-void(または外部)要素には引き続きスラッシュが含まれる場合があります。
ChrisC

63

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

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

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

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


31
<p />は、自己終了タグではなく、開始タグとして扱われます。つまり、ドキュメントの残り全体がP要素内にあるものとして扱われます。それは私が「おそらく期待する」ことではなく、重要なページで深刻な混乱を引き起こします。
mhsmith 2013年

12

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

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

    これは関係なく、空白文字がスラッシュの前に存在するかどうかの事実である。<p />そして<div />また、同じ理由で動作しません。

  • 上のタグを自己閉じ、ボイドなどの要素<br/>もしくは<img src="" alt=""/> ます動作しますが、最後のスラッシュは無視されているために、正しい行動をもたらすことが起こり、この場合には

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

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


5

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

<br>そして<br />両方とも大丈夫です。


12
HTML5仕様によると、自己終了構文(/>)は非void HTML要素では使用できません。
naXa

3
問題は、またはなどの非void要素の自己終了タグに関するものでした。<p/><div/>
thomasrutter 2016年

2
当初、問題は特に非ボイド要素に関するものではありませんでした。<... />XHTMLのようにまだ使用できますか/、HTML5のを削除する必要がありますか。質問はその後何度も変更されました。
Nick

どちらの場合も、答えはスラッシュが無視されるため、voidとして宣言されていない要素は壊れますが、void要素と互換性があります。
thomasrutter

4

この例が示すように、自己終了タグには非常に注意します。

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

<span></span><span></span>代わりに私の直感は


2
:これは受け入れ答えに記述されているOn other [than void] HTML elements, the slash is an error, but error recovery will cause browsers to ignore it and treat the tag as a regular start tag. This will usually end up with a missing end tag causing subsequent elements to be children instead of siblings.
Palec

-1

ただし、これは無効です。

<address class="vcard">
  <svg viewBox="0 0 800 400">
    <rect width="800" height="400" fill="#000">
  </svg>
</address>

そして、ここのスラッシュはそれを再び有効にします:

    <rect width="800" height="400" fill="#000"/>

1
これは、svgがhtmlではなくxmlで記述されているためです。さまざまな解析ルールを使用しています
Electric Coffee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.