Why <p> tag can't contain <div> tag inside it?
As far as I know, this is right:
<div>
<p>some words</p>
</div>
But this is wrong:
<p>
<div>some words</div>
</p>
The first one can pass the w3c validator (xhtml 1.0), but the second can't. I know that nobody will write code like the second one. I just want know why. And what about other tags' containment relationship?
An authoritative place to look for allowed containment relations is the HTML spec. See, for example, http://www.w3.org/TR/html4/sgml/dtd.html. It specifies which elements are block elements and which are inline. For those lists, search for the section marked "HTML content models".
For the P element, it specifies the following, which indicates that P elements are only allowed to contain inline elements.
<!ELEMENT P - O (%inline;)* -- paragraph -->
This is consistent with http://www.w3.org/TR/html401/struct/text.html#h-9.3.1, which says that the P element "cannot contain block-level elements (including P itself)."
总之,这是不可能放置<div>
元素内的<p>
在DOM因为开口<div>
标签将自动关闭<p>
元件。
According to HTML5, the content model of div
elements is flow content
Most elements that are used in the body of documents and applications are categorized as flow content.
That includes p
elements, which can only be used where flow content is expected.
Therefore, div
elements can contain p
elements.
However, the content model of p
elements is Phrasing content
Phrasing content is the text of the document, as well as elements that mark up that text at the intra-paragraph level. Runs of phrasing content form paragraphs.
That doesn't include div
elements, which can only be used where flow content is expected.
Therefore, p
elements can't contain div
elements.
Since the end tag of p
elements can be omitted when the p
element is immediately followed by a div
element (among others), the following
<p>
<div>some words</div>
</p>
is parsed as
<p></p>
<div>some words</div>
</p>
and the last </p>
is an error.
上一篇: 关闭斜线之前的空间?