【问题标题】:List or longer code snippet inside paragraph段落内的列表或更长的代码片段
【发布时间】:2023-12-29 01:06:01
【问题描述】:

在撰写算法时,在段落内或甚至在句子中间写一些(伪)代码通常非常方便。为了直观地支持更复杂句子的结构,列表也很方便。

显然,一个句子不能分成不同的段落。但在我们的例子中,它必须是由于 HTML 嵌套规则。

段落为the p element不能包含块级元素。不幸的是,对于我们来说,prelistsblock-level

如果我不遵守规范并在p 中包含preol/ul/dl,则p 会在元素的开始标记之前被任何解析器自动关闭我知道。 (这是由于p 上的SGML OMITTAG feature 设置。)也许这个和向后兼容性是设计决策背后的原因,即不允许prep 内的列表。

有什么办法,如何在段落中包含列表和更长的代码sn-ps?


我可以重新制定我的句子和段落,而不需要 sn-ps 和列表,但它需要更多的思考和关注,并且可能会使我的文本更难阅读和理解。这对我来说不是解决方案

我可以使用 codewhitespace: predisplay: block 来获得更长的代码 sn-ps 和 codewhitespace: pre-wrap 来获得更短的代码。这在语义上正确吗?

我可以将句子中的列表视为完全没有语义的视觉糖。然后我会使用 spans 和 display: list-item 使它们看起来像列表。从语义的角度来看,这是否正确?牺牲语义结构有必要吗?


这个问题适用于 HTML 和 XHTML,因为嵌套元素的规则是相同的。 HTML是指HTML 4.01 Strict,XHTML是指XHTML 1.0 Strict。 HTML 5 是否以某种方式解决了这个问题?

明确地说,我想要一个符合标准、语法和语义都正确的解决方案,而不是任何形式的非标准破解。具体来说,p 变成div 对我来说不是解决方案


相关问题

另见

【问题讨论】:

标签: html xhtml standards semantic-markup


【解决方案1】:

就 HTML 而言,单个 <p> 元素所代表的只是一个措辞内容块,恰好像一段文本一样流动。虽叫段落,但并不一定要严格地以书面形式表示一段文字。

为了引入列表或块级代码sn-p,您不会以任何方式将段落(甚至是句子中间)分成两个<p> 元素来损害语义。完全可以接受。

事实上,HTML5 agrees(而HTML 4 可悲的是除了“P 元素代表一个段落”之外绝对没有什么可说的):

列表元素(特别是olul 元素)不能是p 元素的子元素。因此,当一个句子包含一个项目符号列表时,人们可能想知道应该如何标记它。

例如,这个奇妙的句子有与

有关的项目符号
  • 向导,
  • 超光速旅行,并且
  • 心灵感应,

并在下面进一步讨论。

解决方案是意识到paragraph,在 HTML 术语中,不是一个逻辑概念,而是一个结构概念。在上面这个奇妙的例子中,实际上有五个 paragraphs 由本规范定义:一个在列表之前,一个用于每个项目符号,一个在列表之后。

因此,上述示例的标记可能是:

<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>

如果您查看文档的源代码,您可以看到即使是引用的示例也包含一个 &lt;p&gt; 元素,其中包含文本“上述示例的标记因此可能是:”,紧随其后的是 &lt;pre&gt;包含示例标记的元素。

如果您仍然担心,HTML5 提供了另一种选择,但这基本上涉及使用 &lt;div&gt; 而不是单独的 &lt;p&gt; 元素,正如您所说,这不是您的解决方案。

最后,可以肯定地假设我提到的所有内容也适用于 HTML 4 和 XHTML 1。值得一提的是,这个概念在 XHTML 2 中进行了探索,这将允许 &lt;p&gt; 元素包含任何其他类型的内容。

【讨论】:

  • p定义中:“p元素representsparagraph。”段落定义基本上说它是一个非空的短语内容,没有被其他类型打断内容(不考虑ainsdelmap)。 HTML定义了结构段落,我在写我的问题时考虑了逻辑段落。在我看来,“结构段落”的概念是人为的,但我必须接受规范。
  • 好吧,你可以用一种标记语言做很多事情,即使是一种语法像 HTML 这样宽松的语言。