Я получаю техническое объяснение того, почему элемент <p>
не может содержать элемент <ul>
. К сожалению, это не помогает мне, когда эта структура содержимого.
В мета, я не понимаю ни
- семантическое объяснение, а
- рекомендуемая структура
для случаев, когда я действительно хочу показать список элементов "inline" с обычным контентом.
Эта страница предлагает либо отделить список от абзацев:
<p>For instance, this fantastic sentence has bullets relating to</p>
<ul>
<li>wizards,
<li>faster-than-light travel, and
<li>telepathy,
</ul>
<p>and is further discussed below.</p>
или используя альтернативный тег для абзаца:
<div>For instance, this fantastic sentence has bullets relating to
<ul>
<li>wizards,
<li>faster-than-light travel, and
<li>telepathy,
</ul>
and is further discussed below.</div>
Но оба из них поражают меня как ужасные хаки, которые издеваются над предполагаемым смысловым контентом HTML5.
В первом случае, как тег <p>
семантически значим? Не говоря уже о практических трудностях правильного стилизации этого, если я хочу устранить интервал вокруг списка (а затем, если у меня есть другие списки, которые действительно являются отдельными блоками контента - oy!)
Во втором случае, если мне нужно иметь <div>
, что означает "это абзац содержания", я мог бы просто просто отбросить <p>
, а не переключаться туда и обратно в зависимости от содержимого которые появляются в абзаце.
ISTM, что наиболее семантически значимая версия может быть примерно такой:
<p>For instance, this fantastic sentence has bullets relating to
<span class="li">wizards,</span>
<span class="li">faster-than-light travel, and</span>
<span class="li">telepathy,</span>
and is further discussed below.</p>
с пробелами, обозначенными как элементы блока или списка (и кто знает, какие другие настройки), чтобы получить право на рендеринг. Практически это звучит как ужасное обострение.
Есть ли хорошая рекомендация по предоставлению такого контента?
Изменить
На самом деле это не так сложно, как кажется. Я не уверен, есть ли способ получить все настройки браузера по умолчанию, но я могу реплицировать стиль списка по умолчанию (по крайней мере, на OS X Chrome):
span.li {
display: list-item;
list-style-type: disc;
margin-left: 40px;
}