<!doctype html>
<html lang="en">
<head>
<title>Wat</title>
</head>
<p>
<div></div>
</p>
<span>
<div></div>
</span>
</html>
Given the html page above, the first <div>
“inside” <p>
is actually valid because </p>
is optional. The end result is <p></p><div></div></p>
with the last </p>
being invalid because there’s no matching <p>
.
On the other hand, <span>
requires matching </span>
so even though <div>
can’t be put inside <span>
, browsers still consider it to be inside the <span>
, making it seem correct when viewed from developer tools.