Warning:
This wiki has been archived and is now read-only.
ChangeProposals/tablist and tab states for menu and command elements
It is proposed that the functionality of the menu
and command
elements be extended to represent a tablist (tabstrip) of tab controls.
This change proposal is intended to address HTML WG Issue 134: "Provide tablist and tab states for menu and command elements respectively" as articulated in HTML WG Bug 10831: "Provide tablist and tab states for menu and command elements respectively".
- Editor: Gregory J. Rosmaita (oedipus at hicom dot net)
- Original proposal: Everett Zufelt / Invaluable Contributions: Jason Kiss
- Please address feedback to the HTML Working Group mailing list (public-html@w3.org).
Contents
Rationale
Most operating systems implement native support for tabbed interfaces and pass the relevant state information to users via accessibility APIs. In the default design pattern for tabbed interfaces as commonly implemented in most operating systems, only the currently selected tab control is focusable, while the remaining tab controls are not. Additionally, only the tab panel associated with the current tab control is visible and available through the accessibility tree. On the other hand, most web-based tabbed interfaces are typically implemented only visually using CSS. Important information such as which elements are serving as tab controls, which of those controls is currently selected, and what page content is associated with the currently selected control, is not programmatically determinable and remains unavailable to assistive technologies.
In order to make the identification and state of a web-based tabbed interface programatically determinable today goes beyond simple visual presentation using CSS and requires significant work on the part of the document creator:
- several WAI-ARIA roles (i.e.,
tablist
,tab
, andtabpanel
) and attributes (which include, at least,aria-selected
andaria-labelledby
) must be applied; - scripting and CSS must be used to dynamically update certain attribute values (e.g.,
aria-selected
andaria-hidden
) to ensure that keyboard interaction with the tab controls is intuitive and that only the currently selected tab panel is visible and present in the accessibility tree.
The work required today to build an accessible tabbed interface is needlessly complicated and constitutes an inferior means of providing such information and functionality when a native solution is readily available.
The HTML5 menu
element, along with the command
element, can currently represent a generic list of controls, a context menu, or toolbar. Since a group of tab controls effectively acts as a menu of commands for showing and hiding associated content tab panels, it is therefore proposed that the menu
and command
elements are well-suited to serve the purposes of a tabbed interface, and that their functionality be extended to represent a tablist of tab controls and to identify which of those tabs is selected.
Details
- Add a
tablist
state to themenu
element via thetype
attribute. - Add a
tab
state to thecommand
element via thetype
attribute. - Add a
tabpanel
attribute to thecommand
element. - Add a
selected
attribute tocommand
elements with@type=“tab”
.
When a menu
element's type
attribute is set to tablist
, the menu
represents a list of tabs. When a command
element's type
attribute is set to tab
, the command
represents a tab control. A command
element with state tab
must also have a tabpanel
attribute set, the value of which shall reference the id
of the element in the document that represents the content (tab panel) associated with that tab control. At any time, one, and only one, command
element with @type="tab"
will have @selected="selected"
, indicating the currently selected tab, and its associated tab panel content visible and available to the accessibility tree. All other tab panels must be hidden and unavailable.
User agents will:
- map the
menu
with statetablist
andcommand
elements with statetab
to the accessibility tree; - identify to the accessibility API which tab control is currently selected based on the
command
elements'selected
attribute; - set the first
command
element'sselected
attribute if none of thecommand
elements haveselected
set; - ensure that only the tab panel for the currently selected tab control appears in the accessibility tree;
- ensure that only the currently selected tab control is focusable;
- provide conventional keyboard commands (as commonly implemented for tabbed interfaces in most operating systems) for moving among the other tabs in the tablist;
- implement a default visual rendering for the tabbed interface.
Impact
Positive Effects
- Assistive technologies and accessibility APIs will be able to easily identify a tablist, the number of tabs it contains, and which tab is selected.
- Only the tabpanel associated with the currently selected tab will be available via the accessibility tree, thus reducing any potential confusion for assistive technologies regarding the state of the tabbed interface.
- Developers will be able to use native HTML elements in a much simpler way instead of being required to perform the extra work of adding numerous WAI-ARIA attributes and managing some of them dynamically via scripting.
- Developers will not be required to manage focus or keyboard interaction for tab controls.
Negative Effects
- User agents will have to implement these features, manage focus for
command
elements with a state oftab
withinmenu
elements with statetablist
, implement basic keyboard interaction, and provide a default rendering for tabbed interfaces.
Risks
- Without developers doing significant work to make a tabbed interface accessible using WAI-ARIA and additional scripting, the presence, state, and functionality expected of a tabbed interface will remain unavailable to assistive technologies.