【问题标题】:Replacement for the DOA <di> tagDOA <di> 标签的替换
【发布时间】:2014-01-25 19:01:19
【问题描述】:

DOA(或更恰当地说,Dead Before Arrival)XHTML2 工作标准表明支持the &lt;di&gt; tag

[...] 可以将术语及其定义分组到 di 元素中,以帮助阐明术语及其定义之间的关系。

为了澄清,此标签将用于将 &lt;dt&gt;&lt;dd&gt; 标签组合在 &lt;dl&gt; 下:

<dl>
    <di>
        <dt>defenestrate</dt>
        <dd>throw through or out of the window; "XHTML2 was defenestrated"</dd>
        <dd>what I will do if web standards keep going they way they are</dd>
    </di>
</dl>

无论如何,既然&lt;di&gt; 已经不在了(heh),我想知道当前支持的标记模式(如果有)可以在语义上和结构上被描述为相等的?我基本上已经接受 &lt;dl&gt; 不足以满足我的要求(就审美要求而言),所以我正在寻找其他解决方案。

我对@9​​87654330@ 的意图主要是一个样式挂钩1,因为我正在使用定义列表并打算将术语/定义分组设置为单个项目。

为了便于访问,我将使用aria-*role 属性来帮助定义关系,但我希望存在一些普遍接受的结构来模拟&lt;di&gt;,我只是没有没遇到过。

例如,我正在考虑以下内容:

<ul>
    <li>
        <dfn id="term-1">term</dfn>
        <p aria-labelledby="term-1">definition for term 1</p>
        <p aria-labelledby="term-1">another definition for term 1</p>
    </li>
    <li>
        <dfn id="term-2">term</dfn>
        <p aria-labelledby="term-2">definition for term 2</p>
        <p aria-labelledby="term-2">another definition for term 2</p>
    </li>
</ul>

1。据我了解,这是将其排除在 HTML5 之外的一个经常被引用的原因(它只是一个样式挂钩)。坦率地说,我认为这是公牛,因为它是一种非常合理的方式来为审美 解析目的对术语和定义进行分组。但谁在乎,对吧?不带引号的属性和不完整的标签要重要得多。&lt;/sarcasm&gt;

【问题讨论】:

  • 可能适合该法案,但我认为它在
    内无效。
  • @Diodeus 我有点接受&lt;dl&gt; 在这里不起作用,因为只有&lt;dt&gt;&lt;dd&gt; 的子元素约束。我可以使用&lt;ul&gt; 并尽我所能定义项目部件之间的关系;这就是我现在要去的地方。我只是想知道这个问题是否已经得到更正式的解决,并且有现成的解决方案。
  • 我发现,StackOverflow 的人群并不热衷于 HTML 语义问题。
  • @Diodeus 好吧,不管怎样,我希望这不是一个不受欢迎的问题。我不认为它是近距离投票的素材,但我想它是某种开放式的。我只是想找到一个可以接受的解决方案。

标签: html tags definition semantic-markup xhtml2


【解决方案1】:

HTML5 CR 在 dl element 中定义了一个分组,例如一个dd 元素后跟一个或多个dd 元素构成一个组,下一个dd 开始一个新组等。从这个意义上说,di 元素在结构上是多余的。另一方面,dl 元素实际上没有语义(除了结构上的东西),并且没有已知的软件可以以任何特定方式处理它,除了默认呈现问题。

如果您希望将这样的组设计为一个单元,那么根据规范和草稿,您大多不走运。没有考虑添加类似di 的内容的提议。您可以提交提案,将 tbodyoptgroup 作为先例(即作为特定元素中的特殊用途分组元素),但这将是一个漫长的过程。

一种简单的方法是使用divdl 中进行分组。当然是“无效”,但这只是一个正式的立场,浏览器并不在意。他们似乎很好地消化了这一点:

<dl>
    <div>
        <dt>defenestrate</dt>
        <dd>throw through or out of the window; "XHTML2 was defenestrated"</dd>
        <dd>what I will do if web standards keep going they way they are</dd>
    </div>
    <div>
        <dt>pragmatic HTML</dt>
        <dd>using markup according to how things actually work in browsers
            and other relevant software</dd>
    </div>
</dl>

浏览器对此进行解析,以便 div 元素是 dl 元素的子元素,而 dtdd 元素仍然对默认格式具有正常影响。

现在您可以设置单位样式,例如

<style>
dl > div { border: solid red 1px; margin-bottom: 0.6em; }
</style>

你可能会因此而发火。一种更安全、更枯燥的方法是让每个单元成为一个单独的 dl 元素(如果您需要将所有这些元素作为单个元素处理,则将 dl 元素包装在一个 div 容器中)。

【讨论】:

  • 感谢您的回答。我肯定考虑过dl &gt; div &gt; dt + dd 方法,但不幸的是,标记有效性(尽可能有效)是这里的要求。公然无视它并不是一个真正的选择,就像我希望的那样。我也考虑过写一个提案,但坚持下去可能会让我光头。我在这里的部分目标是可访问性合规性,但不幸的是每个人都想吃蛋糕,所以我还有审美品质的额外目标。
  • 我将其标记为答案,因为在当今的情况下,标记有效性并不是很重要(Angular 等),并且微数据格式提供正交语义结构。谢谢!
猜你喜欢
  • 2010-12-12
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多