【问题标题】:HTML: Best tag for 'labels' outside of formsHTML:表单外“标签”的最佳标签
【发布时间】:2011-05-21 22:00:55
【问题描述】:

对于此类信息,您会使用哪些 HTML 标记:


姓名:约翰
年龄:40岁
城市:法兰克福
国家/地区:德国状态:有效

我喜欢在这里使用p 标签中的<label> 标签,这听起来像是很好的语义。但是,此信息不在表单内。 W3C 说:

label: The label element represents a caption for a form control.

那我应该用什么?我可以清楚地使用<strong>,但这没有“强烈的重要性”并且感觉不正确。

更新

在注意到 DEFINITION LIST 建议后,我想问一下,如果我在同一页面上有几条此类信息,这是否仍然是最好的?这意味着我多次用不同的“定义”定义“名称”。例如:


姓名:约翰
年龄:40岁
城市:法兰克福
国家/地区:德国状态:有效

姓名:玛丽亚
年龄:30
城市:波恩
国家 :德国
状态:不活动


<dl> 仍然是最好的选择吗?

【问题讨论】:

  • DL 绝对是必经之路。不要去想严格意义上的“定义”,把它看成是一个实例定义。甚至 w3c 规范也说“例如,DL 的另一种应用是标记对话,每个 DT 命名一个说话者,每个 DD 包含他或她的话。”,所以他们也非常宽松。
  • <dl> 仍然合适,它不限于用于文字定义。即使如果严格来说是针对定义(比如字典单词的定义),对于同一个项目看到多个定义也是正常的。
  • 事实上,我相信HTML5现在称它为“描述列表”dev.w3.org/html5/markup/dl.html
  • 在2017年的今天,HTML5是一个统一的标准,我们采用更多语义,而不是更少......使用 <label> 进行标记 (!)...所以,是的,您可以使用它。参见例如。 Mozilla's guide/Element/label,“内容类别:流式内容、短语内容……”。另见stackoverflow.com/a/32408312
  • 值得注意的是,虽然<dl> 标签在语义上是合适的,但如果您正在构建一个响应式网站,很高兴知道没有办法将<dt><dd> 元素保持在一起(防止中断在术语和定义之间)而不在每一对周围使用非语义包装器。如果这是一个问题,这可能需要您使用不同的 HTML 结构。

标签: html


【解决方案1】:

definition list 可能适合这里:

<dl>
    <dt>Name</dt>
    <dd>John</dd>
    <dt>Age</dt>
    <dd>40</dd>
    <dt>City</dt>
    <dd>Frankfurt</dd>
    <dt>Country</dt>
    <dd>Germany</dd>
    <dt>Status</dt>
    <dd>Active</dd>
</dl>

http://www.w3.org/TR/html401/struct/lists.html#h-10.3 - 使用 DL 元素创建的定义列表通常由一系列术语/定义对组成(尽管定义列表可能有其他应用)。

但是,仅仅因为您想要粗体格式并不意味着您仅限于&lt;strong&gt;&lt;b&gt;。您可以使用非语义 &lt;span&gt; 并简单地使用 CSS 应用格式。

此外,您可以使用 CSS 来添加冒号,而不是将它们放在您的标记中:

dt:after { content:":"; }

也许是为了帮助澄清一些关于它的正确用法的困惑,看起来 HTML5 会将这个标签称为 描述列表

http://www.w3.org/TR/html5/grouping-content.html#the-dl-element - dl 元素表示由零个或多个名称-值组(描述列表)组成的关联列表。

【讨论】:

  • +1 因为你的打字速度比我快...同时提供了更多的信息。 : ) 唯一的评论是,如果是我并且我对语义很挑剔,我会转储 ':' 以支持通过 css dt:after 选择器设置样式,并以 ':' 作为内容。
  • 感谢您的快速回复,但这真的是 W3C 想要的“定义列表”吗?毕竟,我并没有真正“定义”这些术语,我只是给它们一个值,它可以从一个页面到另一个页面发生变化(而定义是固定的,我猜)。我更新了我的问题。
  • @plua:它非常适合名称/值对。查看我链接到的页面上的一些示例。 DL 也用于对话(如在脚本中)。此外,在谷歌上搜索“html 定义列表语义”,您会看到它用于各种应用程序。我同意这有点可疑,但我认为没有另一个更合适的 html 标记。
  • 下面是这个定义列表的一个很好的 CSS 格式:the-art-of-web.com/css/format-dl/#.UnV1fxBBHrg
  • 哼...今天(2017的和HTML5更语义泛化的使用)改了,可以用&lt;label&gt;,见stackoverflow.com/a/32408312/287948
【解决方案2】:

这是 DL 结构的正确位置:

<dl>
   <dt>Name</dt>
   <dd>John</dd>

   <dt>Age</dt>
   <dd>40</dd>

   <dt>City</dt>
   <dd>Frankfurt</dd>

   <dt>Country</dt>
   <dd>Germany</dd>

   <dt>Status</dt>
   <dd>Active</dd>
</dl>

请注意,您需要添加样式以使其看起来像这样,但这是正确的逻辑结构。

