CSS drop down menu 8. Jul 2009

After playing with some javascript menus today, I decided to see if I could pull off a drop down menu without any javascript. I’ve seen it done before, so I thought I’d give it a shot. It actually ended up being pretty simple, so I thought I’d share the how-to.

I uploaded a demo of what I mean. If you take a look at the source, the basic elements of the menu are ul and li tags.

The first thing to do is differentiate the parent menu items from the menu items that only appear after you hover over the parent item. I did this with classes.

<div id="menu"> <ul id="item1"> <li class="top">menu item</li> <li class="item"><a href="#">menu item 1</a></li> <li class="item"><a href="#">menu item 2</a></li> <li class="item"><a href="#">menu item 3</a></li> </ul> </div>

You’ll see the parent item is marked with top, while the rest are marked item. Now I can get to hiding .item and letting .top continue to show. So I’ll add this to the style sheet.

#menu ul .item{display:none;}

And when I hover over the top of the unordered list, I want all list items with class item to appear again. Here’s what I’ll add to the style sheet.

#menu ul:hover .item{display:block;}

You could choose to use display:block or display:inline. The last important piece is the position of the menu.


I wouldn’t say this is necessary, but if you’d like the drop down to appear on top of the content below, it is. Otherwise, your CSS menu will just displace everything underneath it.

You can dig through more of the source from the demo if you’d like to see the styling of the menu. Most important of all, this is all web standards compliant, and keeps the HTML of the page beautiful. I’ve tested it successfully in Camino 1.5.1, Firefox, and Safari 3.0.3. It doesn’t work in IE6 though. If you’d like test it anywhere and see how it fairs, go for it.

note: this is an exercise, not the perfect drop down menu

Category: css
Bookmark and Share

Comment and make your thoughts visible

blog comments powered by Disqus