Списки гнезд в параграфах в html

Кажется, что (строгий) html не позволяет встраивать любые не встроенные элементы внутри <p>, но тогда как я должен отображать абзац, содержащий список (что часто встречается в естественных текстах). Я видел три ответа, которые кажутся неудовлетворительными:

  • Списки не должны происходить внутри абзацев. (Я не собираюсь заниматься культурными дебатами, но я, конечно, надеюсь, что html не станет местом для диктовки стиля письма.)
  • Отделите текст в абзаце, затем список, а затем второй абзац с текстом. Это выглядит плохо, потому что теперь у меня есть <p> куски, которые являются частями абзацев, и это кажется плохим для разметки, которая пытается двигаться в более семантическом направлении.
  • Поддельные абзацы с использованием некоторого <div class="mypara"> - который выглядит как плохой способ обойти все это и отказаться от использования разметки с соответствующей семантикой для текста.

Есть ли другой способ сделать это семантически корректным и действительным?

Ответ 1

Пункты в HTML 5, относящиеся к последнему рабочему проекту, определяются как элементы потока, которые могут содержать только фразирующие элементы. Списки также определяются как элементы потока и не могут быть заключены в параграфы. Что бы вы ни думали, определение параграфа должно быть, это формальное определение термина в HTML, и я думаю, что он вряд ли изменится.

Есть две возможности, которые вы могли бы рассмотреть, помимо двух вы упомянули:

  • Рассмотрите возможность достижения более широкого элемента потока, чем абзац, если он применяется, например section, nav, header, footer или article.
  • Использовать гибридный подход: оберните последовательность p – ol – p с помощью div по вашему выбору, которая применяет общее форматирование к набору.

Что касается div, то спецификация HTML 5 явно рекомендует, чтобы он был элементом "последней инстанции", поскольку он не несет семантического значения в том, как это делают другие элементы HTML, и может быть не таким, как пользователь - дружелюбно в альтернативных пользовательских агентах. Следуя этому совету, я бы не использовал div за счет p для основного текста, если семантика важна для вас. Тем не менее, может быть полезно убедиться, что использование нескольких абзацев не слишком визуально прерывается.

Ответ 2

Я не думаю, что тег html <p> предназначен для управления идиомами реальных стилей записи. Это простой способ отображения фрагмента текста упорядоченным образом. Я не думаю, что он предназначен для имитации печатных материалов. Вам нужно будет использовать Div для этого.

Ответ 3

Есть ли причина визуального стиля для всего этого? Другими словами, если у вас есть что-то вроде следующего, визуально ли оно визуализируется таким образом, что вы не находите идеального?

<p>Some paragraph text.</p>
<ul>
    <li>First list item</li>
    <li>Second list item</li>
    <li>Third list item</li>
</ul>
<p>Another paragraph.</p>

Если проблема связана с избыточным запасом после P и перед UL, вы можете попробовать смежный селектор, подобный этому, чтобы компенсировать:

p + ul { margin-top: -1em; }

Ответ 4

Я полагаю, это зависит от того, что вы считаете "абзацем". Для меня очевидно, что разработчики HTML никоим образом не рассматривают список как часть абзаца. И хотя я думаю, что аргумент может быть сделан для любой интерпретации, я считаю, что спецификация правильная.

Пока список не представляет собой разрыв в линии мысли, он, безусловно, представляет собой изменение в голосе или методе мысли, которое, я считаю, заслуживает нового семантического контейнера.

В том же духе абзац представляет логический раздел в части письма. Список представляет собой последовательность логических разделов, и хотя можно представить, что один логический раздел может быть затем разделен на большее количество разделов, имеет смысл просто создать новый раздел (особенно для такого большого разрыва в голосе/методе).

Семантика может быть в значительной степени субъективной. И это прекрасно. Однако в этом случае я считаю, что спецификация HTML правильно представляет семантику.

Ответ 5

Ответ на ваш вопрос, очевидно, нет, потому что спецификации говорят, что вы не можете этого сделать. Как и вы, мне нравится поддерживать семантику, поэтому я обычно использую ваш второй вариант (абзац, список, другой абзац). Однако, с моей точки зрения, я не могу придумать какой-либо текст, в котором список фактически не нарушает поток текста, поэтому кажется, что начало нового абзаца после того, как список не повредит.