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.
<p>
is a block level element, and is (supposed to be) used for displaying text, it won't allow other block level elements inside it, but only inline ones like<span>
and<strong>
. – Bojanglesp
is a block level element has nothing to do with it.div
is also one and allows other blocks. – Joey