Rethinking CSS Image Replacement
The OLD Way
<h1 class="main-logo"> CSS-Tricks </h1>
h1.main-logo {
width: 350px; height: 75px;
background: url(images/header-image.jpg);
text-indent: -9999px;
}
PROBLEM: If you turn CSS off, this will just degrade into text. Not a bad thing, but just because someone has their CSS turned off doesn't necessarily mean they want their images turned off too.
The NEW Way
<h1 class="main-logo">
<a href="#">
<img src="images/header-image.jpg" alt="CSS-Tricks" />
</a>
</h1>
WHY THIS IS BETTER:
With CSS turned off you can still display an image. With CSS and images turned off, you will get the ALT text from the image. You can even use a different image inside than you used for your CSS image, if there is a good contextual reason to do so.
REMAINING PROBLEMS:
Neither of these techniques are perfect yet. While the latter solves one piece of the puzzle, there is still one missing piece. That is CSS ON, images OFF. In this scenario you will get blank space instead of either text or an image. Not great. The other issue is turning these elements into links. You can wrap the header tag in an anchor element, but wrapping a block element in an inline element is bad form. Make sure you change your anchor link to block level if you do this. The other option is a javascript onClick event.
NOTE:
I'm sure this has been thought of and used by people before, so "old" and "new" are kind of subjective here.
[EXAMPLE PAGE]
Thanks to Volkan Görgülü for the idea!
- Login or register to post comments
- 1790 reads
- Flag as offensive
- Email this Story
- Printer-friendly version
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)







Comments
TETRIS replied on Fri, 2008/03/14 - 10:39pm
What happens to the SEO value now that you took out your actual copy of "CSS-Tricks" and replaced it with an image?
Does the ALT tag have the same value as the actual copy within the H1?
Chris Coyier replied on Sat, 2008/03/15 - 10:24am
Chris Coyier replied on Sun, 2008/03/16 - 8:45pm
in response to:
Ryan Mathis replied on Wed, 2008/03/19 - 10:30pm
Well the whole point in using image replacement is to seperate content from style. Including the image in the heading is pointless because it's not adding anything meaningful for the user. If someone has css turned off it's probably because all they want to view is the content. And if they are using a mobile device; it's really annoying to have to wait for an image to load just to see what the page is about.
Anyway, your users will appreciate you not forcing your personal tastes upon them.