【问题标题】:Pager previous / next semantics寻呼机上一个/下一个语义
【发布时间】:2014-10-13 18:33:21
【问题描述】:

以下是我的cmets分页代码。

<ul class="pager">
  <li class="previous">
    <a href="#">Older Comments &larr;</a>
  </li>
  <li class="next">
    <a href="#">Newer Comments &rarr;</a>
  </li>
</ul>

我的问题是,如果我在 cmets 的第一页(并且较旧的 cmets 链接被隐藏),则 DOM 中会显示一个空列表项。

<li class="previous">
</li>
<li class="next">
  <a href="#">Newer Comments &rarr;</a>
</li>

在语义上,我应该删除空列表项 (1) 还是将其留空 (2)?

1/

<ul class="pager">
  <li class="next">
    <a href="#">Newer Comments &rarr;</a>
  </li>
</ul>

2/

<ul class="pager">
  <li class="previous">
  </li>
  <li class="next">
    <a href="#">Newer Comments &rarr;</a>
  </li>
</ul>

哪个选项在语义上是正确的?

【问题讨论】:

  • +1 看看我的回答! :)

标签: html pagination semantics


【解决方案1】:

我有一个更好的建议是使用禁用状态:

<ul class="pager">
  <li class="previous">
    <a href="#" class="disabled">Older Comments &larr;</a>
  </li>
  <li class="next">
    <a href="#">Newer Comments &rarr;</a>
  </li>
</ul>

尝试 2

如果你完全摆脱 CSS,我还有另一个想法。您可以使用&lt;button&gt;&lt;input type="button" /&gt; 代替&lt;a&gt; 标签,即使在Facebook 中,也使用相同的东西。因此,您可以设置 &lt;button&gt; 标记的样式,使其看起来像 &lt;a&gt; 标记并提供禁用状态,因为即使 JavaScript 和 CSS 都被禁用,这也可以工作。

<ul class="pager">
  <li class="previous">
    <button disabled="disabled">Older Comments &larr;</button>
  </li>
  <li class="next">
    <button>Newer Comments &rarr;</button>
  </li>
</ul>

&lt;button&gt; 设置为&lt;a&gt;

/* Just for this demo */
ul, li {margin: 0; padding: 0; list-style: none; display: inline-block;}

button {border: none; background: none; color: #00f; text-decoration: underline; cursor: pointer;}
button:disabled {color: #999; cursor: default;}
<ul class="pager">
  <li class="previous">
    <button disabled="disabled">Older Comments &larr;</button>
  </li>
  <li class="next">
    <button>Newer Comments &rarr;</button>
  </li>
</ul>

以上代码适用于所有浏览器,包括 Internet Explorer! :)

【讨论】:

  • 这似乎是最符合语义的方法。所有数据都在那里,但是您如何解释禁用的链接完全取决于前端。如果您完全通过后端删除该项目,则您无法选择样式以表明没有旧的 cmets 可供查看;但是使用这种方法,您可以选择隐藏(使用 CSS)或更改链接的样式。我认为 Praveen Kumar 的回答更好地将样式和标记从三个选项中分离出来。
  • @JosephMarikle 添加了更多详细信息。一种不同的方法。感谢您的输入。 :)
  • 这很好,但是如何将 URL 传递给上一个/下一个按钮?如果我理解正确,如果没有以前的 cmets (prev),那么我应该使用 button 而不是处于禁用状态的 a,并且 如果有更多 cmets (next ),那么我应该使用 a 而不是 button 和下一个 cmets 页面的 href 属性?请进一步解释。 MDN 说我不能将短语内容放在按钮中,因此我不能使用:&lt;button&gt;&lt;a&gt;&lt;/a&gt;&lt;/button&gt;
  • @RafcioKowalsky 您根本不需要使用&lt;a&gt;。我们可以使用onclick='location.href=""' 之类的东西。还有,为什么要在&lt;button&gt;里面使用&lt;a&gt;&lt;/a&gt;
  • 只是一个友好的反对意见,但我觉得disabled的语义不太清楚。使用语义正确的 HTML 并不直接供阅读页面的用户使用。如果您真的觉得您的用户无法理解缺少以前的链接,那么我认为您应该用一些文本以明确和语义的方式指出它,但我强烈质疑这是否有必要。另外,如果使用按钮,如果禁用 javascript 怎么办?
【解决方案2】:

这里简短而甜蜜.. :)

<style type="text/css">
a.disabled {
   pointer-events: none;
   cursor: default;
   color:#999;
}
</style>
<ul class="pager">
  <li class="previous">
    <a class="disabled" href="#">Older Comments &larr;</a>
  </li>
  <li class="next">
    <a href="#">Newer Comments &rarr;</a>
  </li>
</ul>

祝你好运!

【讨论】:

  • 简单问题。当 CSS 被禁用时会发生什么?我问这个是因为,这个问题与语义有关。
  • @PraveenKumar 我同意你的看法 :)
  • @Praveen Kumar 如果用户想要很棒的体验,他永远不会禁用 css。 :D
  • 留给用户哥们,万一公司或者电脑不允许或者不支持怎么办? @VarunaLex?
【解决方案3】:

我个人对此类事情的看法是不要对不存在的东西使用标记。没有禁用的按钮或链接或空列表项。当您在第一页时,没有上一页,因此上一页应该没有标记。如果您想为上一页链接留出空间,只需使用 CSS。

另外,如果我是一个坚持不懈的人,那么如果只有一个链接,就没有理由使用&lt;ul&gt;,当你有两个链接时,你可以考虑使用&lt;ol&gt;,因为有一个命令链接。

如果您能够更改第 1 页案例的模板,我建议只是一个简单的:

<div class="next">
    <a href="nextlink">next page</a>
</div>

另外,我建议不需要 javascript 进行导航。普通的html链接在这里是合适的。

【讨论】:

    【解决方案4】:

    如果你没有以前的链接,这很好。

    <ul class="pager">
      <li class="next">
        <a href="#">Newer Comments &rarr;</a>
      </li>
    </ul>
    

    人们为不存在的东西添加一些标记的唯一原因只是为了用户体验,这样用户就不会在他们期望的按钮/链接不存在时感到困惑不在那里了。这是禁用元素的唯一目的。

    笑话:经过多年的治疗,我终于明白,灰色的按钮没有任何作用,而不仅仅是为了嘲讽我。 开始

    不需要标记的示例:

    • 您在 CSS 中使用定位,
    • 显示禁用的按钮会很尴尬
      • 例如previous 按钮不应出现在演示文稿的第一张幻灯片上?
      • 例如continue 按钮应该/不能出现在视频游戏中,除非您有保存文件?

    【讨论】:

      【解决方案5】:

      您也可以在a 元素没有 href 的情况下实现此功能。这样它就不会呈现为链接。当它有 href 时,它很容易设置不同的样式。

      HTML5 speca 元素有以下说明:

      如果a 元素没有href 属性,则该元素表示一个占位符,用于放置链接(如果相关)。

      为了获得良好的语义,您还应该用nav 元素围绕您的组件,并在链接上使用rel="prev"rel="next"

      .pagination a:not([href]){
        color: lightgray;
      }
      <nav class="pagination">
        <ul>
          <li>
            <a rel="prev">Older Comments &larr;</a>
          </li>
          <li>
            <a href="#" rel="next">Newer Comments &rarr;</a>
          </li>
        </ul>
      </nav>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-28
        • 1970-01-01
        • 2016-04-08
        • 1970-01-01
        相关资源
        最近更新 更多