使用css重新排序内容以显示以支持可访问性

时间:2013-09-10 06:45:43

标签: html css accessibility

考虑以下html布局。出于可访问性和其他一些原因,我更喜欢菜单位于源代码的第三个位置。 但显然菜单应该在文章之前出现在顶部。 我有什么选择? (支持IE8及以上版本)

<html>
 <body>
  <article>The article ...</article>
  <aside>something aside</aside>
  <nav>the menu</nav>
 </body>
</html>

目前我使用“display:table”非常不喜欢我的同事(http://jsfiddle.net/Dqzyj/):

<html>
 <body style="display:table;">
  <article style="display:table-row-group;">The article ...</article>
  <aside style="display:table-row-group;">something aside</aside>
  <nav style="display:table-header-group;">the menu</nav>
 </body>
</html>

2 个答案:

答案 0 :(得分:0)

从可访问性的角度来看,我不建议重新排序这样的元素。

我们曾采用这种方法,虽然屏幕阅读器用户可能会从该订单中受益(稍微),但也有人依赖键盘但可以看到屏幕(例如行动障碍,人们可能会使用Stephen Hawking式交换机访问)。 Video example

语音识别也会受到这种方式重新排序的负面影响,假设页面有足够的内容来引导滚动。

当他们(有效地)在页面中切换时,焦点似乎会跳过可见导航,使其显示无法访问。如果他们通过足够的标签找到导航,那么它会跳回页面,这非常迷惑。例如,尝试使用Lakeland page标签来查找顶部导航。

更好的解决方案是使用导航上方的跳过链接转到内容: How to use skip links

注意:这是一篇旧文章,所以演示了“跳到导航”链接,但原理是一样的。

如果“其他原因”(搜索引擎优化可能是?)意味着您仍然希望采用导航最后一种方法,那么您能说出为什么不喜欢显示表方法吗?

现代方法是使用弹性框和排序,但在IE10之前不支持。绝对定位可能有效,但要小心缩放页面或文本大小不会破坏它。在提出解决方案之前,我需要更多关于这个问题的信息。

答案 1 :(得分:-1)

<html>
    <body style="display:table;">
        <article style="display:table-row-group;">The article ...</article>
        <aside style="display:table-row-group;">something aside</aside>
        <nav style="display:table-row-group;">the menu</nav>
    </body>
</html>

将导航样式从table-header-group更改为table-row-grouptable-header-group会导致代码向上移动。