Skip to contentPorsche Design System
You are currently viewing an earlier release of the Porsche Design System.Switch to the latest Porsche Design System documentation.
SearchGitHub repository of Porsche Design SystemOpen settings sidebar
Tabs Bar Table of Contents Accessibility support Keyboard Tabs Bar as a tabbed interface Key / stateFunctionTab- Moves focus to the active tab.
- When the tab list contains the focus, moves focus to the next element in the tab sequence, which is the tabpanel element.
Right Arrow, Left Arrow- Moves focus to the next tab.
- Activates the newly focused tab.
- If focus is on the last tab, moves focus to the first tab.
Home, End- Moves focus to the first/last tab and activates it.
Tabs Bar as link list Key / stateFunctionTab, Shift-TabMoves focus to next (or previous) focusable element.EnterActivates the link. ARIA enhancements External ARIA provided by the aria property: ARIAUsagearia-label="STRING"Defines a string value that labels the tablist when used as a tabbed interface.aria-description="STRING"Defines a string value that adds a more detailed description of the tablist. The aria property applies only when the component is used as a tabbed interface with <button> children. It is not applied when the component is used as a link list with <a> children. Internal ARIA that is managed by the component: ARIAUsagerole="tablist"Indicates that the element serves as a container for a set of tabs.role="tab"Indicates the button serves as a tab control.aria-selected="BOOLEAN"Indicates whether the tab is selected and whether its associated tabpanel is visible. Development considerations Labelling When multiple tab bars appear on the same page, or when the purpose of the tabs is not clear from the visible tab labels alone, provide a descriptive accessible name for the tablist using the aria property, e.g.: <p-tabs-bar aria="{ 'aria-label': 'Some label for the tablist', 'aria-description': 'Some description for the tablist' }">. ARIA enhancements if used as a tabbed interface The p-tabs-bar component is detached from the content (tabpanel) which belongs to the active tab. To be truly accessible you need to provide additional ARIA attributes, because every tab (button) needs an aria-controls attribute which points to the corresponding id of the tabpanel. The content placeholder needs the role="tabpanel" and the attribute aria-labelledby which points to the unique id of the corresponding tab (button). You must also take care of the focus handling of the tabpanel. Therefore, the active tab panel must have a tabindex="0" to receive keyboard focus and the focus indicator must be styled accordingly. Use the provided focus style like this:
<p-tabs-bar aria="{ 'aria-label': 'Some label for the tablist', 'aria-description': 'Some description for the tablist' }" active-tab-index="0" > <button type="button" id="tab-item-0" aria-controls="tab-panel-0">Tab One</button> <button type="button" id="tab-item-1" aria-controls="tab-panel-1">Tab Two</button> <button type="button" id="tab-item-2" aria-controls="tab-panel-2">Tab Three</button> </p-tabs-bar> <div id="tab-panel-0" role="tabpanel" tabindex="0" aria-labelledby="tab-item-0"> <p-text>Your content of Tab 1</p-text> </div> <div id="tab-panel-1" role="tabpanel" hidden tabindex="-1" aria-labelledby="tab-item-1"> <p-text>Your content of Tab 2</p-text> </div> <div id="tab-panel-2" role="tabpanel" hidden tabindex="-1" aria-labelledby="tab-item-2"> <p-text>Your content of Tab 3</p-text> </div>
p-tabs-bar ~ [tabindex='0'][role='tabpanel'] { @include pds-focus; }
ARIA enhancements if used as a link list Route based navigation If the p-tabs-bar is used as a link list (navigation context), the semantics of that UI component changes completely - from a tabbed interface where content changes happen on-site to a list of links where content changes are route-based. Therefore, additional ARIA attributes must not be provided for tab identification. The p-tabs-bar component manages this also internally. To enhance accessibility even further, wrap the p-tabs-bar in a <nav> element with an aria-label attribute. Additionally, an aria-current="page" attribute should be provided to the active link.
<nav aria-label="Label for the navigation"> <p-tabs-bar> <a href="https://porsche.com/page-1" aria-current="page">Page One</a> <a href="https://porsche.com/page-2">Page Two</a> <a href="https://porsche.com/page-3">Page Three</a> </p-tabs-bar> </nav>
In-page jump navigation If the p-tabs-bar is used as an in-page jump navigation, you should follow the same rules as for the route-based variant except that aria-current="page" should not be used. Tests Automated TechnologySupportAXE-Core (WCAG 2.2 AA, Best-Practice)High-Contrast Mode (light/dark)Text-Zoom (200%) Manual TechnologySupportKeyboardScreen reader (VoiceOver, NVDA)
Global settingsColor SchemeAll color tokens use the light-dark() CSS function. Set the theme via the CSS color-scheme property: light for light mode, dark for dark mode, or light dark to follow the user's system preference.LightDarkLight DarkDirectionThe dir global attribute in HTML changes the direction of text and other content within an element. It's most often used on the <html> tag to set the entire page's direction, which is crucial for supporting languages that are written from right to left (RTL), such as Arabic and Hebrew. For example, using <html dir="rtl"> makes the entire page display from right to left, adjusting the layout and text flow accordingly.LTR (left-to-right)RTL (right-to-left)Text ZoomTo ensure accessibility and comply with WCAG 2.2 AA standards, it is mandatory for web content to support text resizing up to at least 200% without loss of content or functionality. Using relative units like rem is a best practice for achieving this, as they allow the text to scale uniformly based on the user's browser settings.100%130%150%200%