Graphics.comGraphics.com sweepstakes
 news | tutorials & articles | forums | downloads | gallery | resources | events | advertise | SUBSCRIBE

  Printer Friendly Page 

Insight

Creating Graphical Navigation with Rollovers

Adapted from Web Designer's Reference: An Integrated Approach to Web Design with XHTML and CSS (friends of Ed)
By Craig Grannell

Dateline: April 5, 2005
Read more Insight articles
Post comments in the Web Page Design forum


This exercise concerns navigation with graphical rollovers. I'm assuming you have some experience working with CSS and styles. The following is a Photoshop mock-up of the navigation bar that we’re going to build. (The vertical lines are Photoshop guides, showing the boundary of each button, and are not part of the design.)

By conventional methods, you’d export eight images from Photoshop—two for each link (twelve if you wanted to incorporate an active state). The rollovers would be applied using JavaScript. However, this process has several problems:

  • Updating the rollover graphics requires a lot of work, creating and re-exporting up to a dozen new images.
  • By default, there is a short pause on the hover and active states while the rollover graphic downloads.
  • The hover state and active state pauses can be eradicated by using a preload script, but such scripts often don’t work well with all browsers.
  • Not everyone surfs the Web with JavaScript turned on.
Instead of using JavaScript, we’ll use a little CSS and (drumroll) just one image, which is shown at right. This image is a single transparent GIF that includes all three link states: link (the default), hover, and active. (What’s depicted is the final image, which should be exported in one piece; this should remain a single image file, and shouldn’t be chopped into three different files.) What we can do is use this as a background image for navigation links, and use CSS to display the relevant portion of the image, depending on the link action taking place.

The navigation is marked up as an unordered list. No formatting of the links of any kind is required—that’s all handled by the CSS. We’ve placed the list within a div tag that has an id value of navigation, so we can create CSS rules that apply only to lists within that specific div.

1. Create the list. This navigation bar consists of a simple unordered list. In a browser, this looks pretty much like you’d expect: just a plain, unordered, vertical list.

2. Style the list. Browser defaults are removed.

#navigation ul {
margin: 0px;
padding: 0px;
list-style: none;
}

3. Style list items. Items within the list are styled to float left and display inline. The background value includes the location of the rollover image, with additional settings being no-repeat (to stop it from tiling), then left and top, to ensure the relevant portion of the rollover image is seen by default. The margin and padding are set to 0 to override unruly browser defaults.

#navigation li {
float: left;
display: inline;
margin: 0px;
padding: 0px;
background: url(assets/shared/rollover.gif) no-repeat left top;
}

4. Style the links. Because you haven’t set dimensions for the links yet, the backgrounds aren’t sitting in the right place. You can fix this by using the following rule, which also deals with the text styles you want to put in place.

The padding and height/width settings add up to the dimensions of the area of the background image that you want to show at any one time (185px × 30px—#the size of one of the link states). This is because padding is added to the element width—it’s not a part of it. If you were to set the width of navigation links to 185px and then add 30px of padding to the left (which is used to indent the text), the links would take up 215px of space.

You’ll set display to block, to make the entire container the active link, thereby making this navigation bar work in the normal manner.

#navigation a {
font: bold 13px Arial, Helvetica, sans-serif;
text-transform: uppercase;
color: #ffffff;
text-decoration: none;
display: block;
padding: 7px 0px 0px 30px;
height: 23px;
width: 155px;
}

5. Style other states. For the hover and active states, you define which portion of the rollover graphic is supposed to be visible. This is done via background-position values. The first of these remains 0px, because you always want to see the image from its far left. The vertical reading depends on where the relevant portion of the image appears in the rollover graphic.

As you can see, the hover state is 40px from the top and the active state is 80px from the top. This means the image needs to be vertically moved –40px and –80px for the hover and active states, respectively.

Therefore, the rules for these states are as follows:

#navigation a:hover {
background: url(assets/shared/rollover.gif) 0px -40px;
}

#navigation a:active {
background: url(assets/shared/rollover.gif) 0px -80px;
}