【讨论】:

    【解决方案3】:

    也许您可以使用定义列表(dldtdd),但这听起来也不正确。

    正如 W3C 所说,它代表表单控件的标题,标签旁边的文本不是控件,因此for 属性变得毫无意义。

    我会选择strong,也因为它是没有 CSS 的最佳表示。


    编辑

    由于这是关于人的,您还可以使用与 HTML 等效的 vCard:hCard。示例:

    <div class="vcard">
        <div class="fn">
            <strong class="type">Name</strong>:
            <span class="value">John</span>
        </div>
        <div class="note">
            <strong class="type">Age</strong>:
            <span class="value">40</span>
        </div>
        <div class="adr">
            <div class="locality">
                <strong class="type">City</strong>:
                <span class="value">Frankfurt</span>
            </div>
            <div class="country-name">
                <strong class="type">Country</strong>:
                <span class="value">Germany</span>
            </div>
        </div>
        <div class="note">
            <strong class="type">Status</strong>:
            <span class="value">Active</span>
        </div>
    </div>
    

    然后您可以在&lt;ul&gt;&lt;ol&gt; 中使用尽可能多的这些。一些浏览器会识别这些属性并将它们转换为应用程序使用的链接。例如,adr 属性可以链接到映射工具。

    这只是一个标准,并不意味着在语义上是正确的。据我所知,您可以在这些 hCard 中使用您喜欢的任何标记(HTML 标签)。详情见链接。

    【讨论】:

    • 似乎 W3C 已将 &lt;dl&gt; 从只是“定义列表”更改为任何类型的“描述列表”,所以 &lt;dl&gt; 确实是正确的,至少根据最新的规格。见my answer
    【解决方案4】:

    我同意其他答案,即&lt;dl&gt; 列表是这里最语义化的选项。过去我不确定这是否是正确使用&lt;dl&gt;,因为我看到的&lt;dl&gt; 元素的所有官方描述都将其描述为“定义列表”,用于实际定义术语表中的术语(在@Cristian 的回答中查看我的 cmets)。但是,在查看了 HTML 5 规范的latest editor's draft 之后,我注意到它已被重命名为“描述列表”而不是“定义列表”,并且给出的示例实际上与此处问题中的示例非常相似。

    另一方面,&lt;dfn&gt; 似乎仅用于实际定义术语。以下是上述链接中的一些相关引述:

    dt 元素本身,当用于 dl 元素时,并不表示 它的内容是一个正在定义的术语,但这可以表明 使用 dfn 元素。

    ...

    dfn 元素表示术语的定义实例。作为 dfn 元素最近祖先的段落、描述列表组或部分还必须包含 dfn 元素给出的术语的定义。

    因此,总而言之,我会支持使用 &lt;dl&gt; 元素的建议,即使它的默认样式与 OP 的示例不同。

    下面是示例样式中 &lt;dl&gt; 的可重用 CSS 类:

    .dl-inline dt, .dl-inline dd {display:inline; margin:0;}
    .dl-inline dt:after {content:': '}
    .dl-inline dd + dt:before {content:''; display:block;}
    <dl class="dl-inline">
    	<dt>Name</dt>
    	<dd>John</dd>
    	<dt>Age</dt>
    	<dd>40</dd>
    	<!-- ... -->
    </dl>

    或 SASS 版本:

    .dl-inline {
        dt,dd {display:inline; margin:0;}
        dt:after {content:': '}
        dd + dt:before {content:''; display:block;}
    }
    

    【讨论】:

    • 好地方.. 不过我不确定 CSS。我认为 HTML 本身应该有一些基本的布局,这样它就可以在没有 CSS 的情况下阅读。
    • 我认为
      本身是可读的,它只是跨越多行而不是在同一行上具有字段值。
    【解决方案5】:

    我会主张使用&lt;dfn&gt; 标签。

    它简短、语义化且易于设置样式。

    元素标记正在定义的术语;定义 该术语的应由周围的

    给出,

    或定义列表组(通常是一个
    对)。

    来源:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dfn

    【讨论】:

    • 据我所知(并通过阅读规范),&lt;dfn&gt; 似乎用于定义字典或词汇表或文章文本中的术语,您可以在其中重新定义该术语的含义。因此,使用它来显示诸如“姓名”、“年龄”等字段的值对我来说听起来不太语义……另一方面,这肯定比在表单之外使用 &lt;label&gt; 更好, 因为&lt;label&gt; 被明确指定为仅在表单中使用。
    • 然而,我对此持矛盾态度,因为要保持一致,认为&lt;dfn&gt; 的这种用法并不是真正“定义一个术语”的论点将是反对使用&lt;dt&gt;&lt;dd&gt; 标签与接受的答案一样,我认为这可能过度限制了这些标签的有用性。如果与严格语义的偏差不是太大问题,我实际上喜欢使用&lt;dfn&gt; 最适合问题中预期样式的想法,因为您不必编写与您一样多的 CSS 覆盖会用&lt;dl&gt;
    猜你喜欢
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 2013-10-17
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多