Я неправильно читаю стандарт HTML 4.01 или это Google?В HTML 4.01, если я напишу:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html> <head> <body>plain <em>+em <strong>+strong </em>-em
Рендеринг в Google Chrome:
обычный + em + сильный - em
Кажется, это противоречит стандарту HTML 4.01, в котором основные правила SGML суммируются следующим образом: «конечный тег закрывается, возвращаясь к соответствиюначальный тег, все незакрытые промежуточные начальные теги с пропущенными конечными тегами ». ¹
То есть конечный тег </em>
должен закрывать не только начальный тег <em>
, но и закрытый<strong>
начальный тег, и рендеринг должен быть:
обычный + em + strong -em
Комментатор указал, что оставлять теги открытыми - плохая практика, но это только академический пример.Не менее хорошим примером будет: <em> +em <strong> +strong </em> -em </strong>
.Из стандарта HTML 4.01 я понял, что этот фрагмент кода не будет работать должным образом из-за перекрывающихся элементов: конечный тег </em>
должен неявно закрывать <strong>
.Тот факт, что он работал должным образом, был удивительным, и именно это привело к моему вопросу.
И оказалось, что я предложил ложную дихотомию в вопросе: ни Google, ни я не читали стандарт HTML 4.01 неправильно,Частный корреспондент w3.org указал мне на Web SGML и HTML 4.0, объясненный Мартином Брайаном, который объясняет, что «программа синтаксического анализа автоматически закрывает все открытые в настоящее время встроенные элементы., который был объявлен как имеющий пропущенные конечные теги , когда он встречает конечный тег для элемента более высокого уровня.( Если встроенный элемент, конечный тег которого не может быть пропущен, все еще открыт, однако, программа сообщит об ошибке в кодировке .) ” ² (выделение добавлено.) Обобщение Брайанастандарта SGML является правильным, а обобщение в HTML 4.01 неверно.