Почему тег <p> не может содержать тег <div> внутри?
Насколько я знаю, это правильно
<div>
<p>some words</p>
</div>
Но это неправильно
<p>
<div>some words</div>
</p>
Первый может пройти валидатор W3C (XHTML 1.0), а второй - нет. Я знаю, что никто не напишет код, подобный второму. Я просто хочу знать почему.
А как насчет отношения сдерживания других тегов?
Ответы
Ответ 1
Авторитетным местом для поиска разрешенных сдерживающих отношений является спецификация HTML. См., Например, http://www.w3.org/TR/html4/sgml/dtd.html. Он определяет, какие элементы являются блочными элементами и которые являются встроенными. Для этих списков найдите раздел с надписью "Модели содержимого HTML".
Для элемента P он задает следующее, что указывает на то, что элементам P разрешено содержать только встроенные элементы.
<!ELEMENT P - O (%inline;)* -- paragraph -->
Это согласуется с http://www.w3.org/TR/html401/struct/text.html#h-9.3.1, в котором говорится, что элемент P "не может содержать элементы уровня блока (включая сам P)".
Ответ 2
Короче говоря, невозможно разместить элемент <div>
внутри <p>
в DOM, потому что открывающий тег <div>
автоматически закроет элемент <p>
.
Ответ 3
Согласно HTML5, контентная модель элементов div
является потоковым контентом
Большинство элементов, которые используются в основной части документов и приложений, относятся к категории потока содержимого.
Это включает в себя p
элементов, которые могут использоваться только там, где ожидается поток содержимого.
Следовательно, элементы div
могут содержать p
элементов.
Тем не менее, модель содержимого элементов p
является Phrasing content
Содержание фразы - это текст документа, а также элементы, которые размечают этот текст на уровне внутри параграфа. Запускает формулировку содержания абзацев формы.
Это не включает элементы div
, которые могут использоваться только там, где ожидается поток содержимого.
Следовательно, p
элементы не могут содержать элементы div
.
Поскольку конечный тег p
элементов может быть опущен, когда за p
элементом сразу же следует элемент div
(среди прочих), следующее
<p>
<div>some words</div>
</p>
анализируется как
<p></p>
<div>some words</div>
</p>
и последнее </p>
является ошибкой.
Ответ 4
После X HTML условные обозначения были изменены, и теперь это смесь условных обозначений XML и HTML, поэтому второй подход неверен, и валидатор W3C принимает правильные вещи в соответствии со стандартами и соглашениями.
Ответ 5
Поскольку тег div
имеет более высокий приоритет, чем тег p
. Тег p
представляет тег абзаца, тогда как тег div
представляет тег документа.
Вы можете написать много абзацев в теге документа, но вы не можете написать документ в абзаце. Так же, как файл DOC.