One of the main uses for CSS is the styling of unordered lists used to hold
menu links. In this article I explain how to remove the unordered list items
and replace them with images and, using two images per link, have a hover state
that is flicker free.
What Flicker?
This is a problem that occurs in Internet Explorer when the Temporary Internet
Files > Settings > Check for newer versions of stored pages is set as 'Every
visit to page.'
I have been informed that there is a high percentage of people who browse with
this option in place.
When this option is chosen, Internet Explorer does not cache background images
and has to download them each time they are needed. This creates a short delay
in the image display (dependent upon their file size) and accounts for the flicker
when you hover over each link.
As I've said, this only happens with Internet Explorer, but since this is the
most commonly used browser we should attend to this issue and find ways to stop
this annoying flicker.
To see an example of the problem, open Internet Explorer and as a temporary
measure, select Tools > Internet Options > General > Temporary Internet Files
> Settings and click 'Every visit to the page' (make a note of your original
setting before you make this change). Then click the following link to for a
demonstration. Don't forget to switch back to your original Internet Explorer
setting afterwards.
I have enclosed the list in a div tag with an id. This gives you control over
the position of the menu by giving it a position style. i.e. position:absolute
or float:left;
Each list tag <li> is given a class name as a unique identifier, which
could also have been an id. Each link tag <a> is given a unique id and
title. The title is used to give a popup description of the link when hovered
over. I have not given a link address as this is only a demonstration but you
can replace the # with your link pages as required.
That completes the (X)HTML for the menu. THIS WILL NOT CHANGE ON ANY OF THE
FOLLOWING EXAMPLES. The only changes will be to the styling of this unordered
list and will accomplished using CSS.
Make sure that you have the correct (X)HTML !DOCTYPE. Without this most browsers
will be thrown into 'quirks' mode which will lead to all sorts of incompatibility
problems. W3C
QA - List of valid DTDs has a list of valid DOCTYPES that can be
used. Select from XHTML1.0 or XHTML1.1 as these are more suitable for this styling
(I use XHTML1.1 for all my current web pages).
Step 2
Using your favourite paint package create your images. You will need one image for the normal link (unhovered) and another image for the hovered link.
I need 10 images for my menu and have chosen a painting by each artist. The
unhovered images have been converted to a sepia tone whilst the hovered images
are full color. I have also added the painter's name at the bottom of each image.
It is possible to use different size images for each link but to keep things
simple for this demonstration I have used images of the same size.
The ten images
Step 3
Removing the bullets and margin
We will start by removing the bullets and moving the unordered list to the left of our containing div.
Browsers have different ways of doing this; Internet Explorer and Opera use
margin values whereas Mozilla/Netscape/Firefox all use padding values, so to
cater to Internet Explorer we need to style the list as follows.
/* Step 3 - get rid of the bullets and margin */
#menu ul {margin:0; padding:0; list-style-type:none;}