12

似乎(严格)html 不允许在 a 中嵌套任何非内联元素<p>,但是我应该如何呈现包含列表的段落(在自然文本中经常出现的内容)。我看过三个似乎都不满意的答案:

  • 列表不应出现在段落内。(我不打算进行文化辩论,但我当然希望 html 不会成为决定写作风格的地方。)
  • 将文本分成一个段落,然后是一个列表,然后是带有后文本的第二个段落。这看起来很糟糕,因为现在我有作为段落一部分<p>的块,这对于试图朝着更语义化的方向移动的标记来说似乎很糟糕。
  • 使用 some 伪造段落<div class="mypara">——这看起来是绕过整个事情并放弃使用具有适当文本语义的标记的不好方法。

是否有其他在语义上正确且有效的方法来做到这一点?

4

5 回答 5

9

在最新的工作草案中,HTML 5 中的段落被定义为只能包含短语元素的流元素。列表也被定义为流程元素,并且不能包含在段落中。无论您认为段落的定义应该是什么,这是 HTML 中术语的正式定义,我认为它不太可能改变。

除了您提到的两种可能性之外,您还可以考虑两种可能性:

  • 如果适用,请考虑使用比段落更广泛的流程元素,例如sectionnavheaderfooterarticle
  • 使用混合方法:使用您选择的将通用格式应用于集合的序列来包装p – ol – p序列。div

就目前div而言,HTML 5 规范明确建议它应该是“最后的手段”元素,因为它不像其他 HTML 元素那样具有语义意义,并​​且在替代用户代理中可能不像用户友好. 按照这个建议,如果语义对您很重要,我不会div以牺牲p正文为代价。但是,它有助于确保使用多个段落不会在视觉上过于混乱。

于 2010-07-07T02:10:24.580 回答
3

我不认为 html<p>标签是为了控制实际写作风格的习语。这是一种以有序方式显示一大块文本的简单方法。我不相信它是为了模拟印刷材料。您将不得不为此使用一个 Div。

于 2010-07-07T01:52:30.107 回答
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; }
于 2010-07-07T04:09:49.997 回答
1

我想这取决于你认为什么是“段落”。对我来说很明显,HTML 的设计者绝不会将列表视为段落的一部分。虽然我认为任何一种解释都可以提出论据,但我认为规范是正确的。

虽然列表并不代表思路的中断,但它肯定代表了声音或思维方法的变化,我认为这值得一个新的语义容器。

同样,一个段落代表一篇文章中的一个逻辑分区。一个列表表示一系列逻辑分区,虽然可以想象一个逻辑分区随后可以划分为更多分区,但简单地创建一个新分区更有意义(尤其是对于语音/方法中如此大的中断)。

语义在很大程度上可能是主观的。这很好。但是,在这种情况下,我认为 HTML 规范正确地表示了语义。

于 2010-07-07T02:45:07.840 回答
0

您的问题的答案显然是否定的,因为规格说您不能这样做。和你一样,我喜欢保持语义,所以我通常选择你的第二个选项(段落、列表、另一个段落)。但是,在我的脑海中,我想不出列表实际上不会破坏文本流的任何文本,所以似乎在列表之后开始一个新段落不会受到伤害。

于 2010-07-07T02:02:40.783 回答