制作HTML嵌套列表的正确方法?

Proper way to make HTML nested list?

提问人:Ricket 提问时间:5/5/2011 最后编辑:Matthias BraunRicket 更新时间:9/9/2023 访问量:465695

问:

W3 文档有一个以 为前缀的嵌套列表示例,但他们从未使用未弃用的示例对其进行更正,也没有确切解释该示例的问题所在。DEPRECATED EXAMPLE:

那么,以下哪种方式是编写 HTML 列表的正确方法呢?

选项 1:嵌套是父项的子项:<ul><ul>

<ul>
    <li>List item one</li>
    <li>List item two with subitems:</li>
    <ul>
        <li>Subitem 1</li>
        <li>Subitem 2</li>
    </ul>
    <li>Final list item</li>
</ul>

选项 2:嵌套是它所属的子项:<ul><li>

<ul>
    <li>List item one</li>
    <li>List item two with subitems:
        <ul>
            <li>Subitem 1</li>
            <li>Subitem 2</li>
        </ul>
    </li>
    <li>Final list item</li>
</ul>
html 嵌套列表

评论


答:

657赞 DwB 5/5/2011 #1

选项 2 是正确的。

嵌套列表应位于嵌套列表的 <li> 元素内

链接到 MDN 关于列表的文章(摘自下面的评论):HTML 列表

链接到 HTML5 W3C 规范:HTML5 ulul

请注意,一个元素可能正好包含零个或多个元素。这同样适用于 HTML5 olulli

描述列表 (HTML5 dl) 类似,但同时允许 和 元素。dtdd

更多注意事项:

  • dl= 定义列表。
  • ol= 有序列表(数字)。
  • ul= 无序列表(项目符号)。

嵌套列表中的 MDN 链接

评论

