哪些HTML元素即使使用tabindex也不能进行标签切换?

7
有没有人有一个HTML(HTML5)元素列表,即使指定了tabindex,它们也不能通过按“tab”键重复获得焦点? (可获得焦点是指它们可以通过重复按“tab”键来接收焦点。)
我们知道有些元素默认情况下是可获得焦点的,例如inputtextarea。 我们还知道,只有在明确指定tabindex的情况下,才有一些元素是可获得焦点的,例如divspan元素。
根据W3Schools的说法,“在HTML5中,tabindex属性可用于任何HTML元素”。 但是,肯定有一些元素即使具有tabindex,也不可获得焦点。 例如,对于param元素可获得焦点就毫无意义,或者head元素。 我也不确定option元素是否可获得焦点。 对于像map这样可以包含可获得焦点元素但通常本身不可获得焦点的事情,我甚至不太确定。
是否能给我列出所有那些即使有tabindex也永远无法获得焦点的元素的列表?

1
你测试过头元素是否确实不可切换吗? - Dennis Jaheruddin
1
我刚在Chrome 17.x中进行了测试,并发现head元素不可通过Tab聚焦。titleparam也不能,但是option元素是可聚焦的(前提是你提供了tabindex)。然而这仍然没有回答我的问题。 - Adam Burley
这个链接并未提供我问题中没有的信息。那个链接的哪一部分回答了我的问题? - Adam Burley
我发现即使显示了,object也不能被制表符访问。另外,我在哪里可以找到那些可以被显示的元素列表? - Adam Burley
"肯定有一些元素是无法进行制表的" 真的吗? - feeela
显示剩余6条评论
2个回答

8

HTML规范列出了元素成为焦点的条件,以及如何解释tabindex属性

  • 元素的tabindex焦点标志已设置。
  • 该元素正在呈现或是嵌入式内容的canvas元素的后代。
  • 该元素及其任何祖先都不是惰性的。
  • 该元素未被禁用。

定义依赖于元素被呈现,而使用CSS可以使任何元素被呈现。例如,一个可聚焦的<param>甚至是<title><basefont>

<!DOCTYPE>
<title tabindex=0>Test</title>
<basefont tabindex=0>
<style>
head, title {display:block}
basefont, param {content: url(image.png);}
</style>
<object><param tabindex=0></object>

顺便说一句:忽略W3Schools-通常那不是一个可靠/权威的来源。


你好。首先,总的来说,我同意你对W3Schools的看法,并且犹豫是否要参考它们。但这是我能找到的最简单的引用,它总结了我所知道的关于tabindex属性适用性的真相。感谢您提供的链接。然而,我在其中没有看到任何特别排除<param>等元素可被选中的内容。特别地,WHATWG似乎有一个相当奇怪的“被呈现”的术语定义,依赖于样式属性,因此包括没有任何视觉内容的元素。 - Adam Burley
@Kidburla 确实,规范中没有禁止这样做。它不需要这样做 - 它可以只是将所有元素视为相同的,并且它可以正常工作。内容可以通过 CSS 添加。我已经使用可聚焦的 <param> 更新了我的示例。 - Kornel
它并没有像预期的那样工作。我不确定如何使用你给出的确切示例进行测试。但是尝试在末尾添加一点 <a tabindex=1>aa</a><a tabindex=3>bb</a>,然后将参数的tabindex更改为2。您会发现,选项卡顺序直接从元素“aa”移动到“bb”,跳过了<param> - Adam Burley
@Kidburla 这就是 tabindex 的工作方式,无论涉及的元素类型如何。非0的 tabindex 是一个你不想打开的麻烦事。 - Kornel
这不是真的。tabindex 的工作方式与您预期的相同。如果您的元素是我认为“可制表”的某些元素(例如 inputa 等),则制表顺序将通过该元素进行。您可以自己尝试一下。 - Adam Burley

8

由于还没有任何一份权威的清单,我在较新版本的Chrome上进行了一些测试,并列出了以下完全不能使用Tab键访问的元素清单:

  • <base>
  • <basefont>
  • <embed>
  • <head>
  • <link>
  • <meta>
  • <object>
  • <param>
  • <source>
  • <style>
  • <title>
  • <track>

不幸的是,由于我只花了几个小时来编写这个列表,它有一些缺陷:

  1. 没有在除Chrome之外的任何浏览器上进行测试
  2. 我跳过了大多数我认为可能可用Tab键访问的元素(因为它们将有正常显示的内容)
  3. 我没有尝试设置这些元素中的任何一个进行显示(除了我的注释中提到的<title>

以下元素令我感到最惊讶的是它们可以使用Tab键访问:

  • <audio><video>(令人惊讶,因为<embed><object>不能)
  • <br><wbr>
  • <col><colgroup>
  • <frame><frameset>(尽管它们更像是特殊情况,因为它们在HTML中并不是正式的元素)
  • <html>(从按Tab键的角度来看,它与<body>几乎没有区别)
  • <optgroup><option>(尽管按Tab键进入它们不会给出任何视觉指示-即选择框不会打开)

将@Kidburla的评论添加到答案中,而不是问题中,以使其他人更容易阅读,因为它在答案本身中被引用:“PS,奇怪的是,这个“标题”在jsFiddle中似乎有效,但在独立页面中却无效:S也许是因为jsFiddle在iframe中呈现结果,这改变了标题的可显示性。- Kidburla Jan 4 '13 at 17:59" - redfox05

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接