XHTML - <br /> muss in div stehen?
TH
- html
0 Der Martin
0 TH0 Shadowcrow0 Deus Figendi0 TH0 Shadowcrow0 TH
0 Der Martin
0 TH
0 dedlfix
Hey,
Wenn ich folgenden Quelltext mit dem W3C-Validator überprüfe, erhalte ich die Meldung, dass meine <br /> Elemente von einem Weiteren Element umschlossen werden müssen (document type does not allow element "br" here; missing one of "p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "pre", "address", "fieldset", "ins", "del" start-tag).
Hier der Code (stark gekürzt):
<body>
<form action="xy.php" method="post">
<div style="float: left; width: 350px;">
Name:<br /><input name="xy_name" type="text" size="50" maxlength="150" /></div>
<div style="float: left;">
Version:<br /><input name="version" type="text" size="10" maxlength="10" /></div>
<!-- Hier! --> <br style="clear:left;" /><br /> <!-- Hier Ende -->
</form>
</body>
Wenn ich die beiden br-Tags mit einem einfachen div umschließe gibt es keinen Fehler mehr. Woran liegt das bzw. besser gesagt warum muss das so sein?
Hallo,
Wenn ich folgenden Quelltext mit dem W3C-Validator überprüfe, erhalte ich die Meldung, dass meine <br /> Elemente von einem Weiteren Element umschlossen werden müssen (document type does not allow element "br" here; missing one of "p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "pre", "address", "fieldset", "ins", "del" start-tag).
ja, da hat er wohl Recht.
Wenn ich die beiden br-Tags mit einem einfachen div umschließe gibt es keinen Fehler mehr. Woran liegt das bzw. besser gesagt warum muss das so sein?
In XHTML dürfen body und form keinen inline-Inhalt als direktes Kindelement haben (also auch keinen reinen Textknoten), sondern nur Blockelemente. Welche das sein könnten, dazu macht der Validator ja auch schon Vorschläge.
So long,
Martin
Ach so, danke :)
Weißt du auch warum das so ist?
Ist doch irgendwie unsinnig; wenn man gerade mal einen info-Zweilzeiler schreiben will müsste das dann ja so aussehen:
<body>
<div>
Text <br />
Text
</div>
<body>
Gilt das auch für weitere Elemente? (Wo findet man eigentlich solche Infos? oO)
'ǝɯɐu$ ıɥ
Ist doch irgendwie unsinnig; wenn man gerade mal einen info-Zweilzeiler schreiben will müsste das dann ja so aussehen:
<body>
<div>
Text <br />
Text
</div>
<body>
<p>warum denn so kompliziert?</p>
<p>geht doch einfacher</p>
ssnɹƃ
ʍopɐɥs
Ist doch irgendwie unsinnig; wenn man gerade mal einen info-Zweilzeiler schreiben will müsste das dann ja so aussehen:
<p>warum denn so kompliziert?</p>
<p>geht doch einfacher</p>
Das ist allerdings kein Zweizeiler sondern ein Zweiabsätzer ;)
Body ist weder ein Inline- noch ein Body-Element ich nehme mal an, dass man den Parsern einfach auf jeden Fall Blockelemente als äußeren Rahmen zur Verfügung stellen wollte.
Bei form weiß ich auch nicht so recht warum
<form>
<label for="input_da">foo</label>
<input />
<input type="submit" />
</form>
nicht erlaubt ist.
Warum body seinerseits kein Blockelement ist weiß ich auch nicht so recht
Vielleicht damit man es nicht immer als Ausnahme definieren muss ^^
DIV darf enthalten: Blockelemente (außer body) und Inline-Elemente.
Deiner Schreibrichtung und deiner Antwort nach gehe ich mal davon aus, dass du es magst wenn die Leute ein bisschen darüber nachdenken müssen was du ihnen sagen willst? :P :)
Klar kann ich auch Absätze verwenden, aber in meinem text<br />text Beispiel möchte ich ja z.B. nur einen einfachen Umbruch haben und in dem Code oben brauche ich 2 breaks um mit einem den float beenden zu können.
Ob ich als Elternelement jetzt p oder div verwende ist aber in dem Beispiel tatsächlich egal. ;)
»»Gilt das auch für weitere Elemente? (Wo findet man eigentlich solche Infos? oO)
steht aber noch ;)
'ǝɯɐu$ ıɥ
Deiner Schreibrichtung und deiner Antwort nach gehe ich mal davon aus, dass du es magst wenn die Leute ein bisschen darüber nachdenken müssen was du ihnen sagen willst? :P :)
Erwischt :-)
Klar kann ich auch Absätze verwenden, aber in meinem text<br />text Beispiel möchte ich ja z.B. nur einen einfachen Umbruch haben und in dem Code oben brauche ich 2 breaks um mit einem den float beenden zu können.
Ob ich als Elternelement jetzt p oder div verwende ist aber in dem Beispiel tatsächlich egal. ;)
Ne, ist nicht egal - semantisch gesehen gehört ein Textabsatz nunmal in einen ebensolchen.
ssnɹƃ
ʍopɐɥs
Ne, ist nicht egal - semantisch gesehen gehört ein Textabsatz nunmal in einen ebensolchen.
Jetzt musste ich extra wegen dir auch noch nach 'semantisch' googlen ;D
Ja hast ja recht, dafür sind die ja auch da ;) :)
lg
TH
Hallo,
Ach so, danke :)
Weißt du auch warum das so ist?
vermutlich weil's einer sauberen Strukturierung und Gliederung förderlich ist ...
Ist doch irgendwie unsinnig; wenn man gerade mal einen info-Zweilzeiler schreiben will müsste das dann ja so aussehen:
<body>
<div>
Text <br />
Text
</div>
<body>
Nein. Sinnvollerweise würde man da ein p-Element nehmen, denn der kurze Info-Zweizeiler ist schließlich bei genauer Betrachtung ein Textabsatz. Bei noch genauerer Betrachtung vielleicht sogar zwei Textabsätze.
Gilt das auch für weitere Elemente?
Ist mir im Moment nicht bewusst. Aber es gibt natürlich weitere Konstellationen, die nicht erlaubt sind (siehe Anhang B der Spezifikation), weil sie keinen Sinn ergeben oder Widersprüche erzeugen könnten.
(Wo findet man eigentlich solche Infos? oO)
Entweder allgemein in der Spezifikation, oder bei speziellen Fragen in der DTD.
Ciao,
Martin
(Wo findet man eigentlich solche Infos? oO)
Entweder allgemein in der Spezifikation, oder bei speziellen Fragen in der DTD.
Ciao,
Martin
Ok wenn man das alles (Auch noch auf Englisch) durcharbeiten will ;)
Damit hätte sich das ganze ja geklärt.
Vielen Dank euch allen :)
@@TH:
nuqneH
Ok wenn man das alles (Auch noch auf Englisch) durcharbeiten will ;)
Etliche Spezifikationen gibt es in deutscher Übersetzung.
Qapla'
Hi!
Wenn ich folgenden Quelltext mit dem W3C-Validator überprüfe, erhalte ich die Meldung, dass meine <br /> Elemente von einem Weiteren Element umschlossen werden müssen (document type does not allow element "br" here; [...]
ja, da hat er wohl Recht.
Jein. Kommt drauf an.
Wenn ich die beiden br-Tags mit einem einfachen div umschließe gibt es keinen Fehler mehr. Woran liegt das bzw. besser gesagt warum muss das so sein?
In XHTML dürfen body und form keinen inline-Inhalt als direktes Kindelement haben (also auch keinen reinen Textknoten), sondern nur Blockelemente.
Der Doctype ist entscheidend, nicht die HTML-Version. In Strict gelten ein paar strengere Regeln, in Transitional nicht. HTML 4.01 und XHTML 1.0 sind in der Hinsicht gleich. In Transitional darf man problemlos PCDATA im body- und auch im form-Element unterbringen.
Reine Textknoten wären allerdings auch solche, die nur Whitespace enthalten, und die dürfen sehr wohl auch im body und form in allen Varianten vorkommen. Entscheidend ist die Definition von http://de.selfhtml.org/html/referenz/elemente.htm#pcdata@title=PCDATA. Das darf bei Strict nur in bestimmten Elementen vorkommen.
(Der Begriff Textknoten bezieht sich übrigens auf die Darstellung als DOM, was eine spezielle Form der Repräsentation des HTML-Dokuments im Speicher ist. In einem HTML-Dokument allgemein spricht man noch nicht von Knoten.)
Lo!