There was a bit of debate on Anne van Kesteren’s blog last year about alt attributes being rendered as tooltips by some Windows browsers, most notably, Internet Explorer.
Following the W3C specifications, there’s no reason for alt attributes to appear as tooltips. However, there’s nothing to say that ‘alt tooltip’ behaviour is wrong. Certainly, alternative text should appear if an image does not render on the page.
Working on a recent project, the client asked why the descriptive alternative text for an image appeared when they moused over the header image that spanned the top of each page of content. They wanted the alternative text to either not appear or be set to text optimised with keywords.
Update: When first writing this article I was under the impression that screen readers would announce all images followed by their alternative text. Consequently, I’d put alternative text in for all images in markup because I’d personally prefer to be told, “Hey, this image is of an old oak tree with twisted branches” than “There’s an image here, but we don’t want to tell you what it’s in it”! I’ve since found out that JAWS will not even announce the presence of an image that has an empty alt attribute. If that behaviour can be relied upon in all screen readers, the most appropriate solution to our problem may have been to leave the alt blank. I think the JavaScript solution I provide below is still useful should you wish to get Internet Explorer to present correct tooltip behaviour.
What could we do?
The alt text was fit for purpose and we refused to bend the rules for the sake of a bit more SEO. So, we wanted to keep the alternative text but override the tooltip behaviour in Internet Explorer.
Setting an empty alt would have removed the tooltip, but at the expense of accessibility. That’s the obvious option out the window.
Before I go any farther, I thought I’d better point out that alt attributes are a good thing and are required for all images in markup. If you are reading this thinking otherwise, I highly recommend that you read up on appropriate use of alt attributes.
Another option was to add the image as a background with CSS, as it could have been considered a decorative image. Being so close to project finish, we didn’t want to have to go through the site making all the images backgrounds. We also wanted these images to stretch with increases in text size. Next option down.
Internet Explorer will correctly display the contents of a title attribute as a tooltip when one is set on an element. Rather conveniently, an empty title attribute overrides Internet Explorer’s ‘alt tooltip’ behaviour but does not show a tooltip. However, we can’t be sure this will happen in all browsers and I don’t like to muddy my markup.
We opted for an unobtrusive JavaScript solution. This keeps the solution in the behaviour layer and allows us to sniff out Internet Explorer.
Enter the JavaScript
I came up with two JavaScript solutions:
- Using mouse events for the image: when
onMouseOveris triggered, swap out the existingalttext and set thealtto an empty string, then reinstate the originalalttext whenonMouseOutis triggered. - Override the tooltip that appears as a result of the
alttext by ensuring atitleattribute is set on the image — an emptytitleattribute doesn’t display a tooltip in Internet Explorer, but does override the ‘alttooltip’ behaviour for us.
The latter was preferential as it didn’t seem to have any immediately obvious accessibility issues.
A bit of a disclaimer: I don’t recommend overriding any behaviour unless you really have a need to do so. I used this solution in a selective manner. If you intend to use JavaScript to override behaviour in any significant way, consider providing client-side options so that users can set a preference.
So, without further ado, here’s the code I used. Feel free to use it, share it, suggest improvements or provide your insight on tooltips displaying alt text.
var objFixIeTooltip = {
// methods
init : function() {
// detect support
if (!document.getElementById || !document.getElementsByTagName) return;
// detect IE - leave out if using conditional comments
var isIE = navigator.userAgent.indexOf("MSIE");
if (isIE < 1) return;
// find the image(s) - tweak to your needs
var elContainer=document.getElementById("header");
if (!elContainer) return;
var elImg=elContainer.getElementsByTagName("img")[0];
if (!elImg) return;
// if there isn't already a title attribute set on the image, set the title attribute to blank, thus overriding the alt tooltip behaviour
// use == '' because IE always thinks title is a string (cannot distinguish between undefined and empty attributes)
if (elImg.getAttribute('title') == '') elImg.setAttribute('title','');
}
};
addLoadEvent(objFixIeTooltip.init);
Of course, to avoid using browser detection within the script, you could leave it out and include the script using conditional comments:
<!--[if IE]><script type="text/javascript" src="path/fixIEtooltip.js"></script><![endif]-->
References and reading
On alt tooltips:
- Why doesn’t Mozilla display my alt tooltips?
- alt as a tooltip by Anne van Kesteren
- Alt text is an alternative, not a tooltip by Roger Johansson
- Should the “alt” attribute be used for tooltips? by Ian Hickson
- My take on the alt attribute and tooltips by Jeff Croft
On alt attributes and alternative text:
- The alt and title attributes – a good introduction to the
altandtitleattributes by Roger Johansson - Writing good ALT text by Simon Willison
- Appropriate Use of Alternative Text over at WebAIM
- The Alt and Accessibility – another good introduction to
altattributes and discussion of appropriate usage by Mike Cherim
You can find more on alt attributes and alternative text in my del.icio.us bookmarks.
And just for fun – I love this: Wheee!





Comment 1
The accessibility issue here is that you’re messing with user expectations.
The alt-tooltip behavior may be wrong, but it’s common expectation, and by suppressing or removing that behavior you’re messing with expectation among IE users.
Not a big thing, but I would have stood firm and told the client “no”. If they really don’t like the alt text appearing, then choose some suitable title text – something which is applicable and adds information.
James Edwards, 25 April 2007 at 0217