【问题标题】:What is a valid way to make a row on content clickable in terms of accessibility?什么是在可访问性方面使内容可点击的有效方法?
【发布时间】:2019-04-22 20:00:25
【问题描述】:

我正在尝试制作一个最容易被描述为可访问的可点击引导媒体对象列表的小部件。 https://getbootstrap.com/docs/4.3/components/media-object/#media-list原代码将js点击事件绑定到列表项元素本身。

我的第一个想法是将列表项元素中的所有内容包装在一个按钮元素中,并将我的点击事件附加到按钮上。这为列表项提供了焦点,并按照我的意愿行事。但后来我读到,在按钮标签中包含 div 或 h 标签是一种不好的做法。

<ul class="list-unstyled">
  <li class="media" onclick="myFunction">
    <img src="..." class="mr-3" alt="...">
    <div class="media-body">
      <h5 class="mt-0 mb-1">List-based media object</h5>
      More info
    </div>
  </li>
</ul>

VS

<ul class="list-unstyled">
  <li>
    <button type="button" class="media" onclick="myFunction" disabled="isDisabled()">
      <img src="..." class="mr-3" alt="...">
      <div class="media-body">
        <h5 class="mt-0 mb-1">List-based media object</h5>
      More info
      </div>
    </button>
  </li>
</ul>

所以此时还有另一种方法可以使用语义 html 使整个列表项行可点击,或者是添加角色 = 按钮、空格键的 onkeypress 事件和输入、自定义活动/禁用类和设置的最佳选择tabIndex 到 li 标签?

编辑:也许另一种思考设计的方式是使用此组件https://getbootstrap.com/docs/4.3/components/list-group/#links-and-buttons。基本上,我要维护的设计是一堆可点击的行,其中每行包含一个图像和几行短文本。

【问题讨论】:

    标签: html bootstrap-4 accessibility clickable


    【解决方案1】:

    我没有看到在按钮或链接中设置标题的意义。如果你有一个标题,它应该代表页面结构。

    您可以通过将“更多信息”元素包装在button 或链接中来轻松解决您的“问题”。键盘用户将能够聚焦按钮,鼠标用户将能够在按钮或单击整个列表元素包装器之间进行选择。

    <ul class="list-unstyled">
      <li class="media" onclick="myFunction">
        <img src="..." class="mr-3" alt="...">
        <div class="media-body">
          <h5 class="mt-0 mb-1">List-based media object</h5>
          <button title="More info about List-based media object">More info</button>
        </div>
      </li>
    </ul>
    

    【讨论】:

    • 重点是尽可能保持可点击行的原始设计。我同意按钮内的标题很奇怪,可能会更改为具有不同样式的跨度。但是对于您的解决方案,也许我所要求的是将方形钉子砸入圆孔的优雅方法。我是新来的可访问性方面的思考,你可能是正确的,因为设计本身就是不可访问的,无论它如何打扮。
    • @Dookie67 仔细看,该行仍然是可点击的;) 您可以完美地让一行鼠标点击,同时以不同的方式处理键盘可访问性。
    【解决方案2】:

    这完全取决于您希望遵循语义开发规则的程度以及您是否计划支持为盲人和视障人士启用的页面。

    &lt;a&gt; 应始终用于从一个页面导航到另一个页面。

    &lt;button&gt;&lt;input type="button&gt; 只能用于提交表单或用于屏幕上的活动,例如打开和关闭对话框等。

    如果你真的想遵守规则,那么允许用户点击按钮、输入字段和选择下拉菜单以外的元素是不受欢迎的。如果您使用正确的元素来完成工作,那些视障人士使用的屏幕阅读器会做得更好。

    此外,不要在没有充分理由的情况下将 DOM 放入元素中。它只会增加混乱。

    【讨论】:

    • 这就是我在两者之间阅读的内容,但这引发了另一个困境,可能与原始问题相去甚远。单击操作将根据上下文打开一个对话框或导航到新页面。 (主要是如果另一个页面存在)我认为一个按钮更合适,因为那里有额外的逻辑,但更常见的操作是导航到一个新页面,这反过来又让我怀疑我的按钮选择。
    • 在说了我所做的之后,我会补充一点,谷歌甚至不遵循 gmail 的这条规则。但如果是我,我要么在所有情况下为您的代码使用&lt;a&gt; 标签,要么尝试在呈现之前确定页面是否存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多