代码之家  ›  专栏  ›  技术社区  ›  expora

对于目录,您建议使用哪种标记?

  •  4
  • expora  · 技术社区  · 14 年前

    我需要为一本HTML书创建一个大的目录,但是我不能决定什么是最好的标记解决方案。我有两个选择:定义列表或排序列表。

    你认为这是个人风格的决定吗?语义学呢?

    我喜欢我的列表被编号,但在使用“ol”和嵌套列表时有问题。我想我也会通过手动编号(禁用列表中的样式)对定义列表做同样的事情。

    我想到了这两个:

    选项A:

    <div class="TOC">
        <dl>
            <dt><a href="#">Preface</a></dt>
            <dt>I. <a href="#">Chapter 1</a></dt>
            <dd>
                <dl>
                    <dt>1 <a href="#">Section 1</a></dt>
                    <dd>
                        <dl>
                            <dt>1.1 <a href="#">Subsection A</a></dt>
                            <dt>1.2 <a href="#">Subsection B</a></dt>
                            <dt>1.3 <a href="#">Subsection C</a></dt>
                        </dl>
                        <dt>2 <a href="#">Section 2</a></dt>
                    </dd>
                </dl>
            </dd>
        </dl>
    </div>
    

    选项B:

    <div class="TOC">
        <ol>
            <li><a href="#">Preface</a></li>
            <li><a href="#">Chapter 1</a>
                <ol>
                    <li><a href="#">Section 1</a>
                        <ol>
                            <li><a href="#">Subsection A</a></li>
                            <li><a href="#">Subsection B</a></li>
                            <li><a href="#">Subsection C</a></li>
                        </ol>
                    </li>
                    <li><a href="#">Section 2</a></li>
                </ol>
            </li>
        </ol>
    </div>
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   lucideer    14 年前

    定义列表并不像某些人所说的那样严格地用于“定义”——如果是这样的话,它们的用途将非常少。然而,同时 <dl/> S非常灵活,有很多用途,这里的排序列表似乎是更好的选择。

    如果要对嵌套列表编号(无论它们是否嵌套 <ol/> S或 <DL/> s),您可以使用css counter increment和counter reset属性根据嵌套深度自动添加数字,而不是为每个修订手动维护数字。

    例子:

    .TOC ol{
      list-style-type:none;
      counter-reset:toc1;
    }
    
    .TOC ol li::before{
      content:counter(toc1)' ';
      counter-increment:toc1;
    }
    
    .TOC ol li ol{
      counter-reset:toc2;
    }
    
    .TOC ol li ol li::before{
      content:counter(toc1)' .'counter(toc2)' ';
      counter-increment:toc2;
    }
    
    .TOC ol li ol li ol{
      counter-reset:toc3;
    }
    
    .TOC ol li ol li ol li::before{
      content:counter(toc1)' .'counter(toc2)' .'counter(toc3)' ';
      counter-increment:toc3;
    }
        2
  •  4
  •   Rex M    14 年前

    有序列表是正确的标记。使用定义列表意味着主要部分标题是由其子部分标题定义的术语,这并不完全正确。

        3
  •  2
  •   James Curran    14 年前

    100%的话,我会带着订购单去。这正是他们被引入语言的目的。使用定义列表是对语言的滥用,因为它们的默认呈现有点像您希望看到的那样。(使用CSS使其看起来正确)

    嵌套的有序列表有什么问题?(您甚至不应该嵌套DLS)