Skip to main content
Version: v6

We detected an element functioning as a tabpanel missing a tabpanel role

We detected an element functioning as a tabpanel missing a tabpanel role — rule summary
FieldValue
Rule codeManual_Tabpanel_Role_Missing
WCAG conformance levelA
WCAG success criterion4.1.2 Name, Role, Value
Must be fixed at sourceNo

Description​

We detected content that appears to be controlled by tabs but is missing the required "tabpanel" role. Tabpanels are containers that display content associated with a selected tab. Without the proper role="tabpanel" attribute, assistive technologies cannot identify the relationship between tabs and their content, making the interface confusing for screen reader users. Each section of content controlled by a tab must have role="tabpanel" to create the proper semantic structure.

How to fix​

Add role="tabpanel" to each content container that is controlled by a tab. Also ensure proper association by adding an aria-labelledby attribute that references the ID of the corresponding tab.

<div role="tablist">
<button role="tab" id="sports-tab" aria-selected="true" aria-controls="sports-panel">Sports</button>
<button role="tab" id="news-tab" aria-selected="false" aria-controls="news-panel">News</button>
<button role="tab" id="weather-tab" aria-selected="false" aria-controls="weather-panel">Weather</button>
</div>

<div id="sports-panel" role="tabpanel" aria-labelledby="sports-tab">
Sports content goes here
</div>
<div id="news-panel" role="tabpanel" aria-labelledby="news-tab" hidden>
News content goes here
</div>
<div id="weather-panel" role="tabpanel" aria-labelledby="weather-tab" hidden>
Weather content goes here
</div>

Ensure that only the active tabpanel is visible at any time, with others hidden using the hidden attribute or CSS.