On Mon, Jan 30, 2012 at 1:54 PM, Ian Hickson <i...@hixie.ch> wrote: > On Tue, 8 Nov 2011, Ojan Vafai wrote: >> We keep running into the use case where the physical position matters >> for the tab order. The problem with just setting tabIndex (or CSS3 >> tab-index) is that it takes the thing out of the natural order. >> >> This problem comes up in a lot of places (e.g. absolute positioning). >> It's recently come up for CSS flexboxes, e.g. if you set flex-order or a >> reverse flow, then the tabindex still being in document order is often >> not what the author wants >> (https://bugs.webkit.org/show_bug.cgi?id=62664). >> >> <button tabindex=0>A</button> >> <div tabindex=2 tabindexscope> >> <button tabindex=2>C</button> >> <button tabindex=1>B</button> >> </div> >> <button tabindex=1>D</button> >> >> The order for the tabbing would be A-D-B-C. > > The spec says that the order when you omit tabindex (or set it to 0) > should follow platform conventions. If the platform convention is to make > the tab order follow the visual position, then that's what the browser > should do. > > Surely that would be better than having authors manage local regions for > tabindex, especially since the positioning depends on the CSS level, not > the HTML level, and thus trying to manage the tabindex in the HTML would > be a layering violation anyway.
If you are attempting to match the tab order to the position of an element, you are correct. In this situation, the tab order of the group itself should be controlled by the 'nav-index' property alongside the positioning code. However, *within* a group of controls, the relative order can want to be scoped without reference to CSS. This can happen because the group is being positioned with CSS (and thus the appropriate tab-index is unpredictable), because the group may be generated into multiple pages with different tab-index'd items elsewhere in the page, or just because the dev would like to write their tab-indexes without having to renumber everything every time they move the HTML around in the page. Scoping a tab-index is thus a property that can appropriately belong to the HTML level, just as much as tab-index itself does. ~TJ