it-swarm.com.de

Was sind die gültigen selbstschließenden Elemente in XHTML (wie von den gängigen Browsern implementiert)?

Was sind alle gültigen selbstschließenden Elemente (z. B. <br/>) in XHTML (wie von den gängigen Browsern implementiert)?

Ich weiß, dass XHTML es technisch erlaubt, jedes Element selbst zu schließen, aber ich suche nach einer Liste dieser Elemente, die von allen gängigen Browsern unterstützt werden. In http://dusan.fora.si/blog/self-closing-tags finden Sie Beispiele für Probleme, die durch selbstschließende Elemente wie <div /> verursacht werden.

182
kamens

Jeder Browser, der XHTML unterstützt (Firefox, Opera, Safari, IE9 ), unterstützt die selbstschließende Syntax für jedes Elements .

<div/>, <script/>, <br></br> Alles sollte gut funktionieren. Wenn nicht, dann haben Sie [~ # ~] html [~ # ~] mit falsch hinzugefügtem XHTML DOCTYPE.

DOCTYPE ändert nicht, wie das Dokument interpretiert wird. Nur der MIME-Typ.

W3C-Entscheidung über das Ignorieren von DOCTYPE :

Die HTML-Arbeitsgruppe hat dieses Problem erörtert: Es sollte alten Browsern (nur HTML) ermöglicht werden, XHTML 1.0-Dokumente zu akzeptieren, indem die Richtlinien befolgt werden und sie als Text/HTML bereitgestellt werden. Daher sollten als Text/HTML bereitgestellte Dokumente als HTML und nicht als XHTML behandelt werden.

Dies ist eine sehr häufige Gefahr, da W3C Validator diese Regel weitgehend ignoriert, Browser sie jedoch religiös befolgen. Lesen Sie Grundlegendes zu HTML, XML und XHTML im WebKit-Blog:

Tatsächlich wird die überwiegende Mehrheit der angeblich XHTML-Dokumente im Internet als text/html Bereitgestellt. Das bedeutet, dass es sich überhaupt nicht um XHTML handelt, sondern um ungültiges HTML, das bei der Fehlerbehandlung von HTML-Parsern zurechtkommt. Alle diese "Valid XHTML 1.0!" - Links im Web sagen wirklich "Invalid HTML 4.01!".


Um zu testen, ob Sie echtes XHTML oder ungültiges HTML mit DOCTYPE von XHTML haben, fügen Sie dies in Ihr Dokument ein:

<span style="color:green"><span style="color:red"/> 
 If it's red, it's HTML. Green is XHTML.
</span>

Es validiert und in echtem XHTML funktioniert es perfekt (siehe: 1 vs 2 ). Wenn Sie Ihren Augen nicht trauen können (oder nicht wissen, wie MIME-Typen festgelegt werden), öffnen Sie Ihre Seite über XHTML-Proxy .

Eine andere Möglichkeit, dies zu überprüfen, ist die Quelltextansicht in Firefox. Es werden rote Schrägstriche hervorgehoben, wenn sie ungültig sind.

In HTML5/XHTML5 hat sich dies nicht geändert, und die Unterscheidung ist noch deutlicher, da Sie nicht einmal zusätzliche DOCTYPE haben. Content-Type Ist der König.


Für den Datensatz erlaubt die XHTML-Spezifikation, dass jedes Element sich selbst schließt, indem XHTML zu einer XML-Anwendung gemacht wird : [emphasis mine]

Tags mit leeren Elementen können für jedes Element verwendet werden, das keinen Inhalt hat , unabhängig davon, ob es mit dem Schlüsselwort EMPTY deklariert wurde oder nicht.

Es wird auch explizit in der XHTML-Spezifikation gezeigt:

Leere Elemente müssen entweder ein End-Tag haben oder das Start-Tag muss mit /> Enden. Zum Beispiel <br/> Oder <hr></hr>

179
Kornel

Ein Element, mit dem Sie bei diesem Thema sehr vorsichtig sein sollten, ist das <script> Element. Wenn Sie eine externe Quelldatei haben, wird dies zu Problemen führen, wenn Sie diese selbst schließen. Versuch es:

<!-- this will not consistently work in all browsers! -->
<script type="text/javascript" src="external.js" />

Dies funktioniert in Firefox, bricht aber mindestens in IE6. Ich weiß, weil ich darauf gestoßen bin, als ich jedes Element, das ich gesehen habe, eifrig selbst geschlossen habe ;-)

40
Erik van Brakel

Die selbstschließende Syntax gilt für alle Elemente in application/xhtml + xml. Es wird für kein Element in text/html unterstützt, aber die Elemente, die in HTML4 "leer" oder in HTML5 "nichtig" sind, erhalten sowieso kein End-Tag Die selbstschließende Syntax wurde unterstützt.

35
hsivonen

