Accessibility in EJ2 TypeScript Menu control
2 May 202311 minutes to read
ARIA attributes
The web accessibility makes web content and web applications more accessible for people with disabilities. It especially helps in dynamic content change and development of advanced user interface controls with AJAX, HTML, JavaScript, and related technologies. The menu provides a built-in compliance with WAI-ARIA
specifications. The WAI-ARIA
support is achieved using the attributes such as aria-orientation
, aria-label
, aria-expanded
, aria-disabled
, and aria-haspopup
applied for menu item in menu. It helps the people with disabilities by providing information about the widget for assistive technology in the screen readers. The menu component contains the menubar
, menu
, and menuItem
roles.
Properties | Functionality |
---|---|
menubar | This role will be specified for root menu. |
menu | This role will be specified for an item that have sub menu. |
menuitem | This role will be specified for an item that do not have sub menus. |
aria-haspopup | Indicates the availability and type of interactive popup element. |
aria-expanded | Indicates whether the subtree can be expanded or collapsed, and indicates whether its current state can be expanded or collapsed. |
aria-orientation | Indicates whether the orientation is horizontal or vertical. The default orientation is horizontal. |
aria-label | Indicates the menu item text. |
aria-disabled | Indicates the state of menu item whether it is disabled. |
User interaction with keyboard
Keyboard shortcuts | Actions |
Esc | Closes the sub menu that contains focus and returns focus to the parent element. |
Enter | Opens the sub menu if focused menu item has sub menu, and places focus on its first item or activates the item and closes the sub menu. |
Up | Navigates up or to the previous menu item. |
Down | Navigates down or to the next menu item. |
Left | Closes the current sub menu and navigates to the parent menu. |
Right | Navigates and open the next sub menu. |
Home | Focuses the first item. |
End | Focuses the last item. |
import { Menu, MenuItemModel } from '@syncfusion/ej2-navigations';
import { enableRipple } from '@syncfusion/ej2-base';
enableRipple(true);
//Menu items definition
let menuItems: MenuItemModel[] = [
{
text: 'Fashion',
items: [
{
text: 'Men Fashion',
items: [
{
text: 'Personal Care',
items: [
{ text: 'Trimmers' },
{ text: 'Shavers' }
]
},
{
text: 'Clothing',
items: [
{ text: 'Shirts' },
{ text: 'Jackets' },
{ text: 'Track Suits' }
]
},
{ text: 'Footwear' }
]
},
{
text: 'Women Fashion',
items: [
{
text: 'Clothing',
items: [
{ text: 'Kurtas' },
{ text: 'Salwars' },
{ text: 'Sarees' }
]
},
{
text: 'Jewellery',
items: [
{ text: 'Nosepins' },
{ text: 'Anklets' }
]
}
]
}
]
},
{
text: 'Home & Living',
items: [
{
text: 'Washing Machine',
items: [
{ text: 'Fully Automatic' },
{ text: 'Semi Automatic' }
]
},
{
text: 'Air Conditioners',
items: [
{ text: 'Inverter ACs' },
{ text: 'Split ACs' }
]
}
]
},
{ text: 'Sports' },
{ text: 'Gaming' }
];
//Initialize Menu component.
let menuObj: Menu = new Menu({ items: menuItems }, '#menu');
<!DOCTYPE html>
<html lang="en">
<head>
<title>Essential JS 2</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
<meta name="description" content="Essential JS 2" />
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/23.1.36/ej2-base/styles/material.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/23.1.36/ej2-popups/styles/material.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/23.1.36/ej2-navigations/styles/material.css" rel="stylesheet" />
<!--style reference from app-->
<link href="styles.css" rel="stylesheet" />
<!--system js reference and configuration-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>LOADING....</div>
<div id='container'>
<div class="control-section">
<ul id="menu"></ul>
</div>
</div>
</body>
</html>