The hover and active states are shown in the following images.


6. Fix for Internet Explorer 5.5 for Windows. Internet Explorer 5.5 for Windows gets the box model wrong, incorrectly setting padding and borders within defined element dimensions. The navigation bar currently looks like this in that browser:

To deal with Internet Explorer 5.5, the width and height settings need to be the same as the dimensions of the buttons (as opposed to the measurements for compliant browsers, defined in step 4). You can set separate values for Internet Explorer 5.5 by using the box model hack. First, set the width and height for Internet Explorer 5.5 (185px width and 30px height&151;dimensions identical to those of one state of the rollover graphic). Then add the hack and the correct measurements for compliant browsers (as in step 4).

#navigation a {
font: bold 13px Arial, Helvetica, sans-serif;
text-transform: uppercase;
color: #ffffff;
text-decoration: none;
display: block;
padding: 7px 0px 0px 30px;
height: 30px;
width: 185px;
voice-family: ""}"";
voice-family:inherit;
height: 23px;
width: 155px;
}

The hack is the two voice-family rules. Internet Explorer 5.5 stops reading during the first line (it’s fooled into thinking the rule terminates due to the quoted curly bracket); compliant browsers “recover” in the second voice-family line and continue to the end of the rule, with the second set of height and width values overriding the first. Everyone goes home happy—well, almost. Internet Explorer 5.5 sometimes also screws up the case of the links, ignoring the text-transform value. A workaround is to create a second #navigation a rule and put the text-transform property/value pair there:

#navigation a {
text-transform: uppercase;
}

As you can see, this fixes the navigation bar in Internet Explorer 5.5. Sadly, Internet Explorer 5 for Windows cannot deal with text-transform at all, but it manages to display everything else correctly. Still, it’s only a minor thing, and that browser’s market share is rapidly reducing anyway. As for obsolete browsers (Netscape 4 et al.), hide the CSS and they’ll get a perfectly navigable basic list. Again, everyone goes home happy (and I mean it this time!).

It’s worth noting that many browsers permit text resizing. In such cases, users with extreme setups (text size increased a couple of settings above the default) may end up “losing” the second word of multiple-word links in this example. This will affect a minority of users, but even so, take care to ensure your navigation makes sense even if the final word is missing. For instance, contact details becoming contact still makes sense, as does help desk becoming help; however, customer support becoming customer could be problematic. Despite this issue, this method is still superior to using graphics for each link: it’s easier to update, more accessible, and degrades more gracefully in alternate browsers.

Discuss this article in the Web page design forum. Make sure you don't miss the next Insight article. Get the free Graphics.com newsletter in your mailbox each week. Click here to subscribe.

This article is adapted from Web Designer's Reference: An Integrated Approach to Web Design with XHTML and CSS (friends of Ed), by Craig Grannell, and is reproduced here with permission. Copyright 2005 Craig Grannell.

  

[ Back to Insight | Features Index ]





Follow Me on Pinterest    Receive Graphics.com news via RSS


Graphics.com Newsletter
The Graphics.com newsletter is a great way to stay up to date on what's new on the site and in the world of graphics.
SUBSCRIBE


Enter the Graphics.com Sweepstakes




Graphics.com Blogs

Life, Liberty and the Pursuit of Photoshop
Chris Dickman

The Apple iPhone Domino Effect
Chris Dickman

Why Don't We All Love Adobe?
Chris Dickman

Attack of the Giant Drone Logos
Chris Dickman

I'm Buying an HTC One for the Wrong Reasons. And I Don't Care!
Chris Dickman

The Darwinian Evolution of Photoshop
Chris Dickman






There isn't content right now for this block.

News Archive | Article Archive | Twitter | Member Login
Newsletters | Feedback | Submit News





WebMediaBrands
Mediabistro | All Creative World | Inside Network
Jobs | Education | Research | Events | News
Advertise | Terms of Use | Privacy Policy
Copyright 2013 WebMediaBrands Inc. All rights reserved.