如何在HTML中以语义方式为列表提供标题,标题或标签

Jon*_*n P 67 html semantic-markup html-lists

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

水果

  • 苹果
  • 橙子

应该如何处理"水果"这个词,以便它在语义上与列表本身相关联?

ahs*_*ele 65

虽然没有标题或标题元素结构,但您的标记可以有效地产生相同的效果.以下是一些建议:

嵌套列表

<ul>
    <li>
        Fruit
        <ul>
            <li>Apple</li>
            <li>Pear</li>
            <li>Organge</li>
        </ul>
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

列表之前的标题

<hX>Fruit</hX>
<ul>
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

定义清单

<dl>
  <dt>Fruit</dt>
  <dd>Apple</dd>
  <dd>Pear</dd>
  <dd>Orange</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)

  • 只有第二个选项在语义上有效. (7认同)
  • @StijndeWitt - 这都是真的.*this*实例中的语义不正确只是因为那不在问题中.这就是让HTML标记正确,实际内容和上下文的问题. (4认同)
  • @ahsteele有趣...... MDN将它列为描述列表......哦!"在HTML5之前,[它]被称为定义列表." https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl.你的链接是为html4.在该链接上,他们给出了代表对话框的dl的示例,每个dt标记扬声器,dd标记他们所说的内容.所以我很确定无论它们被称为什么,它们都可以正确地用于这种方式. (3认同)
  • @alohci如果列表中有更多定义,那么定义列表或无序列表会出现什么问题? (2认同)
  • @Alohci:请详细说明.对你的评论感兴趣,但因为它没有任何帮助,因为你没有解释*为什么*其他选项不是'语义上有效' (2认同)
  • @JeffereyCave根据[HTML规范](https://www.w3.org/TR/),将`<ul>`(或任何其他块级元素)作为`<p>`的子元素是无效的html5/grouping-content.html#the-p-element),它指出`<p>`只能将"短语内容"作为子节点. (2认同)

meg*_*lop 38

选项1

HTML5有figurefigcaption元素,我觉得它很好用.

例:

<figure>
    <figcaption>Fruit</figcaption>
    <ul>
        <li>Apple</li>
        <li>Pear</li>
        <li>Orange</li>
    </ul>
</figure>
Run Code Online (Sandbox Code Playgroud)

然后使用CSS轻松设置这些样式.


选项2

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

HTML:

<ul title="Fruit">
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

CSS:

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

当然,您可以使用不同的选择器ul[title]; 例如,你可以添加一个'title-as-header'类,ul.title-as-header::before改为使用,或者你需要的任何东西.

这确实有一个副作用,为您提供整个列表的工具提示.如果您不想要这样的工具提示,则可以使用数据属性(例如,<ul data-title="fruit">ul[data-title]::before { content: attr(data-title); }).


Cor*_*ere 16

为了确保屏幕阅读器将列表连接到关联的标题,您可以使用aria-labelledby连接到标题,如下id所示:

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

<ul aria-labelledby="fruit-id">
  <li>Apple</li>
  <li>Pear</li>
  <li>Orange</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

正如之前的答案中所述,请确保您的标题级别遵循文档中的标题顺序。


six*_*ear 12

据我所知,目前的HTML规范中没有为列表提供标题的规定,就像表格一样.我现在继续使用分类段落或标题标签.

<h3>Fruit</h3>
<ul>
    <li>Apple</li>
    <li>Pear</li>
    <li>Orange</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

将来,当HTML5获得更广泛的采用时,您将能够使用<legend><figure>标签在语义上稍微完成这一点.

有关详细信息,请参阅W3C邮件列表中的这篇文章.