1赞 Mark 4/8/2020
我遇到了一个似乎无法使用有效 HTML5 创建的案例:一个没有父列表项的嵌套列表项(想象一下在文字处理器中按 TAB 键在列表项的开头缩进)。在这里看到我的问题:stackoverflow.com/questions/61094384/......
1赞 rphair 12/24/2022
我真的很高兴得到这个答案,但找不到如何将选项 1 中无效的 HTML5(例如 BlueGriffon 创建,并且需要正确显示嵌套列表)转换为选项 2 的有效 HTML5。HTML Tidy 似乎没有这样做,我尝试过的所有所见即所得编辑器都会接受无效标记的复制和粘贴,并保持这种状态。:(
88赞 csi 5/5/2011 #2

选项 2

<ul>
<li>Choice A</li>
<li>Choice B
  <ul>
    <li>Sub 1</li>
    <li>Sub 2</li>
  </ul>
</li>
</ul>

嵌套列表 - UL

7赞 Ken Gregory 5/5/2011 #3

我更喜欢选项二,因为它清楚地将列表项显示为该嵌套列表的拥有者。我总是倾向于语义上合理的 HTML。

8赞 user3272456 2/5/2014 #4

如果验证,则选项 1 在 html 5 中显示为错误,因此选项 2 是正确的。

3赞 CSSMAN 5/14/2014 #5

你有没有想过使用TAG“dt”而不是“ul”来嵌套列表?它的继承样式和结构允许您在每个部分都有一个标题,并自动将里面的内容制成表格。

<dl>
  <dt>Coffee</dt>
    <dd>Black hot drink</dd>
  <dt>Milk</dt>
    <dd>White cold drink</dd>
</dl>

<ul>
   <li>Choice A</li>
   <li>Choice B
      <ul>
         <li>Sub 1</li>
         <li>Sub 2</li>
      </ul>
   </li>
</ul>

评论

2赞 Ricket 5/14/2014
你的例子是不一样的。第二个示例“Choice A”、“Choice B”、“Sub 1”、“Sub 2”不适用于配对的 / 标签。此外,固有的样式(我怀疑是表格)仅来自默认的浏览器样式表,所以这并不能说明什么。我会把它当作一个语义元素;如果您有一个定义列表,或者如果您只有成对的标题/描述数据,那么 A 可能是一个不错的选择。dtdddl
0赞 Zlatin Zlatev 9/27/2016
您能否编辑您的评论以提供等效的示例 - 例如,两者都包含选项 A 和选项 B,以及选项 B 的两个子条目 Sub 1 和 Sub 2?
51赞 Geoffrey Hale 5/6/2015 #6

选项 2 是正确的:嵌套的 <ul> 是它所属的 <li> 的子项。

如果验证,选项 1 会在 html 5 中显示为错误 -- credit: user3272456


正确:作为<ul><li>

制作 HTML 嵌套列表的正确方法是将嵌套列表作为其所属的子列表。嵌套列表应位于嵌套它的列表元素内。<ul><li><li>

<ul>
    <li>Parent/Item
        <ul>
            <li>Child/Subitem
            </li>
        </ul>
    </li>
</ul>

嵌套列表的 W3C 标准

一个列表项可以包含另一个完整的列表,这称为“嵌套”列表。它对于目录之类的东西很有用,例如本文开头的目录:

  1. 第一章
    1. 第一节
    2. 第二节
    3. 第三节
  2. 第二章
  3. 第三章

嵌套列表的关键是记住嵌套列表应与一个特定的列表项相关。为了在代码中反映这一点,嵌套列表包含在该列表项中。上面列表的代码如下所示:

<ol>
  <li>Chapter One
    <ol>
      <li>Section One</li>
      <li>Section Two </li>
      <li>Section Three </li>
    </ol>
  </li>
  <li>Chapter Two</li>
  <li>Chapter Three  </li>
</ol>

请注意嵌套列表是如何在包含列表项的 和 文本之后开始的(“第一章”);然后在包含列表项之前结束。嵌套列表通常构成网站导航菜单的基础,因为它们是定义网站层次结构的好方法。<li></li>

从理论上讲,您可以根据需要嵌套任意数量的列表,尽管在实践中,嵌套列表太深可能会令人困惑。对于非常大的列表,您最好将内容拆分为几个带有标题的列表,甚至将其拆分为单独的页面。

-5赞 ibash 6/30/2016 #7

这里没有提到的是,选项 1 允许您任意深度嵌套列表。

如果您控制内容/css,这应该无关紧要,但如果您正在制作富文本编辑器,它会派上用场。

例如,gmail、收件箱和 evernote 都允许创建如下列表:

arbitrarily nested list

使用选项 2 时,您无法这样做(您将拥有一个额外的列表项),使用选项 1,您可以这样做。

评论

2赞 j08691 6/30/2016
选项 1 生成无效的 HTML。五年前,当这个问题被问到时,情况可能并非如此,但现在确实如此。
1赞 ibash 7/1/2016
是的,这绝对是无效的 HTML。但是,它仍在使用,并且对于兼容性仍然有用。另一种方法是摆弄边距和项目符号样式,这可能不是您在撰写电子邮件时想要的。
1赞 Zlatin Zlatev 9/27/2016
我不确定我是否理解为什么我想要这样错位的东西。你能编辑你的评论以提供更有意义的用法吗?
0赞 ibash 9/28/2016
重要的是,这允许对一组项目符号进行自由格式编辑,使其具有更直观的感觉。作为用户,如果我有一个项目符号列表,我可能希望缩进它们并将它们嵌套在新项目符号下。如果没有任意缩进的能力,用户首先需要插入标题项目符号,然后缩进每个项目符号。通过任意缩进功能,用户可以缩进项目符号组,然后插入新的标题项目符号。
1赞 d2vid 5/16/2023
我可以确认,截至 2023 年 5 月,这就是 Google Docs 在其标记和剪贴板数据中缩进 <ol> 和 <ul> 的结构。OP是有道理的。