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
Multi 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.
Listbox Key / stateFunctionDown Arrow Up ArrowMoves visual focus to the next/previous option.Home EndMoves visual focus to the first/last option.ESCCloses listboxEnterSelects an option ARIA enhancements External ARIA provided by the aria property: Use the aria property to pass supported attributes to the native control inside the shadow DOM. Prefer a visible label for the accessible name. Use aria-label when the label is hidden or missing, and aria-description for extra context that should not replace the name. Do not use aria-label to replace a different visible label (WCAG 2.5.3). ARIAUsagearia-labelDefines an accessible name when the visible label is insufficient or hidden; prefer a visible label for most cases.aria-descriptionProvides additional context for assistive technologies without replacing the accessible name. Internal ARIA that is managed by the component: ARIAUsagearia-labelledby="IDREF"On the listbox: references the field label as the accessible name.aria-describedby="IDREF"References the accessible description and status messages of the combobox.aria-label="STRING"On options without a value: fallback accessible name (Empty value).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-multiselectable="true"Indicates that more than one item from the current selectable descendants can be selected.aria-autocomplete="list"Indicates that user input effects results of listbox.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 pass extra labelling through the aria prop (aria-label, aria-description). 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. Don't use a prompt option or adjacent text as a substitute for a field label. Don't use hide-label without an accessible name. Don't add native aria-* attributes directly on the component host. Integration examples
ARIA on component host vs aria prop❌ Anti-pattern
<p-multi-select name="options" label="Optional extras" aria-label="Accessible name" aria-description="Additional context">
  <p-multi-select-option value="option-a">
    Option A
  </p-multi-select-option>
</p-multi-select>
✅ Recommended
<p-multi-select name="options" label="Optional extras" aria="{'aria-label': 'Accessible name', 'aria-description': 'Additional context'}">
  <p-multi-select-option value="option-a">
    Option A
  </p-multi-select-option>
</p-multi-select>
Prompt option used instead of a label❌ Anti-pattern
<p-multi-select name="features">
  <p-multi-select-option value="">
    Select features
  </p-multi-select-option>
  <p-multi-select-option value="sport">
    Sport Chrono Package
  </p-multi-select-option>
</p-multi-select>
✅ Recommended
<p-multi-select label="Optional features" name="features" description="Select all features for your configuration.">
  <p-multi-select-option value="sport">
    Sport Chrono Package
  </p-multi-select-option>
  <p-multi-select-option value="audio">
    BOSE Surround Sound
  </p-multi-select-option>
</p-multi-select>
Hidden label without accessible name❌ Anti-pattern
<p-multi-select name="features" hide-label="true">
  <p-multi-select-option value="sport">
    Sport Chrono Package
  </p-multi-select-option>
</p-multi-select>
✅ Recommended
<p-multi-select label="Optional features" name="features" hide-label="true">
  <p-multi-select-option value="sport">
    Sport Chrono Package
  </p-multi-select-option>
</p-multi-select>
Validation feedback via state and message API❌ Anti-pattern
<p-multi-select label="Optional features" name="features" aria-invalid="true" message="Required">
  <p-multi-select-option value="sport">
    Sport Chrono Package
  </p-multi-select-option>
</p-multi-select>
✅ Recommended
<p-multi-select label="Optional features" name="features" required="true" state="error" message="Select at least one feature to continue.">
  <p-multi-select-option value="sport">
    Sport Chrono Package
  </p-multi-select-option>
  <p-multi-select-option value="audio">
    BOSE Surround Sound
  </p-multi-select-option>
</p-multi-select>
Tests Automated TechnologySupportAXE-Core (WCAG 2.2 AA, Best-Practice)✅High-Contrast Mode (light/dark)✅Text-Zoom (200%)✅ Manual TechnologySupportKeyboard✅Screen reader (VoiceOver, NVDA)✅ (Note: Though Safari supports ariaActiveDescendantElement the active option doesn't get announced in VoiceOver)
v4.8.0v2v1
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%