Гнездовые списки в абзацах в html - PullRequest
10 голосов
/ 07 июля 2010

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

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

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

Ответы [ 5 ]

9 голосов
/ 07 июля 2010

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

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

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

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

3 голосов
/ 07 июля 2010

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

<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; }
3 голосов
/ 07 июля 2010

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

1 голос
/ 07 июля 2010

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

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

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

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

0 голосов
/ 07 июля 2010

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

...