Loading...
Loading...
How to make UI5 Web Components applications accessible. Covers accessibility APIs (accessibleName, accessibleNameRef, accessibleDescription, accessibleRole, accessibilityAttributes), label-input relationships, invisible messaging, keyboard handling, high contrast themes, and screen reader support. Use when the user asks about ARIA attributes, screen readers, keyboard navigation, accessibility properties, or making their app accessible.
npx skill4agent add ui5/webcomponents accessibilityui5-comboboxrole="combobox"disabledreadonlyrequiredcheckedaria-disabledaria-readonlyaria-requiredaria-checkedaria-label<ui5-button icon="sap-icon://edit" accessible-name="Edit document"></ui5-button>
<ui5-combobox accessible-name="Select country">
<ui5-cb-item text="Germany"></ui5-cb-item>
</ui5-combobox>accessibleName<ui5-label>aria-labelledby<ui5-label id="lblName">Full name</ui5-label>
<ui5-input accessible-name-ref="lblName"></ui5-input>
<!-- Multiple refs -->
<span id="prefix">Shipping</span>
<ui5-label id="lblAddr">Address</ui5-label>
<ui5-input accessible-name-ref="prefix lblAddr"></ui5-input>accessibleNameRefaccessibleNamearia-description<ui5-input accessible-name="Password"
accessible-description="Must be at least 8 characters">
</ui5-input>
<!-- Or reference an existing element -->
<p id="hint">Must be at least 8 characters</p>
<ui5-input accessible-name="Password"
accessible-description-ref="hint">
</ui5-input><ui5-panel accessible-role="Complementary">...</ui5-panel>
<ui5-list accessible-role="Menu">...</ui5-list>
<ui5-button accessible-role="Link">Navigate</ui5-button>aria-expandedaria-haspopuparia-controls<ui5-button id="menuBtn">Open Menu</ui5-button>
<ui5-menu id="menu">...</ui5-menu>
<script>
document.getElementById("menuBtn").accessibilityAttributes = {
expanded: false,
hasPopup: "menu",
controls: "menu"
};
</script>ui5-shellbar<label for="...">for<ui5-label for="nameInput" required show-colon>Name</ui5-label>
<ui5-input id="nameInput" required></ui5-input>forrequiredrequiredaria-requiredaccessibleNameRef<ui5-label id="dateLabel">Date of birth</ui5-label>
<ui5-date-picker accessible-name-ref="dateLabel"></ui5-date-picker>levelui5-titleheader-levelui5-panel<ui5-title level="H1">Page Title</ui5-title>
<ui5-panel header-text="Settings" header-level="H2">
<ui5-title level="H3">General</ui5-title>
</ui5-panel>ui5-iconmode| Mode | Behavior | Use when |
|---|---|---|
| | Icon conveys meaning (needs |
| | Icon is clickable |
| | Icon is purely visual, no meaning |
<!-- Meaningful icon — needs accessible-name -->
<ui5-icon name="sap-icon://warning" mode="Image"
accessible-name="Warning"></ui5-icon>
<!-- Clickable icon -->
<ui5-icon name="sap-icon://delete" mode="Interactive"
accessible-name="Delete item"></ui5-icon>
<!-- Decorative icon — hidden from screen readers -->
<ui5-icon name="sap-icon://favorite" mode="Decorative"></ui5-icon>accessible-nameImageInteractiveInvisibleMessageimport announce from "@ui5/webcomponents-base/dist/util/InvisibleMessage.js";
import InvisibleMessageMode from "@ui5/webcomponents-base/dist/types/InvisibleMessageMode.js";
// Polite: announced at the next pause (e.g., search results)
announce("5 results found", InvisibleMessageMode.Polite);
// Assertive: announced immediately (e.g., errors)
announce("Invalid email address", InvisibleMessageMode.Assertive);tooltiptitle<ui5-button icon="sap-icon://edit" tooltip="Edit document"></ui5-button>title| Theme | Use case |
|---|---|
| Default light theme |
| Dark theme |
| High Contrast Black |
| High Contrast White |
import { setTheme } from "@ui5/webcomponents-base/dist/config/Theme.js";
const darkMode = window.matchMedia("(prefers-color-scheme: dark)");
const highContrast = window.matchMedia("(prefers-contrast: more)");
function applyTheme() {
if (highContrast.matches) {
setTheme(darkMode.matches ? "sap_horizon_hcb" : "sap_horizon_hcw");
} else {
setTheme(darkMode.matches ? "sap_horizon_dark" : "sap_horizon");
}
}
darkMode.onchange = applyTheme;
highContrast.onchange = applyTheme;
applyTheme();| Goal | Property / API |
|---|---|
| Label a component without visible text | |
| Link a visible label to a component | |
| Add a description | |
| Change ARIA role | |
| Set expanded/haspopup/controls | |
| Set heading level | |
| Make icon accessible | |
| Hide decorative icon | |
| Announce dynamic changes | |
| Set tooltip | |
| Respond to OS contrast settings | Use |