2013-11-22 29 views
1

在编写算法时,在段落内部编写一些(伪)代码或(即使在句子的中间)通常都很方便。为了在视觉上支持更复杂句子的结构,列表也很方便。段落中的列表或更长的代码片段

显然,一句话不能在不同的段落中分开。但在我们的情况下,它必须归因于HTML嵌套规则。

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

如果我不遵守规范,包括pre或在pol/ul/dl,该p是我知道的任何解析器元素的开始标记前右自动关闭。 (这是由于p上的SGML OMITTAG feature设置造成的。)也许这和向后兼容性是拒绝prep内部列表的设计决定背后的原因。

有什么办法,如何将列表和更长的代码片段包含到段落中?


我能重新制订我的句子和段落并不需要片段和列表,但它需要大量的思考和关注,并可以让我的文字难以阅读和理解。这是对我来说不是解决方案

我可以用codewhitespace: predisplay: block更长的代码段和codewhitespace: pre-wrap为短的。这在语义上是正确的吗?

我可以把句子里面的列表看作仅仅是可视化糖而没有任何语义。然后,我会使用spandisplay: list-item使它们看起来像列表。从语义的角度来看,这是否正确?语义结构的牺牲是必要的吗?


这个问题同时适用于HTML和XHTML,因为嵌套元素的规则是相同的。通过HTML我的意思是HTML 4.01严格,通过XHTML我的意思是XHTML 1.0严格。这个问题在HTML5中是以某种方式解决的?

要明确,我想要一个符合标准,既语法和语义正确的解决方案,而不是一个非标准黑客的任何一种。具体而言,p转换为div对我来说不是解决方案


相关问题

参见

+0

昨天我遇到了相关问题:http://stackoverflow.com/q/21651806/2157640如果可以的话,我会添加[tag:language-lawyer]和[tag:paragraph]标签。 – Palec

回答

4

至于HTML而言,所有单个<p>元素表示是的措辞内容的块恰好流动等一段文字。尽管它被称为一个段落,但它不必严格代表一段书面文字。

为了引入列表或块级代码片段,您不会以任何方式破坏语义,即将中间句子分段为两个<p>元素。这是完全可以接受的。

由于事实上,HTML5 agrees(而HTML 4可悲绝对没有说超过了“P元素表示一个段落”):

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

例如,这奇妙句子具有与

  • 向导子弹,
  • 快于光行进,并
  • 心灵感应,

和进一步讨论下面。

解决方案是要认识到,用HTML表示的paragraph不是一个逻辑概念,而是一个结构性概念。在上面这个神奇的例子中,实际上有五个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> 

如果查看文档的源,则可以看到,即使在引用的例子包括含有一个<p>元件的文本“上述示例的标记因此可以是:”,紧接着包含示例标记的<pre>元素。

如果您仍然担心,HTML5提供了一个替代方案,但基本上涉及到使用<div>而不是单独的<p>元素,正如您所说的那样不是您的解决方案。

最后,假设我提到的所有内容都适用于HTML 4和XHTML 1,这是安全的。对于它的价值,这个概念在XHTML 2中进行了探索,这将允许<p>元素包含任何其他类型的内容。

+0

在'p'定义中:“[p](http://www.w3.org/TR/html5/grouping-content.html#the-p-element)元素[代表](http:// www。 w3.org/TR/html5/dom.html#represents)[段落](http://www.w3.org/TR/html5/dom.html#paragraph)。“段落定义基本上说它是一个非空运行的短语内容不会被其他类型的内容中断(不考虑“a”,“ins”,“del”和“map”)。 HTML定义了结构化段落,我在脑海中写下了符合逻辑段落的我的问题。在我看来,“结构性段落”的概念是人为的,但我必须接受这个规范。 – Palec

+0

好吧,只有使用标记语言才能做到这一点,即使其语法与HTML一样宽大。 – BoltClock