Easy jQuery drop down menus
The examples below have styling and effects to make them look nice, but first I will show you the minimum you need to get your menus running. First off, you need a set of nested lists and link to create the structure of your menus:
<ul id="nav"> <li><a href="#">Item One</a> <ul> <li><a href="#">Sub-menu Item 1</a></li> <li><a href="#">Sub-menu Item 2</a></li> <li><a href="#">Sub-menu Item 3</a></li> </ul> </li> <li><a href="#">Item Two</a> <ul> <li><a href="#">Sub-menu Item 1</a></li> <li><a href="#">Sub-menu Item 2</a></li> <li><a href="#">Sub-menu Item 3</a></li> </ul> </li> <li><a href="#">Item Three</a> <ul> <li><a href="#">Sub-menu Item 1</a></li> <li><a href="#">Sub-menu Item 2</a></li> <li><a href="#">Sub-menu Item 3</a></li> </ul> </li> </ul>
Now you need a bit of CSS to put everything in its correct place. This menu isn't going to look nice, but it will give you a starting point from which you can match your site's overall aesthetic.
#nav { float: right; height: 30px; } #nav li { float: left; position: relative; } #nav li a { display: block; padding: 5px 10px; line-height: 20px; } #nav li ul { display: none; position: absolute; top: 30px; left: 0; width: 120px; background: #fff; } #nav li:hover ul { display: block; } #nav li ul li { float: none; } #nav li ul li a { display: inline-block; } #nav li ul li a { display: block; }
The most important thing here is to set #nav li
to position: relative;
and #nav li ul
to position: absolute;
to the submenus are aligned with their parent item. In the interest of accessibility, we are also hiding the submenus in the CSS (#nav li ul { display: none; }
) and showing them with their parent li
is hovered over (#nav li:hover ul { display: block; }
. That way, if JavaScript is disabled, the menus will still work in every browser but Internet Explorer 6. JavaScript is always required for drop-downs to work in IE6, unfortunately. Speaking of which, did you notice the oddity at the end where we declare the links as display: inline-block
and then re-declare them at display: block
? That is the only concession we need to make to Internet Explorer bugs—it removes the extra space IE6 inserts between list items, as discovered by Roger Johansson.
This CSS will create a horizontal menu with drop-downs, but by changing a few lines, you could just as easily make it a vertical menu with fly-outs.
Finally, the JavaScript to hook up the nmcDropDown script. Make sure you also paste the nmcDropDown script itself (and the HoverIntent plugin, if you wish to use it) into the JavaScript file.
$('#nav').nmcDropDown();
Now that we have a functioning menu, we can start styling it. I have created an sample page with two different examples using nmcDropDown.
The first—in the top-right of the page—is based on the simplified example above, just with additional CSS to style the menu bar and drop-downs. I also added an additional parameter to the call in JavaScript to make the menus slide down instead of fading in: $('#nav').nmcDropDown({show: {height: 'show', opacity: 'show'}});
.
The second example is a little more interesting, as it's actually not a menu at all. In the right-hand sidebar, I am using nmcDropDown to create an informational panel with four heading that, which clicked on, each reveal a bit of text. To do this, I replaced the second level of <ul>
s in my HTML with paragraphs. I then used the following CSS to line arrange everything vertically:
#sidebarNav { padding: 10px 0; background: #ccc; border: 1px solid #bbb; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } #sidebarNav li { border-top: 0 solid #ccc; } #sidebarNav li:hover, #sidebarNav li.open { background: #bbb; } #sidebarNav li a { display: block; padding: 5px 10px; line-height: 20px; color: #444; font-weight: bold; text-decoration: none; } #sidebarNav li p { display: none; padding: 5px 10px 10px; color: #444; border-top: 1px dashed #aaa; } #sidebarNav li:hover p { display: block; }
Finally, in the JavaScript I told nmcDropDown to activate on click rather than hover and to look for my paragraph instead of the unordered-list it usually expects:
$('#sidebarNav').nmcDropDown({ trigger: 'click', submenu_selector: 'p', show: {height: 'show'}, hide: {height: 'hide'} });
That's all.
You might also like
Tags
accordion accordion menu animation navigation animation navigation menu carousel checkbox inputs css3 css3 menu css3 navigation date picker dialog drag drop drop down menu drop down navigation menu elastic navigation form form validation gallery glide navigation horizontal navigation menu hover effect image gallery image hover image lightbox image scroller image slideshow multi-level navigation menus rating select dependent select list slide image slider menu stylish form table tabs text effect text scroller tooltips tree menu vertical navigation menu