【问题标题】:What HTML tag is semantically suitable for an "alternating" list with "intervals"?什么 HTML 标记在语义上适合带有“间隔”的“交替”列表?
【发布时间】:2016-07-12 12:24:07
【问题描述】:

假设我想展示一个 TODO 列表,如下所示:

8:00
    Walk the dog!
8:30
    Clean the car!
9:20
    Rob the bank!
9:21
    Run the dog!
22:00
    Have a beer!
22:05

虽然我的第一个方法是使用定义列表,但这不是一个很好的选择:

<dl>
    <dt>8:00</dt>
    <dd>Walk the dog!</dd>
    <dt>8:30</dt>
    <dd>Clean the car!</dd>
    <dt>9:20</dt>
    <dd>Rob the bank!</dd>
    <dt>9:21</dt>
    <dd>Run the dog!</dd>
    <dt>22:00</dt>
    <dd>Have a beer!</dd>
    <dt>22:05</dt>
    <!--<dd>Missing element???</dd>-->
</dl>

AFAIK,&lt;dt&gt; 后面必须跟一个或多个 &lt;dd&gt; 标记。但是最后一次(22:05)没有任何(非空)元素跟随它。

此外,从语义上给出的时间点应该与它之前的元素和之后的元素一样多,但是这种关系在这里也丢失了。

是否有任何其他 HTML 标记组合可能更适合此数据?

【问题讨论】:

  • 一张好的旧表也可以在这里做——毕竟,你有两个,一个是东西开始的时间,第二个是东西。如果在最后一个时间点之后没有任何反应,则可以将相应的填充单元格留空。 (在可访问性方面,您还可以在此处为屏幕阅读器用户放置文本,例如“仅此而已”或“一天的活动到此结束” - 并将其隐藏以供用户查看。)
  • @CBroe 我猜是这样,但问题是我不希望时间和任务在同一行(无论是语义上还是视觉上)——交错方面对我来说很重要。为此,我仍然可以使用表格,但是我必须将其所有单元格的一半留空,这似乎有点笨拙...
  • 但它们确实在语义上属于一起——或者它们怎么不属于?
  • @CBroe 时间只是时间点。我上面示例中的任务发生在它们之间的间隔内。它们的持续时间取决于它之前的时间(开始时间)和之后的时间(结束时间)。两者都不比另一个更重要。将开始时间放在同一行但将结束时间放在下一个任务的行上会在语义和视觉上造成烦人的不对称 IMO。
  • 我认为下一个任务/项目/节目的开始时间意味着当前任务的结束是相当普遍的做法——这种逻辑在世界各地的时间表中都使用,人们知道这是什么意思。试图在语义级别上不惜一切代价偏离清晰的结构可能不是一个好主意。如果你想让它看起来不同,那就另当别论了。

标签: html html-lists markup semantic-markup


【解决方案1】:

HTML 无法传达这一点。您必须明确说明持续时间/间隔(即使用自然语言)。

虽然the time element can be used for durations,持续时间没有作为开始/结束的具体日期。所以你可以传达遛狗需要 30 分钟,但不是说你从 8:00 到 8:30 遛狗。通过嵌套 time 元素,您可以(最多)暗示这一点。

非时间相关值的等价物是data element,但没有标准化格式,因此您无法传达一个值代表海深或海深间隔。

所以dl 可能看起来像这样:

<dl>
    <dt><time datetime="12h 39m"><time>09:21</time> to <time>22:00</time></time></dt>
    <dd>Run the dog!</dd>
    <dt><time datetime="5m"><time>22:00</time> to <time>22:05</time></time></dt>
    <dd>Have a beer!</dd>
</dl>

(这也可以让你跳过时间,例如,如果你没有真正从 09:21 到 22:00 跑狗。)

语义上较弱的变体(例如,如果您不想在同一元素中提供结束时间)将是这样的:

    <dt><time datetime="5m"><time>22:00</time></time></dt>

在这种情况下,您必须最后一次提供一个空的 dd 元素(或任何对您的情况有意义的元素)。

【讨论】:

  • 一个合理的方法,谢谢。同时我也得出了类似的结论,我同意最好的折衷方案是为每个列表项包括开始时间和结束时间。然后,每当一个项目的结束时间恰好与下一个项目的开始时间重合时,可以选择使用一些 CSS 和 Javascript 来隐藏两者之一——为了美观。 (另外,感谢您对我的问题从 -1 的分数进行投票,原因是我无法开始理解。)
猜你喜欢
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多