【问题标题】:HTML nested numbered list with starting index带有起始索引的 HTML 嵌套编号列表
【发布时间】:2013-07-30 16:15:27
【问题描述】:

在我的应用程序中,我有一个页面列出了一些按类别分组的数据。

列表中的每个项目都可以有子项目。

所以我希望它看起来像这样:

  1. 列表项

    1.1 列表项

    1.2 列表项

  2. 列表项

    2.1 列表项

    2.2 列表项

我可以使用这三行 css 代码轻松实现:

OL { counter-reset: item }
LI { display: block }
LI:before { content: counters(item, ".") " "; counter-increment: item }

但是在这个页面上我有每个类别的选项卡,其中包含这样的嵌套项目列表,我想让下一个选项卡的第一个项目的索引成为第 x+1 个项目,其中 x 是最后一个项目的编号上一个标签(类别)。

#tab 1
 1. List item

   1.1 List item

   1.2 List item
 2. List item

   2.1 List item

   2.2 List item

#tab 2
 3. List item

   3.1 List item

   3.2 List item
 4. List item

   4.1 List item

   4.2 List item

所以我需要为<ol> 标签提供起始索引的功能。我发现有属性 start="x",但是它不适用于嵌套列表的这 3 行 css 代码。

知道如何做这样的事情吗?

【问题讨论】:

  • 您使用的是什么文档类型?
  • 您能否在jsfiddle 上重新创建此内容或向我们展示您的 HTML?
  • Marcon:我正在使用 !DOCTYPE html。 kalley:我想实现类似 jsfiddle.net/qGCUk/4 的目标,但我希望能够在每个选项卡上设置外循环的起点。

标签: html css frontend


【解决方案1】:

来自http://www.w3.org/TR/css3-lists/#html4

/* The start attribute on ol elements */
ol[start] { 
    counter-reset: list-item attr(start, integer, 1); 
    counter-increment: list-item -1; 
}

将它添加到 CSS 允许 start 属性在我的测试中被识别。

编辑: 您可以为每个新起点使用 CSS 类,而不是使用 start 属性。不利的一面是,如果您需要更改任何内容,这将需要更多维护。

CSS:

ol.start4
{
    counter-reset: item 4;
    counter-increment: item -1;
}

ol.start6
{
    counter-reset: item 6;
    counter-increment: item -1;
}

HTML:

<div>
<ol>
<li>Item 1</li>
<li>Item 2
    <ol>
    <li>Item 1</li>
    <li>Item 2</li>
    </ol></li>
<li>Item 3
    <ol>
    <li>Item 1</li>
    <li>Item 2</li>
    </ol></li>
</ol>
</div>

<div>
<ol class="start4">
<li>Item 4
    <ol>
    <li>Item 1</li>
    <li>Item 2</li>
    </ol></li>
<li>Item 5</li>
</ol>
</div>

<div>
<ol class="start6">
<li>Item 6</li>
<li>Item 7
    <ol>
    <li>Item 1</li>
    <li>Item 2</li>
    </ol></li>
</ol>
</div>

【讨论】:

  • 我在 jsfiddle 上尝试了你的代码,无论有没有那个 CSS 代码,它都给出了相同的输出。请记住,我不希望子问题总是从 1 开始,而是 X.1, X.2 ,其中 X 是父问题的数量。
  • 当然,当我回去添加周围的div来模拟标签时,它失败了。是的,我知道你不想从 1 开始。如果 attr 调用失败,示例中的 1 是一个后备。您实际上可以省略该部分,但它不会立即对这种情况有所帮助。
  • 我认为问题在于 CSS attr() 仅在某些情况下有效,而在其他情况下无效。例如,它适用于“content” CSS 属性,但不适用于“counter-reset”。我有一个新的解决方案,但我觉得它有点难看。
【解决方案2】:

只需删除 css,并正确关闭并重新打开 &lt;ol&gt; 标签。

如果您需要将列表拆分为两个单独的选项卡,则必须关闭第一个选项卡内的第一个 &lt;ol&gt;。然后,使用第二个选项卡中的 start 参数重新打开新列表:&lt;ol start="3"&gt;

Working fiddle - (我设置 start="5" 以显示它正在工作;出于您的目的,只需将其设置为 3 或您需要的)

更新:

保留 CSS,并将所有选项卡包装在主 &lt;ol&gt;&lt;/ol&gt; 中,这样计数器就不会重置。

http://jsfiddle.net/qGCUk/227/

【讨论】:

  • 这对这里的问题不起作用。问题似乎是 koleS 想要使用 counters 功能来制作特殊的有序列表标签,这使得事情变得有点复杂。
  • 在您的示例中,我可以嵌套 start 属性,但是它并没有给我想要实现的目标,即格式 X.Y,它只给了我一个数字作为标签。
  • @koleS,看看我更新的答案和小提琴,这是你需要的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
相关资源
最近更新 更多