Синтаксически и семантически корректно вставить <div>
или любой другой элемент уровня блока внутри тега <p>
. Я говорю о HTML4 Transitional DTD.
Если нет, то нормально ли вместо этого использовать <span style="display: block">
?
Синтаксически и семантически корректно вставить <div>
или любой другой элемент уровня блока внутри тега <p>
. Я говорю о HTML4 Transitional DTD.
Если нет, то нормально ли вместо этого использовать <span style="display: block">
?
Синтаксически a div
внутри a p
является недопустимым во всех стандартах HTML. Более того, при использовании соответствующего парсера HTML невозможно разместить элемент <div>
внутри <p>
в DOM, потому что открывающий тег <div>
автоматически закрывает элемент <p>
.
Семантически правильный выбор зависит от содержания, которое вы отмечаете. Вам нужно будет показать хотя бы образец полного абзаца и, возможно, контент, окружающий его, чтобы быть уверенным в предоставлении достаточной информации для определения правильной семантической разметки.
Однако, учитывая, что как <div>
, так и <span>
являются семантикой свободной и что CSS никоим образом не может ее изменить, если вы уверены, что содержимое тега <p>
действительно формирует абзац, и что <span style="display: block">
дает вам презентационный эффект, который вы ищете, то это действительный HTML и будет полностью подходящим решением.
Нет, элемент абзаца может не содержать других элементов блока.
Тег абзаца предназначен для блока текста. Если ваши элементы являются частью текста (а не элементов блока), это будет семантически корректно, иначе нет. Тег span с display:block
по-прежнему является блочным элементом.
Это синтаксически некорректно, поскольку вы можете убедиться в этом с помощью W3C-валидатора разметки.
Семантически и практически я бы сказал, что это "нормально" в том смысле, что а) это очень естественно, б) все браузеры обрабатывают его правильно (действительно, это одна из самых простых проблем, с которыми они сталкиваются ежедневно).
Если ваш HTML создается путем ввода пользователем (например, виджет редактора HTML, в котором посетители могут оставлять комментарии), я бы сказал, просто пусть это будет, даже если оно "неверно".
В противном случае вы можете немного изменить разметку. Лично я бы пошел с
<div class="para">
<div>Some content</div>
</div>
и дайте .para
соответствующие поля с CSS.
Без какого-либо контекста мне кажется, что это хорошо для меня, если ваш внешний тег по-прежнему остается абзацем. Если ваш div - это что-то вроде вашей верхней панели навигации, то не так много, но если это контейнер для изображения и надписи, которые вы собираетесь плавать вправо, тогда проблем нет.
Этот пост показывает что-то об этом. Похоже, это стандартное поведение браузера.
FWIW: У меня был абзац, заключенный в квадратные скобки по тегам абзаца. Внутри я положил div с дисплеем: inline на div. Но он по-прежнему обрабатывал div как элемент блока и закрывал абзац, создавая новую строку с интервалом абзаца.
Похоже, что любой элемент блока внутри тегов абзаца заставляет абзац закрываться, даже если элемент блока отображается как встроенный в его CSS.