段落内的列表或更长的代码片段
在编写算法时,在段落内甚至在句子中间写一些(伪)代码通常是非常方便的。 为了在视觉上支持更复杂句子的结构,列表也很方便。
显然,一个句子不能分成不同的段落。 但在我们的情况下,它必须归因于HTML嵌套规则。
段落是p
元素 ,它不能包含块级元素 。 不幸的是,对于我们的情况, pre
和列表是块级别的。
如果我不遵守规范并在p
包含pre
或ol
/ ul
/ dl
,则p
会在我知道的任何解析器的元素的开始标记之前自动关闭。 (这是由于p
上的SGML OMITTAG
功能设置所致)。也许这和向后兼容性是设计决定不允许pre
和list在p
。
有什么办法,如何将列表和更长的代码片段包含到段落中?
我可以重新编写我的句子和段落,不需要片段和列表,但它需要很多思考和关注,并且可以使我的文本更难以阅读和理解。 这对我来说不是一个解决方案 。
我可以使用带有whitespace: pre
code
whitespace: pre
和display: block
代码片段较长, code
whitespace: pre-wrap
较短的代码片段。 这在语义上是正确的吗?
我可以将句子中的列表看作仅仅是可视化的糖,而没有任何语义。 然后我会用span
s来display: list-item
,使它们看起来像列表。 从语义的角度来看,这是否正确? 语义结构的牺牲是必要的吗?
这个问题适用于HTML和XHTML,因为嵌套元素的规则是相同的。 通过HTML我的意思是HTML 4.01严格,通过XHTML我的意思是XHTML 1.0严格。 这个问题在HTML5中是以某种方式解决的?
为了明确起见,我想要一个符合标准的语法和语义正确的解决方案 ,而不是任何类型的非标准黑客。 具体而言, 将p
转换为div
不是我的解决方案 。
相关问题
ul
元素永远不可能是p
元素的子元素 <code>
vs <pre>
vs <samp>
用于内联和块代码片段 <pre>
标记使浏览器关闭段落 <p>
标签内有一个<pre>
标签吗? <p>
还是外面? 也可以看看
就HTML而言,单个<p>
元素表示的所有内容都是恰巧像段落文本一样流动的短语内容块。 尽管它被称为一个段落,但它不必严格代表一段书面文字。
为了引入一个列表或一个块级的代码片段,你不会以任何方式破坏语义,即使是将一个段落,甚至是中间句子分成两个<p>
元素。 这是完全可以接受的。
事实上,HTML5同意了(而HTML 4除了“ P
元素代表段落”之外绝对没有什么可说的):
列表元素(特别是ol
和ul
元素)不能是p
元素的子元素。 因此,当一个句子包含一个项目符号列表时,可能会想知道它应该如何标记。
例如,这个梦幻般的句子有与之相关的子弹
并在下面进一步讨论。
解决方案是要意识到,用HTML来说,段落不是一个合乎逻辑的概念,而是一个结构化的概念。 在上面这个神奇的例子中,实际上有五个段落定义在这个规范中:一个在列表之前,一个在每个项目符号之后,一个在列表之后。
上述例子的标记因此可以是:
<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>
元素的<pre>
元素示例标记。
如果你仍然担心,HTML5提供了一个替代方案,但基本上涉及到使用<div>
而不是单独的<p>
元素,正如你所说的,它不是一个解决方案。
最后,假设我提到的所有内容都适用于HTML 4和XHTML 1,这是安全的。 对于它的价值,这个概念在XHTML 2中进行了探索,它允许<p>
元素包含任何其他类型的内容。