如何在语义上为HTML中的列表提供标题,标题或标签


80

为HTML列表提供语义标题的正确方法是什么?例如,以下列表具有“标题” /“标题”。

水果

  • 苹果
  • 橙子

应该如何处理“水果”一词,使其在语义上与列表本身相关联?


HTML规范需要在元素上添加标题,图例和注释属性或标记。图像,表格,列表和其他非文本对象在出版物中附加了标题,图例和/或注释,并且需要一种有用的标记语言来反映该约定。

9
我很惊讶这个问题已经解决。显然,这是关于语义的,而不是美学或其他任何主观的主题。问题是直接问“在这种情况下是否有适当的语义标记?” 并且就HTML5而言,答案是“是”
daiscog

9
我已经厌倦了看到很多我感兴趣的问题,因为以“基于观点的观点”来结束这个问题。这是适得其反的。让我们发表意见。同样,这个问题是关于“最佳实践”的。人们可以就最佳做法(带有来源)提出有效的论据。我们想要那些论点。它
不全是

2
我已投票决定重新开放这个问题,并对其进行编辑以减少意见。现在,它显然要求添加标题的正确语义方法。
拉扎尔·柳别诺维奇(LazarLjubenović)

Answers:


71

尽管没有标题或标题元素可以有效地构造您的标记,但效果相同。这里有一些建议:

嵌套清单

<ul>
    <li>
        Fruit
        <ul>
            <li>Apple</li>
            <li>Pear</li>
            <li>Organge</li>
        </ul>
    </li>
</ul>

列表前的标题

<hX>Fruit</hX>
<ul>
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>

定义清单

<dl>
  <dt>Fruit</dt>
  <dd>Apple</dd>
  <dd>Pear</dd>
  <dd>Orange</dd>
</dl>

2
@alohci如果列表中将有更多定义,则定义列表或无序列表有什么问题?
ahsteele

2
@Alohci:请详细说明。您的评论引起了您的兴趣,但就目前的情况而言,这根本没有帮助,因为您没有解释为什么其他选项都不是“语义上有效的”
Stijn de Witt 2014年

4
@StijndeWitt-没错。在这种情况下,这是不正确的语义,只是因为这不在问题中。这就是正确设置HTML标记,实际内容及其所处上下文的问题。
Alohci 2014年

2
@JeffereyCave根据HTML规范,将一个<ul>(或任何其他块级元素)作为a的子元素<p>是无效的,该规范指出<p>只能将“短语内容”作为子节点。
daiscog '16

4
@ahsteele有趣... MDN将其列为描述列表...哦!“在HTML5之前,[它]被称为定义列表。” developer.mozilla.org/zh-CN/docs/Web/HTML/Element/dl。您的链接适用于html4。在该链接上,他们给出了一个dl代表对话框的示例,每个dt都标记了讲话者,而dd则表达了他们的意思。因此,我很确定他们(无论他们叫什么)都可以正确地以这种方式使用。
RoboticRenaissance

54

选项1

HTML5具有figurefigcaption元素,我觉得它工作得很好。

例:

<figure>
    <figcaption>Fruit</figcaption>
    <ul>
        <li>Apple</li>
        <li>Pear</li>
        <li>Orange</li>
    </ul>
</figure>

然后可以使用CSS轻松设置这些样式。


选项2

使用CSS3的:: before伪元素可以是一个不错的解决方案:

HTML:

<ul title="Fruit">
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>

CSS:

ul[title]::before {
    content: attr(title);
    /* then add some nice styling as needed, eg: */
    display: block;
    font-weight: bold;
    padding: 4px;
}

当然,您可以使用与ul[title];不同的选择器。例如,您可以添加“ title-as-header”类,然后使用它ul.title-as-header::before或其他所需的东西。

这确实给您整个列表的工具提示带来了副作用。如果您不想要这样的工具提示,则可以改用data属性(例如<ul data-title="fruit">ul[data-title]::before { content: attr(data-title); })。


您的答案就是规格说明的内容。我不知道为什么它不是票数最高的票。
艾哈迈德·马哈茂德

@AhmedMahmoud可能是因为最高答案比这个答案大7岁!
daiscog

哦,时间过得真快。没注意到日期。
艾哈迈德·马哈茂德

这是否意味着figure可以使用与图像不同的内容?
CodeGust

1
@CodeGust绝对是
daiscog

13

据我所知,当前的HTML规范中没有像表那样为列表提供标题的条款。我将暂时使用分类段落或标头标记。

<h3>Fruit</h3>
<ul>
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>

将来,随着HTML5的广泛采用,您将可以使用<legend>and<figure>标记在语义上稍微完成一点。

有关更多信息,请参见W3C邮件列表上的这篇文章


4

为了确保屏幕阅读器将列表连接到关联的标题,您可以使用诸如此类的aria-labelledbyconnected标题id

<h3 id="fruit-id">Fruit</h3>

<ul aria-labelledby="fruit-id">
  <li>Apple</li>
  <li>Pear</li>
  <li>Orange</li>
</ul>

如上一个答案所述,请确保标题级别遵循文档中的标题顺序。


1

像表一样的列表没有类似标题的标签。因此,我只给它一个<Hx>(x,取决于您先前使用的标头)。



0

由于我一直在寻找一个具有较旧浏览器支持的解决方案,因此我认为这可能是一个过于简化的解决方案。使用表格显示样式和ID /类:

    <ul>
        <li id="listCaption">My List</li>
        <li>first item</li>
        <li>second item</li>
        <li>third item</li>
      </ul>

然后将display: table-row;样式应用于CSS中的元素:

    li#listCaption {
      display: table-row;
      font-size: larger;
      text-decoration: underline; }

如果您使用的是描述列表,那么效果会更好,这是我在遇到相同问题时所做的事情。在这种情况下,您可以<div>在HTML和display: table-caption;CSS中使用,因为dl列表中支持div元素:

    <dl>
        <div id="caption">Table Caption</div>
        <dt>term</dt>
        <dd>definition</dd>
    </dl>

在CSS中,您可以将各种样式应用于标题:

    #caption {
        display: table-caption;
        font-family: Arial, Helvetica, sans-serif;
        font-size: 20px;
        background: transparent;
        caption-side: top;
        text-align: center; }

我应该注意,由于它被视为块元素,因此table-caption效果不佳,ul/ol并且文本将垂直对齐,这可能是您不希望的。

我在Firefox和Chrome中都对此进行了测试。


-2

您始终可以使用<label/>将标签关联到列表元素:

<div>
    <label for="list-2">TEST</label>
    <ul id="list-1">
        <li>one</li>
        <li>two</li>
        <li>three</li>
    </ul>
    <label for="list-2">TEST</label>
    <ol id="list-2">
        <li>one</li>
        <li>two</li>
        <li>three</li>
    </ul>
</div>

4
这是无效的。的HTML规范规定,所述for属性必须是一个的ID加标签元件,其UL(在写作时)是不
daiscog
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.