<pre>
не может быть внутри <p>
. Таким образом, когда парсер HTML встречает <pre>
внутри <p>
, он сначала закрывается <p>
. Затем он встречает </p>
, закрывающий тег без открывающего тега, и предполагает, что вы хотели <p>
. Результирующая структура:
<code><p></p>
<pre>...
Откуда вы знаете, <pre>
не может быть внутри <p>
? См. <p>
в MDN или, что еще лучше, в HTML spe c и примечание «Разрешенный контент: содержание фраз». Глядя на то, что такое «фразировка контента», вы можете видеть, что он не включает <pre>
.