Accessible Menu
Purpose
Instructions
In this exercise, we will be creating an accessible dropdown menu.
HTML
- 
Open your Goats 'R Us website from last week. 
- 
Build the top navigation links on index.html.- Inside the <header>, add a<nav>element.
- Give the <nav>opening tag a ARIA attribute ofaria-label="Main Menu"
 
- Inside the 
- 
Create navigation items - 
Create an unordered list with three list items inside the <nav>element.Tip: If using Visual Studio Code, try using the Emmet shortcut ul>li*3
- 
Add the role="menubar"to the<ul>.The role="menubar"is used when all choices/options are always visible on the screen.
- 
Add the role="none"to each<li>.This removes the default role of listitemfor each<li>
- 
Add the below links for Home, Our Breeds, and Order Projects inside the appropriate <li>.
- Add the role="menuitem"in each anchor element.
 <!-- Main Menu --> <nav aria-label="Main Menu"> <ul role="menubar"> <li role="none"><a href="index.html" role="menuitem">Home</a></li> <li role="none"><a href="breeds.html" role="menuitem">Our Breeds</a></li> <li role="none"><a href="products.html" role="menuitem">Order Products</a></li> </ul> </nav>
- 
- 
Create submenu items - 
Add the ARIA attribute aria-haspopup="true"to the Order Products<a>The aria-haspopup="true"indicates the menu item has a submenu.
- 
Nest a second <ul>within the Order Products<li>
- 
Add aria-label="Product Sub-Menu"to the new<ul>
- 
Add attribute role="menu"to the new<ul>.The role="menu"is used when the user needs to invoke the menu items (the items are not visible by default).
- 
Add role="none"to each<li>
- Add the below links (not all pages exist, so I just placed a hashtag in place of a path).
- Add the role="menuitem"in each anchor element.
 <!-- Nested Sub Menu --> <ul aria-label="Product Sub-Menu" role="menu"> <li role="none"><a href="#" role="menuitem">Goat Milk Soap</a></li> <li role="none"><a href="order/orderCheese.html" role="menuitem">Cheese</a></li> <li role="none"><a href="#" role="menuitem">Milk</a></li> </ul>
- 
- 
View results - 
In your CSS document, comment out the margin:0;andpadding:0;styles applied to the body. You should see the below structure in your browser.
- 
If you don't see the below structure, go back and fix your mistake before continuing. 
- 
Uncomment out the margin:0;andpadding:0;.
  
- 
CSS
- 
Style the top navigation links with the below CSS /************************* Main menu *************************/ nav { background-color: #e3e3e5; } ul { display: flex; /* Acts like a float */ list-style: none; justify-content: center; } li { background-color: #e3e3e5; position: relative; } li:hover { background-color: #A4665E; } li a { text-decoration: none; color: #000; display: block; /* need anchor element to be block so they take padding */ padding: 1em; } li a:hover { color: #fff; }
- 
View Results The finished styles should look like the image below in your browser.  
Adjust the color transition
So the color transition isn’t too jarring, add a slight transition to the <li> element.
li {
    background-color: #e3e3e5;
    position: relative;
    transition-duration: 0.5s;
}
Show and hide the Submenu
- 
To access the submenu, we can use the DOM to target the nested <ul>. The display: none property will hide this navigation. And we are using some positioning properties to place the submenu in the correct spot./************************* Sub menu *************************/ ul li ul { position: absolute; min-width: 10.3em; margin-top: 0; left: 0; display: none; }
- 
To show the submenu when the user hovers over the list item add the following styles. We are selecting the <ul>and its descendants that are descendants of a ul li on hover. The second selector is selecting the<ul>element itself.ul li:hover ul, ul li ul:hover { display: block; }
- 
Finally, give the bottom right and left corners of our sub-navigation rounded corners. li ul li:last-child { border-bottom-left-radius: .5em; border-bottom-right-radius: .5em; }
- 
View Results The finished menu should look like the image below.  
Fixing the tab
We have a good-looking menu so far, but the tab key does not work in our submenu. Fortunately, we have a great new CSS pseudo selector, focus:within, that easily fixes this. We want to apply this to all the <li> elements within the submenu.
ul li:hover ul,
ul li ul:hover,  /* <------ ADD a comma */
ul li:focus-within ul { /* <------ ADD this line */
    display: block;
}
Challenge (extra 3 points)
- 
Navigate the menu with the tab key on your keyboard. Notice that the hover effects do not work (changing background and text color). How would you fix this? 
- 
Update the navigation to include current page information for the screen reader and a visual indicator for sighted users. Only required for the Home, Our Breeds, and Our Products links. 
Adding a Skip Link
- 
Create the link - Add an idto the<main>element. Give it a value like "mainContent".
- Directly under the <body>element, create a link that goes to the<main>element by using theidyou just created.
- Give the new link a class, something likeskipLink.
 
- Add an 
- 
Move the link off the viewport We don’t want to use a display: noneas then the screen reader will ignore the link. Instead of using theclassselector, move the link off the page..skipLink { position: absolute; left: -1000px; }
- 
Move link when in focusoractivestateWhen the link is in the focus or active state, the element moves back to its original position. .skipLink:focus, .skipLink:active { left: 0; }
Add Navigation to All Pages
- 
Add the navigation & skip link to each page - Copy the HTML navigation and paste it into the other pages.
- You will need to modify the link paths on the orderCheese.htmlpage
- Copy the skip navigation HTML to each page
 
Submission
- 
Open the Week 13 folder in Blackboard 
- 
Click on the Accessible Menu submission link. 
- 
Compress (zip) the entire Goats 'R Us website and submit it to the Blackboard submission link. 
- 
Click Submit. 
Grading Criteria
Points Possible: 4
- 
Correct and valid HTML (1 pt.) 
- 
Correct and valid CSS (1 pt.) 
- 
Keyboard Accessible (1 pt.) 
- 
Skip Link (1 pt.) 
- 
Challenge (+3 pts.)