Experimental Example of Tabs with Action Buttons
+ +About This Experimental Example
+ +
+ This is an experimental implementation of the draft specification of the aria-actions attribute.
+ The aria-actions
property enables an element to reference another interactive element that can be activated to perform an action on the referencing element.
+ In this example, each tab element references a menu button that opens a menu of actions that apply to the referencing tab.
+ The relationship provided by aria-actions
enables an assistive technology to both communicate the availability of the action button and provide a command for activating the button while focus is on the tab.
+
+ The below example demonstrates a tabs widget that implements the Tabs Pattern. + In this example, a panel is displayed when users activate its tab with either Space, Enter, or a mouse click. + So, for keyboard users, activating a tab requires two steps: 1) focus the tab, and 2) activate the tab. + This two-step process is referred to as manual activation. + Manual activation of tabs is recommended unless panels can be displayed instantly, i.e., all the panel content is present in the DOM. + For additional guidance, see Deciding When to Make Selection Automatically Follow Focus. +
+
+ This example also demonstrates how to provide buttons that provide contextual actions for the tab.
+ Each tab has an associated context actions menu button.
+ The menu button is referenced by aria-actions
, which enables it to be activated by an assistive technology user while focus is on the tab.
+
Similar examples include:
+-
+
- Example of Tabs with Manual Activation: A tabs widget where users activate a tab and display its panel by pressing Space or Enter. +
- Example of Tabs with Automatic Activation: A tabs widget where tabs are automatically activated and their panel is displayed when they receive focus. +
Experimental Example
+Interesting Sharks
++ The nurse + shark (Ginglymostoma cirratum) is an + elasmobranch fish in the family Ginglymostomatidae. The conservation status of + the nurse shark is globally assessed as Vulnerable in the IUCN + List of Threatened Species. They are considered to be a species + of least concern in the United States and in The Bahamas, but + considered to be near threatened in the western Atlantic Ocean + because of their vulnerable status in South America and reported + threats throughout many areas of Central America and the + Caribbean. They are directly targeted in some fisheries and + considered by-catch in others. +
++ The basking + shark (Cetorhinus maximus) is the + second-largest living shark and fish, after the whale shark. It + is one of three plankton-eating shark species, along with the + whale shark and megamouth shark. Typically, basking sharks reach + 7.9 m (26 ft) in length. It is usually greyish-brown, with + mottled skin, with the inside of the mouth being white in + colour. The caudal fin has a strong lateral keel and a crescent + shape. Other common names include bone shark, elephant shark, + sailfish, and sunfish. In Orkney, it is called hoe-mother + (contracted homer), meaning "the mother of the picked dogfish". +
++ The whale + shark (Rhincodon typus) is a + slow-moving, filter-feeding carpet shark and the largest known + extant fish species. The largest confirmed individual had a + length of 18.8 m (61.7 ft). The whale shark holds many records + for size in the animal kingdom, most notably being by far the + most massive living non-cetacean animal. It is the sole member + of the genus Rhincodon and the only + extant member of the family + Rhincodontidae, which belongs to the + subclass Elasmobranchii in the class + Chondrichthyes. Before 1984 it was + classified as Rhiniodon into Rhinodontidae. +
++ The goblin + shark (Mitsukurina owstoni) is a rare + species of deep-sea shark. Sometimes called a "living fossil", + it is the only extant representative of the family + Mitsukurinidae, a lineage some 125 + million years old. This pink-skinned animal has a distinctive + profile with an elongated, flat snout, and highly protrusible + jaws containing prominent nail-like teeth. It is usually between + 3 and 4 m (10 and 13 ft) long when mature, though it can grow + considerably larger such as one captured in 2000 that is thought + to have measured 6 m (20 ft). Goblin sharks are benthopelagic + creatures that inhabit upper continental slopes, submarine + canyons, and seamounts throughout the world at depths greater + than 100 m (330 ft), with adults found deeper than juveniles. + Some researchers believe that these sharks could also dive to + depths of up to 1,300 m (4,270 ft), for short periods of time. +
+Accessibility Features
+-
+
-
+ To ensure people who rely on browser or operating system high contrast settings can both distinguish the active (selected) tab from other tabs and perceive keyboard focus:
+
-
+
- + The active tab has a 2 pixel border on its left and right sides and a 4 pixel border on top, while the names of inactive tabs have 1 pixel borders. + The active tab is also 4 pixels higher than the inactive tabs. + +
-
+ The focus ring is drawn with a CSS border on a child
span
element of the tab element. + This focus span is separated from the tab border by 2 pixels of space to ensure focus and selection are separately perceivable. + Note that when a tab element is focused, the outline of the tab element itself is set to 0 so that only one focus ring is displayed. +
+ -
+ Because transparent borders are visible on some systems when high contrast settings are enabled, only the focused
span
element has a visible border. + Whenspan
elements are not indicating focus, they have a 0-width border and additional padding equal in width to the border that is used to indicate focus. +
+
+ -
+ Note that since the first element in every
tabpanel
is a focusable element (i.e., a link), thetabpanel
is not included in the page Tab sequence. + To make it easy for screen reader users to navigate from a tab to the beginning of content in the activetabpanel
, it is recommended that alltabpanel
elements in a tab set are focusable if there are any panels in the set that contain content where the first element in the panel is not focusable. +
+ - + To ensure the tab content remains visible when the screen is magnified, the width of the tabs and tab panels are defined using a percentage of the screen width. As the page is magnified the height of the tab increases and the tab content re-flows to the new dimensions of the tab. + +
Keyboard Support
+Tabs
+Key | +Function | +
---|---|
Tab | +
+
|
+
Shift + Tab | +
+
|
+
Enter Space |
+ When a tab has focus, activates the tab, causing its associated panel to be displayed. | +
Right Arrow | +
+ When a tab or its associated menu button have focus:
+
|
+
Left Arrow | +
+ When a tab or its associated menu button have focus:
+
|
+
Home | +When a tab has focus, moves focus to the first tab . |
+
End | +When a tab has focus, moves focus to the last tab . |
+
Menu Button
+
+ Keyboard support for each tab
’s associated menu button is documented in Menu Button Pattern.
+
Role, Property, State, and Tabindex Attributes
+Role | +Attribute | +Element | +Usage | +
---|---|---|---|
+ tablist
+ |
+ + |
+ div
+ |
+ Indicates that the element serves as a container for a set of tabs. | +
+ |
+ aria-labelledby="ID_REFERENCE"
+ |
+
+ div
+ |
+ Provides a label that describes the purpose of the set of tabs. | +
+ tab
+ |
+ + |
+ button
+ |
+
+
|
+
+ |
+ aria-selected="true"
+ |
+
+ button
+ |
+
+
|
+
+ |
+ aria-selected="false"
+ |
+
+ button
+ |
+
+
|
+
+ |
+ tabindex="-1"
+ |
+
+ button
+ |
+
+
|
+
+ |
+ aria-controls="ID_REFERENCE"
+ |
+
+ button
+ |
+ Refers to the tabpanel element associated with the tab. |
+
+ |
+ aria-actions="ID_REFERENCE"
+ |
+
+ button
+ |
+ Refers to the context actions menu button element associated with the tab. |
+
+ tabpanel
+ |
+ + |
+ div
+ |
+
+
|
+
+ |
+ aria-labelledby="ID_REFERENCE"
+ |
+
+ div
+ |
+
+
|
+
JavaScript and CSS Source Code
+-
+
- CSS: tabs-actions.css +
- Javascript: tabs-actions.js +
- Javascript: menu-button-actions.js +
HTML Source Code
+To copy the following HTML code, please open it in CodePen.
+ +
+
+
+