html - HTML 规范中的后代和内容模型

标签 html w3c specifications

假设我们有这个标记:

<ul>
    <li>
        <span></span>
    </li>
</ul>
  • liul 的 child 和后代
  • spanli 的 child 和后代
  • spanul 的后代

阅读specifications for ul我们有:

Content model:
         Zero or more li and script-supporting elements.

内容模型的语义部分说,(强调我的):

Content model
           A normative description of what content must be included as
           children and descendants of the element.

我肯定是想错了,但我无法计算两者。因为 span 不是“零个或多个 li 元素” 的一部分,它是 ul 的后代。

如果规范说:“关于必须包含哪些内容作为元素的子元素的规范描述。”我会明白,但这可能会与规范的其他部分冲突。 p>

我的问题是如何解释这一点。


添加更多上下文。 ul 只能有 li 作为 child 。但是从上面的内容来看,如果一个人忘记了关于 HTML 等的所有知识,我会将其解释为以下两种情况之一:

  • 它必须有零个或多个 li 元素,但也可以有任何其他元素,或者
  • 只能li 个元素作为子元素和后代元素。

通过 “零个或多个”,后者更强大。

最佳答案

引用的描述来自 3.2.3 元素定义,相当松散甚至具有误导性。下一部分,3.2.4 内容模型,描述了内容模型的真正含义:“本规范中定义的每个元素都有一个内容模型:对元素预期内容的描述。 HTML 元素的内容必须符合元素内容模型中描述的要求。元素的内容是它在 DOM 中的子元素,模板元素除外,其中的子元素是模板内容中的元素。

因此,内容模型指定了允许的和必需的内容(虽然不是所有元素都有必需的内容),就子节点而言,这意味着子节点。这包括(如适用)元素子节点和文本节点子节点(例如,某些元素仅允许文本作为内容)。

这意味着一个 ul元素可能只有 liscript元素作为 child 。 li元素有自己的内容模型,这是相当宽松的。没有必填内容;甚至 <ul></ul>在 HTML5 中是允许的。

关于html - HTML 规范中的后代和内容模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22022469/

相关文章:

jquery - 如何删除 anchor 或使用 jQuery 在空白 ul li 中添加它们

css - 如果我更喜欢语义命名,那么我不应该使用任何 CSS 框架和网格方法吗?

css 左侧的 div 更亮?

html - flex 容器内的响应图像高度

html - 为什么 <br> 是一个元素,而不是一个实体?

css - 在CSS Flexbox中,为什么没有“justify-items”和“justify-self”属性?

c# - C#中变量名前的@符号是什么意思?

F# 规范符号运算符 VS 符号关键字

sql - 学习 ANSI SQL 的最佳资源是什么?

html - MySQL 5 - 使用 UPDATE 将内联 HTML 内容插入 SQL 列失败