o Outer wrapper <div>
§ Main <ul> navigation bar container
· First-level <li> item without submenu
o <a> to destination URL
· First-level <li> item with submenu
o <a> to destination URL
o Second-level menu <ul> container
§ Second-level <li> item
· <a> to destination URL
Roleso role=”navigation” for outer wrapper <div>
o role="menubar" for <ul> navigation bar container
o role="menu" for second-level <ul> containers
o role="presentation" for first- and second-level <li> menu items (they are not needed in the exposed accessible menubar structure)
o role="menuitem" for first- and second-level <a> menu items
o aria-haspopup="true" for first-level <a> menu items having a submenu
o aria-labelledby="ID of previous <a> menu item" for second-level <ul> containers
o aria-selected="true" on currently visited first- or second-level <a> item; aria-selected="false" on the other <a> items. That is to enforce the concept “selected <==> current page”
o aria-expanded="true/false" for second-level <ul> containers
o aria-hidden="true/false" for second-level <ul> containers
o aria-activedescendant="<id of active menuitem>" for main <ul> navigation bar container. This is an alternative to working with tabindex
o tabindex=0 on currently visited <a> item; tabindex=-1 on the other <a> items. That is in order to first focus on the current page when tabbing to the navigation bar. It is an alternative to working with aria-activedescendant
o Right arrow: Next menubar item
o Left arrow: Previous menubar item
o Enter: Select first menu item if opening
o Space: Select first menu item if opening
o Tab: Move focus in/out of the menu from any point in the web application.
o Shift+Tab: Move focus in/out of the menu from any point in the web application.