What HTML elements are not tabbable even with tabindex?
即使指定了tabindex,是否有人拥有不可标签的HTML(HTML5)元素列表? (通过Tabbable,我的意思是他们可以通过反复按" tab "键来获得焦点。)
我们知道默认情况下有一些元素是可制表的,例如input或textarea。我们还知道有些元素只有在显式指定了tabindex时才是可Tabable的,例如div和span元素。
根据W3Schools,"在HTML5中,tabindex属性可以在任何HTML元素上使用"。但是,肯定有一些元素即使具有tabindex也不是可制表的。例如,param元素或head元素是可标签的就没有意义。我也不太认为option元素是可选项,但我不而且,我对map之类的东西甚至还不确定,这些东西可以包含可tabable元素,但通常它们本身都不是tabbable的。
有人可以给我列出所有即使有tabindex也无法获得焦点的元素的列表吗?
- 您是否测试过head元素实际上是否不可标签?
-
不,我还没有测试过。我只是举一个例子。
-
我刚刚在Chrome 17.x中进行了测试,发现head元素不可标签。 title或param都不是,但是option元素是可Tabable的(显然,仅当您提供tabindex时)。但这仍然不能回答我的问题。
-
这可能会有所帮助:stackoverflow.com/questions/3059203/tab-index-on-div
-
@BillyMoat那没什么帮助,我担心,它只是声明不能在html4中将div与tabindex一起使用,我的问题确实是关于html5的问题。 (在您发表评论之后,我编辑了问题正文以明确提及,尽管我对此感到不舒服,因为我以WHATWG风格认为没有html5之类的东西!)
-
w3.org/html/wg/wiki/ChangedAttributeTabindex
-
该链接未提供我的问题文本中未提供的任何信息。该链接的哪一部分回答了我的问题?
-
@Kidburla-如果显示了标题和标题,则可以将其显示为表格。参见jsfiddle.net/tbEPR。如果显示元素,则只能将它们制表为选项卡,因此无法显示的元素将不再是可制表的。
-
我发现即使显示object,也无法将其标签化。另外,在哪里可以找到可以显示的那些元素的列表?
-
PS,奇怪的是," title"东西似乎可以在jsFiddle中使用,但不能在独立页面中使用:S可能是因为jsFiddle将结果呈现在iframe中,从而改变了标题的可显示性。
-
"确实有某些元素是不可制表的",真的吗?
由于还没有人提出任何明确的列表,因此我在相当新的Chrome版本上进行了一些测试,并提出了以下根本无法列出的元素列表:
-
<base>
-
<basefont>
-
-
<head>
-
<link>
-
<meta>
-
<object>
-
<param>
-
<source>
-
<style>
-
<title>
-
<track>
不幸的是,由于我只花了几个小时尝试编写此列表,因此有一些警告:
未在Chrome以外的任何其他浏览器上进行测试
我跳过了大多数我认为可能会出现的元素(因为它们将显示正常的内容)
我没有尝试设置要显示的任何内容(除了<title>以外,如我的评论所述)
我最惊讶的是以下元素是可以表述的:
-
和<video>(惊讶的是,因为和<object>不是)
-
和<wbr>
-
<col>和<colgroup>
-
<frame>和<frameset>(尽管它们在特殊情况下还是比较特殊的,因为它们在HTML中始终不是技术上有效的元素)
-
<html>(从制表的angular来看,此和<body>之间几乎没有区别)
-
<optgroup>和<option>(尽管在它们之间进行制表并不能提供任何视觉指示-即选择框不会打开)
-
如答案本身所提到的那样,在答案中而不是问题中添加@Kidburlas注释,以使其他人更易于阅读:"PS, strangely, that"title" thing seems to work within jsFiddle, but not in a standalone page :S Maybe because jsFiddle is rendering the result in an iframe, which changes the displayability of the title. – Kidburla Jan 4 13 at 17:59"
HTML规范列出了可聚焦元素以及如何解释tabindex的条件。
-
元素的tabindex焦点标志已设置。
-
该元素正在被渲染,或者是表示嵌入内容的canvas元素的后代。
-
该元素或其任何祖先都不是惰性的。
-
元素未禁用。
定义依赖于要渲染的元素,使用CSS可以使任何元素都渲染。例如,可聚焦的<param>甚至<title>和<basefont>:
1 2 3 4 5 6 7 8
| <!DOCTYPE>
<title tabindex=0>Test
<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似乎对术语"正在渲染"的定义非常奇怪,该定义依赖于样式属性,因此包括没有视觉内容的元素。
-
确实,@ Kidburla在规范中没有禁止它的内容。它不需要-它可以将所有元素都一样地对待,并且可以工作。可以使用CSS添加内容。我已经用可聚焦的<param>更新了我的示例。
-
它并没有真正按预期工作。我不确定如何使用您给出的确切示例进行测试。但是,请尝试在末尾添加一些aabb,然后将params的tabindex更改为2。您将看到,制表符顺序直接从元素" aa"移至" bb ",并跳过了<param>共。
-
@Kidburla就是tabindex的工作方式,无论涉及的元素类型如何。非0 tabindex是一罐您不想打开的蠕虫。
-
这不是真的。 tabindex可以按您期望的那样工作。如果您的元素是某个我认为可以" \\ tabbable "的元素(例如input,a等),则制表符顺序将贯穿该元素。您可以自己尝试。