Advanced CSS Menu
Most of you probably know how to code a horizontal or vertical CSS list menu. Now let’s take it to the next level — code an advanced (un-typical) list menu utilizing the CSS position
property.
HTML source
When you are done with the graphics, let’s start coding. Start with an un-ordered list <ul>
.
- note there is an id="menu" assigned to the
<ul>
tag - an unique class name assigned to each link
<a>
- an empty
<span>
tag (the purpose of this is to make the mouseover effect)
<ul id="menu"> <li><a href="#" class="home">Home <span></span></a></li> <li><a href="#" class="about">About <span></span></a></li> <li><a href="#" class="rss">RSS <span></span></a></li> </ul>
#menu
Reset the menu to no padding, no margin, and no list-style. Specify the width and height same dimension as the menu-bg.jpg. Then attach the menu background image. The key point to remember here is set the position
property to relative
.
#menu { list-style: none; padding: 0; margin: 0; width: 774px; height: 210px; background: url(images/menu-bg.jpg) no-repeat; position: relative; }
#menu span
Specify the span
element to display:none
(so they will be invisible by default). Specify position:absolute
, so we can place the mouseover GIF image on exact position.
#menu span { display: none; position: absolute; }
#menu a
The key point here is the text-indent
property. We specify the text-indent
property with a negative value (-900%), so the text will be hidden.
#menu a { display: block; text-indent: -900%; position: absolute; outline: none; }
#menu a:hover
When mouseover the link, we want to shift the background image from top to bottom
#menu a:hover { background-position: left bottom; }
#menu a:hover span
When mouseover the link, we want the span
element to display:block
.
#menu a:hover span { display: block; }
#menu .home
Specify the width, height, and background image. Since we already specified all <a>
element postition:absolute
in previous step, now just say where the .home button should be by specifying the left and top property.
#menu .home { width: 144px; height: 58px; background: url(images/home.gif) no-repeat; left: 96px; top: 73px; }
#menu .home span
Here we are specifying the width, height, background, and position of the span
element of .home (mouseover GIF image)
#menu .home span { width: 86px; height: 14px; background: url(images/home-over.gif) no-repeat; left: 28px; top: -20px; }
#menu .about
Copy the .home rules and rename them to .about. Now just change the width, height, background, left, and top property.
#menu .about { width: 131px; height: 51px; background: url(images/about.gif) no-repeat; left: 338px; top: 97px; } #menu .about span { width: 40px; height: 12px; background: url(images/about-over.gif) no-repeat; left: 44px; top: 54px; }
#menu .rss
Repeat this step for .rss
#menu .rss { width: 112px; height: 47px; background: url(images/rss.gif) no-repeat; left: 588px; top: 94px; } #menu .rss span { width: 92px; height: 20px; background: url(images/rss-over.gif) no-repeat; left: 26px; top: -20px; }
All in one:
#menu { list-style: none; padding: 0; margin: 0; width: 774px; height: 210px; background: url(images/menu-bg.jpg) no-repeat; position: relative; } #menu span { display: none; position: absolute; } #menu a { display: block; text-indent: -900%; position: absolute; outline: none; } #menu a:hover { background-position: left bottom; } #menu a:hover span { display: block; } #menu .home { width: 144px; height: 58px; background: url(images/home.gif) no-repeat; left: 96px; top: 73px; } #menu .home span { width: 86px; height: 14px; background: url(images/home-over.gif) no-repeat; left: 28px; top: -20px; } #menu .about { width: 131px; height: 51px; background: url(images/about.gif) no-repeat; left: 338px; top: 97px; } #menu .about span { width: 40px; height: 12px; background: url(images/about-over.gif) no-repeat; left: 44px; top: 54px; } #menu .rss { width: 112px; height: 47px; background: url(images/rss.gif) no-repeat; left: 588px; top: 94px; } #menu .rss span { width: 92px; height: 20px; background: url(images/rss-over.gif) no-repeat; left: 26px; top: -20px; }
Done
That’s it.
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