YUI 3.x Home -

YUI Library Examples: Focus Manager Node Plugin: Accessible Menu Button

Note: This is YUI 3.x. Looking for YUI 2.x?

Focus Manager Node Plugin: Accessible Menu Button

This example illustrates how to use the Focus Manager Node Plugin, Event's delegation support and mouseenter event, along with the Overlay widget and Node's support for the WAI-ARIA Roles and States to create an accessible menu button.

Move To

Setting Up the HTML

For a menu button, start with an <a> element whose href attribute is set to the id of an <div> that wraps a list of <input> elements. Therefore, without JavaScript and CSS, the menu button is simply an in-page link to a set of additional buttons.

Progressive Enhancement

The markup above will be transformed into a menu button widget using both CSS and JavaScript. To account for the scenario where the user has CSS enabled in their browser but JavaScript is disabled, the CSS used to style the menu button will be loaded via JavaScript using the built-in loader of the YUI Global Object. Additionally, JavaScript will be used to temporarily hide the menu button markup while the JavaScript and CSS are in the process of loading to prevent the user from seeing a flash unstyled content.

ARIA Support

Through the use of CSS and JavaScript the HTML for the menu button can be transformed into something that looks and behaves like a desktop menu button, but users of screen readers won't perceive it as an atomic widget, but rather simply as a set of HTML elements. However, through the application of the WAI-ARIA Roles and States, it is possible to improve the semantics of the markup such that users of screen readers perceive it as a menu button control.

Keyboard Functionality

The keyboard functionality for the button's menu will be provided by the Focus Manager Node Plugin. The Focus Manager's descendants attribute is set to a value of "input", so that only one menuitem in the button's menu is in the browser's default tab flow. This allows users navigating via the keyboard to use the tab key to quickly move into and out of the menu. Once the menu has focus, the user can move focus among each menuitem using the up and down arrows keys, as defined by the value of the keys attribute. The focusClass attribute is used to apply a class of yui-menuitem-active to the parent <li> of each <input> when it is focused, making it easy to style the menuitem's focused state in each of the A-Grade browsers.

Copyright © 2009 Yahoo! Inc. All rights reserved.

Privacy Policy - Terms of Service - Copyright Policy - Job Openings