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
Select Table of Contents Accessibility support Keyboard Combobox Key / stateFunctionDown Arrow Up Arrow Space- Opens the listbox if it is not already displayed without moving focus or changing selection.
- DOM focus remains on the combobox.
SpaceCloses the listbox if it is displayed.
Listbox Key / stateFunctionDown Arrow Up ArrowMoves visual focus to the next/previous option.Home EndMoves visual focus to the first/last option.ESCCloses listboxEnter, SpaceSelects an option ARIA enhancements Internal ARIA that is managed by the component: ARIAUsagearia-labelledby="IDREF"References the accessible name of the combobox.aria-describedby="IDREF"References the accessible description and status messages of the combobox.aria-label="STRING"References the accessible name of the listbox.role="status", role="alert"When message and state prop change, the status message is announced.aria-expanded="BOOLEAN"Indicates that the listbox element is displayed/hidden.aria-controls="IDREF"Identifies the element that serves as the listbox.aria-hidden="true"If required attribute is set, the visible indicator is hidden from assistive technologies.aria-haspopup="listbox"Indicates that the combobox will open a listbox.aria-required="true"Indicates if the element is required. Development considerations Disabled state In general, avoid using the disabled state. Disabled elements are no longer focusable and may be missed by screen reader users. They can also confuse sighted users if the reason they are disabled is not made clear. Common do's and don'ts Do provide a clear, persistent label for what the selection controls. Do use meaningful option text so choices are understandable out of context. Do use the component state/message API so validation and status changes are announced. Do use clear error wording that helps users recover. Don't use a prompt option or adjacent text as a substitute for a field label. Don't use very short or ambiguous option labels when context is important. Don't use hide-label without an accessible name. Integration examples
Prompt option used instead of a label❌ Anti-pattern
<p-select name="model">
  <p-select-option value="">
    Select a model
  </p-select-option>
  <p-select-option value="carrera">
    911 Carrera
  </p-select-option>
  <p-select-option value="carrera-s">
    911 Carrera S
  </p-select-option>
</p-select>
✅ Recommended
<p-select label="Porsche model" name="model" description="Choose the model for your configuration.">
  <p-select-option value="carrera">
    911 Carrera
  </p-select-option>
  <p-select-option value="carrera-s">
    911 Carrera S
  </p-select-option>
</p-select>
Ambiguous option labels without field context❌ Anti-pattern
<p-select label="Model" name="model">
  <p-select-option value="base">
    Base
  </p-select-option>
  <p-select-option value="s">
    S
  </p-select-option>
</p-select>
✅ Recommended
<p-select label="Porsche 911 trim" name="model" description="Select the trim level for your configuration.">
  <p-select-option value="carrera">
    911 Carrera
  </p-select-option>
  <p-select-option value="carrera-s">
    911 Carrera S
  </p-select-option>
</p-select>
Hidden label without accessible name❌ Anti-pattern
<p-select name="model" hide-label="true">
  <p-select-option value="carrera">
    911 Carrera
  </p-select-option>
</p-select>
✅ Recommended
<p-select label="Porsche model" name="model" hide-label="true">
  <p-select-option value="carrera">
    911 Carrera
  </p-select-option>
</p-select>
Validation feedback via state and message API❌ Anti-pattern
<p-select label="Porsche model" name="model" aria-invalid="true" message="Required">
  <p-select-option value="carrera">
    911 Carrera
  </p-select-option>
  <p-select-option value="carrera-s">
    911 Carrera S
  </p-select-option>
</p-select>
✅ Recommended
<p-select label="Porsche model" name="model" state="error" message="Select a model to continue with your configuration.">
  <p-select-option value="carrera">
    911 Carrera
  </p-select-option>
  <p-select-option value="carrera-s">
    911 Carrera S
  </p-select-option>
</p-select>
Error state without recovery guidance❌ Anti-pattern
<p-select label="Porsche model" name="model" state="error" message="Invalid">
  <p-select-option value="carrera">
    911 Carrera
  </p-select-option>
  <p-select-option value="carrera-s">
    911 Carrera S
  </p-select-option>
</p-select>
✅ Recommended
<p-select label="Porsche model" name="model" required="true" state="error" message="Select a Porsche model. This field is required to continue.">
  <p-select-option value="carrera">
    911 Carrera
  </p-select-option>
  <p-select-option value="carrera-s">
    911 Carrera S
  </p-select-option>
</p-select>
Tests Automated TechnologySupportAXE-Core (WCAG 2.2 AA, Best-Practice)High-Contrast Mode (light/dark)Text-Zoom (200%) Manual TechnologySupportKeyboardScreen reader (VoiceOver, NVDA)✅ (Note: Though Safari supports ariaActiveDescendantElement the active option doesn't get announced in VoiceOver)
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%