Soweit ich weiß, ist das richtig:
<div>
<p>some words</p>
</div>
Das ist aber falsch:
<p>
<div>some words</div>
</p>
Der erste kann den W3C-Validator (XHTML 1.0) bestehen, der zweite nicht. Ich weiß, dass niemand Code wie den zweiten schreiben wird. Ich will nur wissen warum.
Und was ist mit der Containment-Beziehung anderer Tags?
<p>
es sich um ein Element auf Blockebene handelt und (soll) zum Anzeigen von Text verwendet wird, werden keine anderen Elemente auf Blockebene darin zugelassen, sondern nur Inline-Elemente wie<span>
und<strong>
.p
ist ein Element auf Blockebene, das nichts damit zu tun hat.div
ist auch einer und erlaubt andere Blöcke.Antworten:
Ein maßgeblicher Ort, um nach zulässigen Containment-Beziehungen zu suchen, ist die HTML-Spezifikation. Siehe zum Beispiel http://www.w3.org/TR/html4/sgml/dtd.html . Es gibt an, welche Elemente Blockelemente und welche Inline-Elemente sind. Suchen Sie für diese Listen nach dem Abschnitt "HTML-Inhaltsmodelle".
Für das P-Element wird Folgendes angegeben, was angibt, dass P-Elemente nur Inline-Elemente enthalten dürfen.
Dies steht im Einklang mit http://www.w3.org/TR/html401/struct/text.html#h-9.3.1 , wonach das P-Element "keine Elemente auf Blockebene enthalten kann (einschließlich P selbst)."
quelle
%inline
obige Bit. Siehe auch Oriols Antwort.Kurz gesagt, es ist unmöglich, ein
<div>
Element in a<p>
im DOM zu platzieren, da das öffnende<div>
Tag das<p>
Element automatisch schließt .quelle
div
Element in ap
im DOM platzieren , zmyP.appendChild(myDiv)
. Ein HTML-Parser wird dies jedoch nicht tun.Laut HTML5 ist das Inhaltsmodell von
div
Elementen FlussinhaltDas schließt ein
p
Elemente ein, die nur verwendet werden können, wenn der Flussinhalt erwartet wird.Daher
div
könnenp
Elemente Elemente enthalten .Allerdings das Inhaltsmodell von
p
Elementen ist jedoch die Formulierung von InhaltenDas beinhaltet nicht
div
Elemente ein, die nur verwendet werden können, wenn Flow-Inhalte erwartet werden.Daher können
p
Elemente keinediv
Elemente enthalten .Da das End-Tag von
p
Elementen weggelassen werden kann, wenn diep
div
Element (unter anderem) unmittelbar ein Element folgt , gilt Folgendeswird analysiert als
und der letzte
</p>
ist ein Fehler.quelle
div as inline in CSS
nicht verwenden,<p>Text</p> <div>some words</div> <p></p>
ist mein Verständnis korrekt , da eine neue analysierte Struktur vorliegt ?Nach dem X-HTML wurden die Konventionen geändert, und jetzt ist es eine Mischung aus Konventionen von XML und HTML. Deshalb ist der zweite Ansatz falsch und der W3C-Validator akzeptiert die korrekten Dinge, die den Standards und Konventionen entsprechen.
quelle
Weil das
div
Tag eine höhere Priorität hat als dasp
Tag. Dasp
Tag repräsentiert ein Absatz-Tag, während dasdiv
Tag ein Dokument-Tag darstellt.Sie können viele Absätze in ein Dokument-Tag schreiben, aber Sie können kein Dokument in einen Absatz schreiben. Das gleiche wie eine DOC-Datei.
quelle
<doc>
: D