Почему блочный конечный тег </ p> генерирует пустой абзац?

Видимо, если у вас есть</p> конечный тег без соответствующего начального тега вbody элемент, большинство, если не все браузеры будут генерировать пустой абзац на его месте:

<!DOCTYPE html>
<title></title>
<body>
</p>
</body>

Даже если вокруг конечного тега существует какой-либо текст, он не является частью этогоp элемент & # x2014; он всегда будет пустым, а текстовые узлы всегда будут существовать самостоятельно:

<!DOCTYPE html>
<title></title>
<body>
some text</p>more text
</body>

Если вышеуказанное содержаниеbody завернуты в<p> а также</p> теги ... я оставлю вас угадывать, что происходит:

<!DOCTYPE html>
<title></title>
<body>
<p>some text</p>more text</p>
</body>

Интересно, если</p> тегу не предшествует<body> или же</body> тег, все браузеры кроме IE9 и старше будутnot создать пустой абзац (IE & # x2264; 9, с другой стороны, всегда будет создавать его, в то время как IE10 и более поздние ведут себя так же, как и все другие браузеры):

<!DOCTYPE html>
<title></title>
</p>
<!DOCTYPE html>
<title></title>
</p><body>
<!DOCTYPE html>
<title></title>
</p></body>

Я не могу найти никаких ссылок, предусматривающих, что конечный тег без соответствующего начального тега должен генерировать пустой элемент, но это не должно вызывать удивления, если учесть, что он вообще не является допустимым HTML. Действительно, я нашел только браузеры, которые делают это сp элемент (и в некоторой степениbr элемент также!), но не любое объяснение того, почему.

Это довольно согласованно для всех браузеров, использующих как традиционные парсеры HTML, так и парсеры HTML5, однако, применяемые как в режиме quirks, так и в режиме standard. Таким образом, вероятно справедливо сделать вывод, что это для обратной совместимости с ранними спецификациями или устаревшим поведением.

На самом деле я нашелэтот комментарий на ответнесколько связанный вопрос, что в основном подтверждает это:

The reason why <p> tags are valid unclosed is that originally <p> was defined as a "new paragraph" marker, rather than p being a container element. Equivalent to <br> being a "new line" marker. You can see so defined in this document from 1992:http://www.w3.org/History/19921103-hypertext/hypertext/WWW/MarkUp/Tags.html and this one from 1993: http://www.w3.org/MarkUp/draft-ietf-iiir-html-01.txt Because there were web pages pre-dating the change and browser parsers have always been as backward compatible as possible with existing web content, it's always stayed possible to use <p> that way.

Но это не совсем объясняет, почему парсеры обрабатывают явное</p> завершить тег (с косой чертой) просто ... тегом и сгенерировать пустой элемент в DOM. Является ли это частью какого-то соглашения об обработке ошибок парсера с тех времен, когда синтаксис не был так строго определен, как былБольше относительно недавно или что-то? Если так, это вообще где-нибудь задокументировано?

Ответы на вопрос(2)

Ваш ответ на вопрос