Was sind alle gültigen selbstschließenden Elemente (z. B. <br/>) in XHTML (wie von den wichtigsten Browsern implementiert)?
Ich weiß, dass XHTML technisch zulässt, dass jedes Element selbst geschlossen wird, aber ich suche nach einer Liste der Elemente, die von allen gängigen Browsern unterstützt werden. Unter http://dusan.fora.si/blog/self-closing-tags finden Sie Beispiele für einige Probleme, die durch selbstschließende Elemente wie <div /> verursacht werden.
html
xhtml
browser
cross-browser
Kamens
quelle
quelle
Antworten:
Jeder Browser, der XHTML unterstützt (Firefox, Opera, Safari, IE9 ), unterstützt die selbstschließende Syntax für jedes Element .
<div/>
,<script/>
,<br></br>
Sollten alle gut funktionieren. Wenn dies nicht der Fall ist , haben Sie HTML mit unangemessen hinzugefügtem XHTML DOCTYPE.DOCTYPE ändert nichts an der Interpretation des Dokuments. Nur der MIME-Typ funktioniert .
W3C-Entscheidung zum Ignorieren von DOCTYPE :
Dies ist eine sehr häufige Gefahr, da W3C Validator diese Regel weitgehend ignoriert, Browser sie jedoch religiös befolgen. Lesen Sie das Grundlegendes zu HTML, XML und XHTML im WebKit-Blog:
Um zu testen, ob Sie mit XHTMLs DOCTYPE über echtes XHTML oder ungültiges HTML verfügen, fügen Sie Folgendes in Ihr Dokument ein:
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 sollen), öffnen Sie Ihre Seite über den XHTML-Proxy .
Eine andere Möglichkeit zur Überprüfung ist das Anzeigen der Quelle 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 haben
DOCTYPE
.Content-Type
ist der König.Für den Datensatz ermöglicht die XHTML-Spezifikation, dass sich jedes Element selbst schließt, indem XHTML zu einer XML-Anwendung gemacht wird : [Hervorhebung von mir]
Es wird auch explizit in der XHTML-Spezifikation gezeigt :
quelle
<script>
oder<div>
zu einer unterschiedlichen Darstellung / Interpretation führt.text/html
. In echtem XHTML, gesendet, daapplication/xhtml+xml
es gut funktioniert. Bitte lesen Sie vor dem Downvoting den Artikel, auf den ich verlinkt habe (oder Anhang C der XHTML-Spezifikation).application/xhtml+xml
MIME-Typ kann ich jedoch garantieren, dass dies<script/>
funktioniert. Mit dem MIME-Typ. Nur.Ein Element, mit dem Sie bei diesem Thema sehr vorsichtig sein sollten, ist das
<script
Element>. Wenn Sie eine externe Quelldatei haben, wird dies Probleme verursachen, wenn Sie diese selbst schließen. Versuch es:Dies funktioniert in Firefox, funktioniert aber zumindest in IE6. Ich weiß, weil ich darauf gestoßen bin, als ich jedes Element, das ich sah, eifrig selbst schloss ;-)
quelle
Die selbstschließende Syntax funktioniert 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 "ungültig" sind, nehmen ohnehin kein End-Tag an. Wenn Sie also einen Schrägstrich auf diese setzen, sieht es so aus Die selbstschließende Syntax wurde unterstützt.
quelle
Von der Referenzseite der W3-Schulen :
quelle
/>
:"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"
grep EMPTY xhtml1-strict.dtd | sort
odergrep EMPTY xhtml1-transitional.dtd | sort
Die bessere Frage wäre: Welche Tags können auch im HTML-Modus selbst geschlossen werden, ohne den Code zu beeinflussen? Antwort: Nur diejenigen, die leeren Inhalt haben (sind ungültig). Gemäß den HTML-Spezifikationen sind die folgenden Elemente ungültig:
area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
Ältere Version der Spezifikation ebenfalls aufgeführt
command
. Außerdem sind nach verschiedenen Quellen die folgenden veralteten oder nicht standardmäßigen Tags ungültig:basefont, bgsound, frame, isindex
quelle
Hoffe das hilft jemandem:
quelle
Was ist mit
<meta>
und<link>
? Warum sind sie nicht auf dieser Liste?Schnelle Faustregel: Schließen Sie kein Element, das Inhalt enthalten soll, selbst, da dies früher oder später definitiv zu Browserproblemen führen kann.
Diejenigen, die sich von Natur aus selbst schließen, wie
<br>
und<img>
, sollten offensichtlich sein. Diejenigen, die es nicht sind ... schließen Sie sie einfach nicht selbst!quelle
Als ich das letzte Mal nachgesehen habe, waren die folgenden leeren / nichtigen Elemente in HTML5 aufgeführt.
Gültig für Autoren: Bereich, Basis, br, col, Befehl, Einbettung, Ereignisquelle, hr, img, Eingabe, Link, Meta, Parameter, Quelle
Ungültig für Autoren: basefont, bgsound, frame, spacer, wbr
Neben den wenigen, die in HTML5 neu sind, sollte Ihnen dies eine Vorstellung davon geben, welche möglicherweise unterstützt werden, wenn XHTML als Text / HTML bereitgestellt wird. (Testen Sie sie einfach, indem Sie das erzeugte DOM untersuchen.)
Für XHTML, das als Anwendung / xhtml + xml dient (wodurch es XML wird), gelten XML-Regeln und jedes Element kann leer sein (obwohl die XHTML-DTD dies nicht ausdrücken kann).
quelle
Sie sollten sich die xHTML-DTDs ansehen , sie sind alle aufgelistet. Hier ist eine kurze Übersicht aller wichtigen:
quelle
Sie werden in HTML 5 als "void" -Elemente bezeichnet. Sie sind in der offiziellen W3-Spezifikation aufgeführt .
Ab April 2013 sind dies:
Ab Dezember 2018 (HTML 5.2) sind dies:
quelle
Ein weiteres selbstschließendes Tag-Problem für IE ist das Titelelement. Wenn IE (gerade in IE7 ausprobiert) dies sieht, wird dem Benutzer eine leere Seite angezeigt. Wie auch immer Sie "Quelle anzeigen" und alles ist da.
Ich habe das ursprünglich gesehen, als mein XSLT das selbstschließende Tag generiert hat.
quelle
<title/>
Tags.Ich werde nicht versuchen, dies zu überarbeiten, zumal die meisten Seiten, die ich schreibe, entweder generiert werden oder das Tag Inhalt enthält. Die einzigen zwei, die mir jemals Probleme gemacht haben, sie selbst zu schließen, sind:
<title/>
Aus diesem
<head></head>
Grund habe ich einfach darauf zurückgegriffen, ihm immer ein separates schließendes Tag zu geben, da es Ihren Code ohnehin nicht wirklich unordentlicher macht , wenn er dort oben im Code ist.<script/>
Dies ist der große, mit dem ich kürzlich Probleme hatte. Ich hatte jahrelang immer selbstschließende
<script/>
Tags verwendet, wenn das Skript von einer externen Quelle stammt. Aber ich habe vor kurzem angefangen, JavaScript-Fehlermeldungen über ein Nullformular zu erhalten. Nach mehreren Tagen der Recherche stellte ich fest, dass das Problem (angeblich) darin bestand, dass der Browser nie zum<form>
Tag kam, weil er nicht wusste, dass dies das Ende des<script/>
Tags war. Als ich es in separate<script></script>
Tags schaffte, funktionierte alles. Warum auf verschiedenen Seiten, die ich mit demselben Browser erstellt habe, anders, weiß ich nicht, aber es war eine große Erleichterung, die Lösung zu finden!quelle
<hr /> ist eine andere
quelle