Почему тег <p>не может содержать тег <div>внутри? - PullRequest
159 голосов
/ 06 декабря 2011

Насколько я знаю, это правильно:

<div>
  <p>some words</p>
</div>

Но это неправильно:

<p>
  <div>some words</div>
</p>

Первый может пройти валидатор W3C (XHTML 1.0), но второй не может.Я знаю, что никто не напишет код, подобный второму.Я просто хочу знать, почему.

А как насчет взаимосвязи других тегов?

Ответы [ 5 ]

189 голосов
/ 02 января 2012

Авторитетным местом для поиска разрешенных защитных отношений является спецификация 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)".

63 голосов
/ 06 декабря 2011

Короче говоря, невозможно поместить элемент <div> внутри <p> в DOM, потому что открывающий тег <div> автоматически закроет элемент <p>.

33 голосов
/ 08 января 2016

Согласно HTML5, модель контента из div элементов имеет значение flow content

Большинство используемых элементовв основном документы и приложения классифицируются как содержимое потока.

Включает p элементов, из которых может использоваться только , где ожидается, что содержимое потока .

Следовательно, div элементы могут содержать p элементов.


Однако модель содержимого из p элементов - это Содержимое фразы

Содержимое фразы - это текст документа, а также элементы, размечающие этот текст на уровне внутри параграфа.,Запуски фразировка контента форма абзацы .

Это не включает div элементов, которые могут толькоиспользоваться , где ожидается поток .

Следовательно, p элементы не могут содержать div элементов.

С конца тег из p элементов может быть опущен, когда за элементом p сразу же следует элемент div (среди прочих), следующее

<p>
  <div>some words</div>
</p>

являетсяанализируется как

<p></p>
<div>some words</div>
</p>

, а последний </p> является ошибкой.

0 голосов
/ 13 сентября 2013

После X HTML условные обозначения были изменены, и теперь это смесь условных обозначений XML и HTML, поэтому второй подход неверен, и валидатор W3C принимает правильные вещи в соответствии со стандартами иконвенции.

0 голосов
/ 06 декабря 2011

Поскольку тег div имеет более высокий приоритет, чем тег p. Тег p представляет тег абзаца, тогда как тег div представляет тег документа.

Вы можете написать много абзацев в теге документа, но вы не можете написать документ в абзаце. Так же, как файл DOC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...