Von der W3 Schools Referenzseite :

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />
34
ConroyP

Eine bessere Frage wäre: Welche Tags können selbst im HTML-Modus geschlossen werden, ohne den Code zu beeinflussen? Antwort: Nur diejenigen, die leeren Inhalt haben (sind ungültig). Laut HTML specs sind die folgenden Elemente ungültig:

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

In einer älteren Version der Spezifikation ist auch command aufgeführt. Außerdem sind nach verschiedenen Quellen die folgenden veralteten oder nicht standardmäßigen Tags ungültig:

basefont, bgsound, frame, isindex

28

Hoffe das hilft jemandem:

<base />
<basefont />
<frame />
<link />
<meta />

<area />
<br />
<col />
<hr />
<img />
<input />
<param />
10
Jeff

Wie wäre es mit <meta> und <link>? Warum stehen sie nicht auf dieser Liste?

Schnelle Faustregel, schließen Sie kein Element, das Inhalt enthalten soll, von selbst, da dies früher oder später definitiv zu Browserproblemen führen wird.

Diejenigen, die sich natürlich von selbst schließen, wie <br> und <img>, sollte klar sein. Diejenigen, die es nicht sind ... schließen sie sich einfach nicht von selbst!

5
AmbroseChapel

Als ich das letzte Mal nachgesehen habe, waren die folgenden leeren/leeren Elemente in HTML5 aufgelistet.

Gültig für Autoren: area, base, br, col, befehl, embed, eventsource, hr, img, eingabe, link, meta, param, source

Ungültig für Autoren: basefont, bgsound, frame, spacer, wbr

Neben den wenigen Neuerungen in HTML5 sollten Sie sich eine Vorstellung davon machen, welche beim Bereitstellen von XHTML als text/html unterstützt werden. (Testen Sie sie einfach, indem Sie das produzierte DOM untersuchen.)

Da XHTML als application/xhtml + xml (was es zu XML macht) dient, gelten XML-Regeln und jedes Element kann leer sein (obwohl die XHTML-DTD dies nicht ausdrücken kann).

4
Shadow2531

Schauen Sie sich die xHTML DTDs an, sie sind alle aufgelistet. Hier ist eine kurze Übersicht über die wichtigsten:

<br />
<hr />
<img />
<input />
4
e-satis

Sie werden in HTML 5 als "void" -Elemente bezeichnet. Sie sind in der offiziellen W3-Spezifikation aufgeführt.

Ein void-Element ist ein Element, dessen Inhaltsmodell unter keinen Umständen zulässt, dass es Inhalt enthält.

Ab April 2013 sind dies:

bereich, basis, br, spalte, befehl, einbetten, hr, img, eingabe, keygen, verknüpfung, meta, param, quelle, spur, wbr

Ab Dezember 2018 (HTML 5.2) sind dies:

bereich, basis, br, col, einbetten, hr, img, eingabe, verknüpfung, meta, param, quelle, spur, wbr

4
mpen

Ich werde nicht versuchen, dies zu überarbeiten, zumal die meisten Seiten, die ich schreibe, entweder generiert werden oder das Tag Inhalt hat. Die einzigen zwei, die mir jemals Probleme bereiteten, als ich sie selbstschließend machte, waren:

<title/>

Zu diesem Zweck habe ich einfach darauf zurückgegriffen, ihm immer ein separates schließendes Tag zuzuweisen, da es, sobald es in <head></head> Vorhanden ist, Ihren Code sowieso nicht wirklich unordentlicher macht, mit ihm zu arbeiten.

<script/>

Dies ist die große, mit der ich in letzter Zeit Probleme hatte. Ich hatte jahrelang selbstschließende <script/> - Tags verwendet, wenn das Skript aus einer externen Quelle stammte. Aber ich habe vor kurzem angefangen, JavaScript-Fehlermeldungen über ein Null-Formular zu erhalten. Nach mehrtägigen Nachforschungen stellte ich fest, dass das Problem (angeblich) war, dass der Browser nie zum Tag <form> Gelangte, da er nicht erkannte, dass dies das Ende des Tags <script/> War. Als ich es also in separate <script></script> Tags geschafft habe, hat alles funktioniert. Warum auf verschiedenen Seiten, die ich mit demselben Browser erstellt habe, anders ist, weiß ich nicht, aber es war eine große Erleichterung, die Lösung zu finden!

2
Nathan Sokalski

Ein weiteres selbstschließendes Tag-Problem für IE ist das title-Element. Wenn IE (gerade in IE7 ausprobiert) dies sieht, zeigt es dem Benutzer eine leere Seite an. Allerdings "Quelltext anzeigen" und alles ist da.

<title/>

Ich habe dies ursprünglich gesehen, als mein XSLT das selbstschließende Tag generiert hat.

2
Kevin Hakanson