3

我找到了一个关于HTML5的部分和大纲的页面。不是 100% 确定它是官方的,并且页面上说大多数浏览器不遵循它,但我认为这是一个非常酷的想法,所以我正在尝试创建明确插入隐式部分并创建大纲的代码。

我遇到的概念问题类似于隐式和显式切片混合的示例之一(缩写版):

<body>
  <h1>Mammals</h1>
  <h2>Whales</h2>
  ...
  <section>
    <h3>Forest elephants</h3>  
    ...
    <h3>Mongolian gerbils</h3>
    ...
    <h2>Reptiles</h2>
    ...
  </section>
</body>

哪个应该给出:

1. Mammals
   1.1 Whales (implicitly defined by the h2 element)
   1.2 Forest elephants (explicitly defined by the section element)
   1.3 Mongolian gerbils (implicitly defined by the h3 element, which closes the previous section at the same time)
2. Reptiles (implicitly defined by the h2 element, which closes the previous section at the same time)

但是我遇到了这个问题(从一个带有标题的部分开始,然后稍后使用一个不太深的标题)。考虑这个稍微修改的例子:

<body>
  <h1>Mammals</h1>
  <h2>Whales</h2>
  ...
  <section>
    <h3>Forest elephants</h3>  
    ...
    <h2>Reptiles</h2>
    ...
    <h1>Martians</h2>
    <p>Just being annoying</p>
  </section>
</body>

我该怎么处理呢?最后一个<h1>应该在外部范围内的 a 级别结束<h0>,这不存在。

<h3>(我个人认为,明确的部分仅以 allow <h3>、和开头是最有意义的<h4>,但这不会重现示例,我想以“官方”方式进行。)<h5><h6>

4

2 回答 2

2

大纲算法通过简单地不允许分段元素中的标题元素高于分段元素本身来解决此问题。从规格

输入标题内容元素时

如果当前部分没有标题,则让输入的元素成为当前部分的标题。

否则,如果正在输入的元素的排名等于或高于当前大纲目标的大纲的最后一节的标题,或者当前大纲目标的大纲的最后一节的标题是隐含的标题,然后创建一个新节并将其附加到当前大纲目标元素的大纲中,这样这个新节就是该大纲的最后一个新节。让当前部分成为新部分。让输入的元素成为当前部分的新标题。

例如,如果您将 a<h3>作为部分中的第一个标题,那么在同一部分中任何紧随其后的<h2><h1>都将被同等对待,从而创建与第一个分开的隐式部分。Only <h4>to<h6>将创建隐式小节而不开始新的部分。

您的第一个示例实际上产生了以下大纲:

1. 哺乳动物
   1.1 鲸鱼
   1.2 森林象
   1.3 蒙古沙鼠
   1.4 爬行动物

您的第二个示例产生以下大纲:

1. 哺乳动物
   1.1 鲸鱼
   1.2 森林象
   1.3 爬行动物
   1.4 火星人
于 2016-03-10T14:28:49.313 回答
1

分段内容元素内的隐含部分不能“突破”以创建更高级别的条目。它们要么创建同级条目(如果它是具有相同或更高等级的标题元素)或子条目(如果它是具有较低等级的标题元素)。

所以你的两个例子都创建了这个大纲:

1. Mammals
   1.1 Whales
   1.2 Forest elephants
   1.3 Mongolian gerbils [resp. Reptiles]
   1.4 Reptiles [resp. Martians]

HTML5 Outliner的演示(我推荐)似乎同意。

于 2016-03-10T14:30:20.307 回答