容器元素的 Tabindex 顺序
Tabindex order on container element
假设我有两列(左列和右列)。每列包含链接。
如果我希望用户首先进入右列链接,右列中的所有链接都必须是 tabindex="0"
,而左列中的所有链接都必须是 tabindex="1"
吗?
或者我是否可以让所有链接都具有 tabindex="0"
,然后在右栏上设置 tabindex="0"
并在左栏上设置 tabindex="1"
,以便让用户选项卡先通过右栏?
我不太清楚嵌套制表符是如何工作的。
我在 http://jsfiddle.net/fhzjf4yg/ 上尝试了一个例子,但我似乎无法理解它是如何遍历选项卡索引的。如果有人可以解释排序的工作原理,那也会有所帮助!
不正确的答案,抱歉
一个页面上不应有多个 tabindex="0",这意味着它应该是唯一的。如果我告诉你去 tabindex="0" 而页面上有两个,你会去哪里?
而且没有嵌套,你基本上从 0 跳到 1 再到 2 等等
看看这里是如何解释tabindex的(Using tabindex - Web fundamentals)。来自 link:
tabindex="0": Inserts an element into the natural tab order.
tabindex="-1": Removes an element from the natural tab order, but the element can still be focused by calling its focus() method
tabindex="5": Any tabindex greater than 0 jumps the element to the front of the natural tab order.
最重要的是:
Using a tabindex greater than 0 is considered an anti-pattern.
基本上,如果你想从第二个列表开始,你可以为其中的元素分配一个 tabindex 为 1 并让其余元素没有 tabindex,它将 select 按照你尝试的顺序去做。
示例:
<div id="element1">First No tab index</div>
<div id="element2">Second No tab index</div>
<div id="element3" tabindex="1">Third: has tab index</div>
<div id="element3" tabindex="1">
将在 Tab 键时首先被 select 编辑,因为它建立了不同的顺序。
如果你这样赋值就完全一样了:
<div id="element1" tabindex="0">First No tab index</div>
<div id="element2" tabindex="0">Second No tab index</div>
<div id="element3" tabindex="1">Third: has tab index</div>
在我读到的多个地方都建议使用大于 0 的 tabindex 并不是一个好的方法。
编辑:另一种让屏幕 reader 阅读您所建议的方法是使用 CSS 重新排列 DOM 视觉顺序。您可以按照您想要阅读的顺序使用标记,并以不同的顺序显示它。使用 flexbox,您可以在您的情况下使用 flex-direction: row-reverse
,或者只需在您要阅读的第一个框上使用 order: 1;
,在第二个框上使用 order: 2;
。
从 DOM 订单中取出东西是不可访问的,因为它为所有类型的鼠标用户与键盘用户创造了完全不同的体验。
@molda 的答案被标记为 -2(截至今天查看),但被标记为正确答案。不知道这是怎么回事,但他的回答中有几个错误的评论。
You shouldn't have more than one tabindex="0" on a page
假设我有两列(左列和右列)。每列包含链接。
如果我希望用户首先进入右列链接,右列中的所有链接都必须是 tabindex="0"
,而左列中的所有链接都必须是 tabindex="1"
吗?
或者我是否可以让所有链接都具有 tabindex="0"
,然后在右栏上设置 tabindex="0"
并在左栏上设置 tabindex="1"
,以便让用户选项卡先通过右栏?
我不太清楚嵌套制表符是如何工作的。 我在 http://jsfiddle.net/fhzjf4yg/ 上尝试了一个例子,但我似乎无法理解它是如何遍历选项卡索引的。如果有人可以解释排序的工作原理,那也会有所帮助!
不正确的答案,抱歉
一个页面上不应有多个 tabindex="0",这意味着它应该是唯一的。如果我告诉你去 tabindex="0" 而页面上有两个,你会去哪里?
而且没有嵌套,你基本上从 0 跳到 1 再到 2 等等
看看这里是如何解释tabindex的(Using tabindex - Web fundamentals)。来自 link:
tabindex="0": Inserts an element into the natural tab order.
tabindex="-1": Removes an element from the natural tab order, but the element can still be focused by calling its focus() method
tabindex="5": Any tabindex greater than 0 jumps the element to the front of the natural tab order.
最重要的是:
Using a tabindex greater than 0 is considered an anti-pattern.
基本上,如果你想从第二个列表开始,你可以为其中的元素分配一个 tabindex 为 1 并让其余元素没有 tabindex,它将 select 按照你尝试的顺序去做。
示例:
<div id="element1">First No tab index</div>
<div id="element2">Second No tab index</div>
<div id="element3" tabindex="1">Third: has tab index</div>
<div id="element3" tabindex="1">
将在 Tab 键时首先被 select 编辑,因为它建立了不同的顺序。
如果你这样赋值就完全一样了:
<div id="element1" tabindex="0">First No tab index</div>
<div id="element2" tabindex="0">Second No tab index</div>
<div id="element3" tabindex="1">Third: has tab index</div>
在我读到的多个地方都建议使用大于 0 的 tabindex 并不是一个好的方法。
编辑:另一种让屏幕 reader 阅读您所建议的方法是使用 CSS 重新排列 DOM 视觉顺序。您可以按照您想要阅读的顺序使用标记,并以不同的顺序显示它。使用 flexbox,您可以在您的情况下使用 flex-direction: row-reverse
,或者只需在您要阅读的第一个框上使用 order: 1;
,在第二个框上使用 order: 2;
。
从 DOM 订单中取出东西是不可访问的,因为它为所有类型的鼠标用户与键盘用户创造了完全不同的体验。
@molda 的答案被标记为 -2(截至今天查看),但被标记为正确答案。不知道这是怎么回事,但他的回答中有几个错误的评论。
You shouldn't have more than one tabindex="0" on a page