Tuesday, October 5, 2010

Placing Introductory Images

Introductory images are most typically seen on designers’ weblogs but these images are a fun way for anyone to introduce a post.
As the name suggests, introductory images appear at the beginning of the text. However,
you can give them a lot more impact by playing around with their placement via the
manipulation of their borders and padding values.
Using Borders and Padding
Let’s work through an example, which you can see in Figure 2.16, that uses borders and
padding to extend an image beyond the width of the page content. This approach makes
the layout a little more interesting, and makes the image seem more deliberate—it doesn’t
seem as if it’s just been “placed” there.It’s very easy to create this look. We start with the proper markup—simply replace the text
and images used here with the content that you want:

“http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">



/>
Introductory Images


The “Cat Vase” that won’t go away.


Published on Saturday, September 23, 2006, at 4:00pm
by
The Cat
<br />Vase

I remember the day that my grandmother told me what she
was giving me in her will. She pointed to the vase in
the corner. This vase always intrigued me, in all its
elegance and gaudiness. But I certainly did not wish to
own it.


It is a big white vase painted with large pink, yellow,
and purple flowers, butterflies, and ornamentation
around the top. All the line work was painted in glossy,
shiny gold. And all around the vase were
three-dimensional figurines of cats attached on to it,
so it would look like they were climbing the vase.
The cats are cute, white, with gold-trimmed ears and
tails.


Don’t get me wrong. I love cats. But I was never one
to collect memorabilia.


Years went by and I never put another thought to the vase.
Then the day came that my father showed up to visit.
He was holding the vase.


"Grandma told me to give this to you," he said
with a smirk on his face.


"She did? But that was part of her will... Why is she
giving it to me now?"


"Guess she wanted to get rid of it."


I reluctantly received the vase. I kept it in the closet
of my old bedroom I had when I lived with my boyfriend
at the time. After I moved out into my own apartment,
I didn’t think much of it again. About a year went by,
and I was moving once again to a nicer apartment. My
ex-boyfriend began bringing things that I had left at
his house. I didn’t realize how much I had left over
there.


Then the day came that Michael showed up at the door.
He was holding the vase, in a much similar style that
my father had done, with the same smirk.


I don’t know what to do with it. My grandmother told
me she paid $200 for it, so I don’t want to just get
rid of it. It’s definitely not my style, and certainly
doesn’t match anything in my home. But at the same time,
it’s almost too funny to get rid of. I mean, how often
do you see a vase this ornamental and bizarre?


I’ve considered maybe putting it on eBay but I think I
might hold on to it just for a little while longer.
It’s certainly photogenic.





The content and image are contained within a div with a class of content, and we’ve
applied a class of intro to the image. The result is shown in Figure 2.17.

Now, we’ll style the page’s typography, and apply the colors for its background, border, and
font. These styles are merely applied for the sake of the page design, and are not required
by the introductory image itself:
intro

body {
margin: 0;
padding: 0;
background-color: #fff;
font: 62.5%/1.75em “Trebuchet MS", Verdana, sans-serif;
text-align: center;
color: #4d4d4d;
}
#content {
margin: 0 auto;
padding: 1em 0;
width: 500px;
background-color:#fff;
font-size: 1.125em;
line-height: 1.75em;
text-align: left;
}
a:link, a {
border-bottom:1px dotted #960;
color: #960;
text-decoration: none;
}
h1 {
margin: 0;
padding: 0;
border-bottom: 3px solid #eee;
font: 2.75em/1.75em Georgia, serif;
text-align: center;
text-transform: lowercase;
color: #cc6;
}
p {
margin: 0;
padding: 0 0 1em 0;
}
cite {
display: block;
margin-top: 2em;
font-style: normal;
font-size: 1em;
line-height: 1em;
text-align: center;
}
Now, we style the image. We’ll add 4px of padding, and a 3px border with a double style, so
that the image has what appears to be two borders surrounding it:
intro-image.css (excerpt)
img.intro {
padding: 4px;
border:3px double #ccc;
background-color: #fff;
margin:0 -7px;
}
The container is 500px wide, so the text stays within those boundaries. The image is also
500px wide, but since we’ve applied padding and border properties to it as well, we need
to compensate for them. Due to the 4px padding and 3px border, our intro image needs to
have a negative margin of 7px on the left and right to allow the border properties to extend
beyond the #content div. The padding and border properties can be adjusted to suit your
taste; just make sure that the negative margin is the same as the total of your padding and
border properties.
In Figure 2.18, we see an image that’s 500px wide—the same as the content area.

Contextual Images

Contextual images usually appear in news articles or weblog entries, where they provide
additional visual information or help to illustrate the content. Sometimes they’re used
in a masthead-like manner to introduce the content. Other times, contextual images may
be embedded throughout the content, the text wrapping around them. They may also be
accompanied by a descriptive caption.
This section shows some of the interesting ways in which contextual images can be
displayed, and provides the markup necessary to achieve these effects

Styling the Album Page

We’re almost done! We just need to style the h2s and the thumbnails. Here, the h2 is styled to
look and behave similarly to the images, with the same hover effects. We add clear: left; to
the h2 to ensure that each new album clears the floated thumbnail of the album that precedes
it:
h2 {
margin: 0 0 5px 0;
font-weight: normal;
font-size: 1.5em;
text-align: left;
clear: left;
}
h2 a:link, h2 a {
display: block;
padding: 0 5px;
border: 1px solid #ccc;
border-top-color: #eee;
border-right-color: #ddd;
border-bottom-color: #bbb;
}
h2 a:hover {
border-color: #ccc;
background-color: #eee;
}
Finally, we’ll style the thumbnails to appear like those in Figure 2.14, which share some
styles with ul.thumbnails.
p.thumb, ul.thumbnails {
margin: 0 0 10px 0;
padding: 0;
float: left;
text-align: center;
background-color: #fff;
line-height: 1em;
list-style: none;
}
p.photo a, p.thumb a, ul.thumbnails a {
display: block;
float: left;
margin: 0;
padding: 4px 4px 9px 4px;
border: 1px solid #ccc;
border-top-color: #eee;
border-right-color: #ddd;
border-bottom-color: #bbb;
background-color: #fff;
text-align: center;
}
p.thumb a, ul.thumbnails a {
width: 80px;
margin-right: 10px;
margin-bottom: 10px;
}
p.photo a:hover, p.thumb a:hover, ul.thumbnails a:hover {
border: 1px solid #ccc;
background-color: #eee;
}
Here’s what the final style sheet should look like; it can be used on all three pages:
gallery.css
body {
margin: 0;
padding: 0;
background-color: #fff;
font: 62.5%/1.75em “Times New Roman", serif;
color: #4d4d4d;
}
a:link, a {
border-bottom:1px dotted #960;
color: #960;
text-decoration: none;
}
a:hover {
border-bottom:1px solid #960;
}
h1 {
margin: 05 6px;
padding: 0 0 .5em 0;
font-style: italic;
font-weight: normal;
font-size: 1.25em;
line-height: 2.375em;
color: #ccc;
}
h1 em {
color: #4d4d4d;
}
h1 a:link, h1 a, h1 a:hover, h1 a em, h1 a:link em,
h1 a:hover em {
border-color: #999;
color: #999;
}
h2 {
margin: 0 0 5px 0;
font-weight: normal;
font-size: 1.5em;
text-align: left;
clear: left;
}
h2 a:link, h2 a {
display: block;
padding: 0 5px;
border: 1px solid #ccc;
border-top-color: #eee;
border-right-color: #ddd;
border-bottom-color: #bbb;
}
h2 a:hover {
border-color: #ccc;
background-color: #eee;
}
p, ul {
margin: 0 6px;
padding: 0;
}
img {
display: block;
margin: 0 auto 5px auto;
border:1px solid #ccc;
border-bottom-color: #eee;
border-left-color: #ddd;
border-top-color: #bbb;
}
br {
display: none;
}
#content {
margin: 0 auto 20px 20px;
padding: 1em 0 0 0;
width: 512px;
background-color: #fff;
font-size: 1.25em;
line-height: 1.75em;
p.photo {
margin: 0 0 10px 0;
float: left;
width: 75%;
text-align: center;
background-color: #fff;
line-height: 1em;
}
ul.navigation {
margin: 0 0 10px 0;
padding: 0;
float: left;
text-align: center;
background-color: #fff;
line-height: 1em;
list-style: none;
position: absolute;
top: 76px;
left: 550px;
}
p.thumb, ul.thumbnails {
margin: 0 0 10px 0;
padding: 0;
float: left;
text-align: center;
background-color: #fff;
line-height: 1em;
list-style: none;
}
ul.thumbnails li, ul.navigation li {
display: inline;
margin: 0;
padding: 0;
}
ul.navigation a {
display: block;
float: left;
margin: 0 10px 10px 0;
padding: 4px 4px 6px 4px;
border: 0;
background-color: #fff;
text-align: center;
width: 80px;
}
p.photo a, p.thumb a, ul.thumbnails a {
display: block;
float: left;
margin: 0;
padding: 4px 4px 9px 4px;
border: 1px solid #ccc;
border-top-color: #eee;
border-right-color: #ddd;
border-bottom-color: #bbb;
background-color: #fff;
text-align: center;
}
p.thumb a, ul.thumbnails a {
width: 80px;
margin-right: 10px;
margin-bottom: 10px;
}
ul.navigation a:hover {
background-color: #eee;
border: 0;
}
p.photo a:hover, p.thumb a:hover, ul.thumbnails a:hover {
border: 1px solid #ccc;
background-color: #eee;
}
p.description {
clear: left;
}
We’ve finished marking up and styling our experimental image page, thumbnails, and
album list, and we have a clean, simple image gallery! At the end of this chapter, in Further
Resources, you’ll find a list of some great examples of online image galleries, along with a
couple of gallery and photo album resources.

Looking at an Example

Once again, the basic groundwork has already been done. Here’s the markup:
albums.html
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
lang="en">

Photo Gallery





Photos


Firenze, Italia 2006


Thumbnail: Firenze,
<br />Italia 2006
259
Photos


Living in Firenze, Italia {Florence, Italy} for
one month. This is the highlight of my life.


Boston, Massachusetts 2006





38 Photos


From my business trip to Boston {May 2006} when Vineet
& I were working on Mass.gov.


Barcelona, España 2006


src="images/thumb27.jpg" />
110 Photos


My first venture into Europe & a wonderful week of
great food, art, architecture, & culture.






Obviously, the number of albums displayed on the page can vary, but I suggest you keep
the number under ten to prevent visual clutter. In the example shown in Figure 2.13, we’ve
used three. We’ve applied a class of thumb to the paragraph holding the thumbnail image.
The total number of photos in each album appears underneath that album’s thumbnail
image, similar to the display of the pagination thumbnails used on the image page. An h2
has been added to hold the album titles, and a paragraph is used for the descriptions.

Styling the Thumbnails

To produce the display shown in Figure 2.11, we now need to add the following styles for
thumbnails:
gallery.css (excerpt)
ul.thumbnails {
margin: 0 0 10px 0;
padding: 0;
float: left;
text-align: center;
background-color: #fff;
line-height: 1em;
list-style: none;
}
These styles are the same as those we used for navigation, except that we’re not positioning
this unordered list. We also want to style the list items in exactly the same way as we did
for the navigation list items. The results of this markup

ul.thumbnails li, ul.navigation li {
display: inline;
margin: 0;
padding: 0;
}
Finally, let’s style the navigation. As we’re not using a thumbnail image, we can use a
slightly different style in this case:
gallery.css (excerpt)
ul.navigation a {
display: block;
float: left;
margin: 0 10px 10px 0;
padding: 4px 4px 6px 4px;
border: 0;
background-color: #fff;
text-align: center;
width: 80px;
}
ul.navigation a:hover {
background-color: #eee;
border: 0;
}

Creating a Thumbnails Page

We’ll create a typical thumbnails page—a display of small images, each of which links to
its respective image page. Actually, since we’ve already created the look and feel of the
image page, most of the groundwork is completed. The markup for our thumbnails page
looks like this:
thumbnails.html
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
lang="en">

Photo Gallery








You’ll notice that this markup is very similar to the image page’s markup, except the h1 is
different, and the description area has been removed. We’ve created an unordered list to
contain the thumbnails; it utilizes the class of thumbnails that we used previously on the
navigation for the photo page.
The number of thumbnails displayed on this page can be varied to suit your preferences.
I’ve chosen to display 25, as the layout is wide enough to accommodate five thumbnails
per row and per column, which echoes the 1:1 proportions of the thumbnails themselves.
A little aesthetically pleasing balance is never a bad thing!
The pagination-style navigation is very similar to the navigation on our single image page,
but the class of thumbnails was removed, since these links don’t contain thumbnail images
and don’t need to be styled as such. At the moment,

Producing a Quick and Simple Layout

Now, we want to define the spacing and width of the div that contains all the elements
of our page. We’ll also increase the font size for items within this div, to create the effect
shown in Figure 2.6. By adding the code at this point, instead of at the body level, we
ensure that relative padding and margin sizes are affected only within this div: #content {
margin: 0 auto 20px 20px;
padding: 1em 0 0 0;
width: 512px;
background-color:#fff;
font-size: 1.25em;
line-height: 1.75em;
}
Because the images we’re using are no wider than 500px, and we want to have room for the
border around each image, we’ll use a width of 512px for #content. You can vary this value
to reflect the maximum width of your images. I recommend setting a maximum of 500px to
ensure that the entire image will fit within most browser viewports. Just make sure that the
width of #content is equal to the total width of the image plus any left or right padding and
border properties.
We’re almost done!

Styling the Images

Now, we’ll style the image and the link that contains that image. For this example, we’ll
mimic a Polaroid-style photograph by using a white frame with a larger lower margin—a
great place to add a date or copyright statement. To do this, we’ll have an inset-style border
around the image, and then an outset-style border around that, as shown in Figure 2.4.
Here’s the code:
gallery.css (excerpt)
img {
display: block;
margin: 0 auto 5px auto;
border: 1px solid #ccc;
border-bottom-color: #eee;
border-left-color: #ddd;
border-top-color: #bbb;
}
p.photo {
margin: 0 0 10px 0;
float: left;
width: 75%;
text-align: center;
background-color: #fff;
line-height: 1em;
}

p.photo a {
display: block;
float: left;
margin: 0;
padding: 4px 4px 9px 4px;
border: 1px solid #ccc;
border-top-color: #eee;
border-right-color: #ddd;
border-bottom-color: #bbb;
background-color: #fff;
text-align: center;
}
p.photo a:hover {
border-color: #ccc;
background-color: #eee;
}
p.description {
clear: left;
}

The definition of separate colors for each side gives the border on the image the desired
inset look. We could have used the inset border-style that CSS already provides, but the
colors for the light and dark borders differ between browsers.
To create the look we want, we use a 1px, solid border, and specify #ccc as its color.
We use a slightly lighter shade (#ddd) for the right border, and darker shades for the
top (#bbb) and left (#eee) borders. The result fools the eye into seeing a threedimensional
edge.
The addition of a 5px margin to the lower edge distances the outside border from the image.
It’s aesthetically pleasing to have a larger space on the bottom than around the sides, and it
works well with the Polaroid-style look we’re trying to create.
The link that contains the image has a solid border of 1px, which uses the same colors as
before, although they’re reversed to create an “outset” look (we’ve switched the top and
bottom colors, and the left and right colors). We also add a padding of 4px. This padding,
plus the 1px border we’ve added to the image and the 1px border we’ve applied to the link,provides us with the 6px value that we’ve applied for the h1’s and paragraph’s margins, and
helps the edge of the text line up with the image, instead of the outside border.
To ensure that the outside border that’s applied to the link containing the image snaps
snug to that image, we float the paragraph and link to the left, and apply a 75% width to the
paragraph. This width is a workaround that was developed for Internet Explorer to avoid
the outside border filling the entire width of the page in that browser; the page still renders
as expected in other browsers.
Next we’ll add some hover styles: a subtle, light gray background, and one color for the
border for all four sides. The description paragraph is then set to clear: left, to clear the
float from the above-image paragraph.

Image Galleries

Imagine that you have just walked into an art gallery. The pieces of art hang on well-lit
expanses of white wall. There’s ample spacing between the works, so that each has its own
presence without any distraction from those adjacent. The rooms are very spacious and it’s
easy to find your way around the building. As you wander from room to room, you notice
that within each of these rooms the works of art relate to each other. You know that, behind
the scenes, a curator has put a lot of thought into the experience you have in this gallery
while viewing the art.
A gallery web site should be conceptually similar to a real-life gallery such as this.
You want to provide a clean, flexible space for your images to be displayed, with a
corresponding sense of order and cohesion.
Creating an Image Page
The web page that displays your photograph, along with a title and possibly a description,
is the equivalent of the expansive, blank walls in a real-life gallery.
Let’s walk together through a basic example of how to create an image’s page. We’ll
create the markup; add some style for the typography and colors of the images’ titles
and descriptions; style frames, margins, and layout; and provide the placement of the
navigational thumbnails.
Building a Basic Example
As always, our image’s page requires that we use well-structured markup:
photo.html (excerpt)
“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
lang="en">

Photo Gallery





Photos » Album:
Firenze, Italia 2006
»
Castello Il Palagio Orchard


Tweaking the CSS

sIFR-screen.css, contains several default rules for h1 to h5 elements that help to determine
the dimensions of the Flash replacements. In order to understand how you should use
these rules, you need to understand how sIFR does its job and how fonts relate to one
another.
You can see in Figure 1.14 that the Flash replacement and the HTML text are different
lengths when displayed side by side. This discrepancy arises as a result of the fact that
the font used in the Flash replacement differs from that used in the HTML, and because
different fonts have different character metrics (including width, spacing, and so on).
This difference in length becomes a particular problem when a line of text starts to wrap
onto the next line. If the HTML text isn’t wrapping but the Flash text is, sIFR will shrink
the size of the Flash text so that it fits onto one line. This means that the size of the Flash
replacement may be inconsistent, depending upon the number of characters in the HTML
text. Conversely, if the HTML text is wrapping when the Flash text

Including the CSS

Inside the sIFR package is a CSS file called sIFR-screen.css, which we should include if we
want the Flash replacement headings to display properly. This CSS hides any HTML text
that has been replaced by Flash, so we don’t see the double

Customizing the JavaScript

There’s one script file that we need to include on the web page, and that’s sifr.js—you’ll
find it in the package you downloaded from the official sIFR site. To start out, it just needs
to be inserted in the head of your page:
flash-replacement.html (excerpt)

You’ll need to take a look inside the JavaScript file to configure the file specifically for the
site. You don’t need to be concerned with most of it—it’s 11KB of tricky Flash detection
and DOM manipulation—but right at the bottom you’ll see these few lines:
if (typeof sIFR == “function" && !sIFR.UA.bIsIEMac)
{
sIFR.setup();
}
Don’t remove any of that code; you’ll have to insert some of your own code in order to
indicate which headings you want to replace and what you want to replace them with:
scripts/sifr.js (excerpt)
if (typeof sIFR == “function" && !sIFR.UA.bIsIEMac)
{
sIFR.setup();
sIFR.replaceElement(named({sSelector: “h1",
sFlashSrc: “flash/cooper_black.swf", sBgColor: “#FFFFFF",
sColor: “#0066CC", sWmode: “transparent"}));
}
sIFR.replaceElement specifies a replacement rule that you want sIFR to apply. You can have
as many of these as you like, each effecting a different type of element. The function takes a
number of arguments that effect the display of the Flash replacement.
There are a few of these arguments, but the named ones you’ll use most often .

You’ll notice that the heading is now shown twice. The upper display is the Flash
replacement, the lower is the HTML text. They’re both displayed simultaneously because
we haven’t yet included any of the special sIFR CSS.

Supplying the Typeface

The quest to allow web users access to a wider range of fonts on HTML pages has been
regularly thwarted by patchy browser implementations and the legalities of sharing
typefaces. sIFR circumvents these limitations by embedding a particular typeface inside
a Flash file. In order to use a particular font on your site, you have to open up the special
sIFR Flash template and create a new .swf file that copies the font from your computer.

Supplying Basic Markup and CSS

It’s more likely with Flash replacement than with image replacement that some of your
users will experience the degraded version, so you should pay careful attention to the
styles that they will see if Flash and JavaScript are turned off.
Let’s imagine that the font we’d really like to use for our h1 headings is Cooper Black, but
we know that not many people have that on their computers. Instead, we’ll have those
users view our headings in Georgia, or some similar serif font:
flash-replacement.css (excerpt)
h1 {
color: #06C;
font-size: 250%;
font-family: Georgia, serif;
line-height: 1.45em;
}

Flash Replacement

One major downside of image replacement is that it requires a lot of manual labor.
Every heading that you want to include on a site has to be created in Photoshop, cut up,
saved as an image, and included in your CSS.
If you’re creating content regularly, this work can become very time consuming;
sometimes it’s just impossible. Imagine a site that has a content management system
with multiple authors, none of whom have access to—let alone know how to use—a
graphics program. It’s simply not feasible to have someone there just to create imagereplaced
headings.
But what if you had a system that automatically created nice headings, in a typeface of
your choice, without you having to do anything to the HTML? That would be heaven. And
there is such a system: sIFR.
Scalable Inman Flash Replacement is now in its second version (with a third already in
beta) and, after being around for a couple of years, is rock solid. You’ll need to download
some source files from the sIFR homepage in order to get it going.5 Don’t worry, I’ll wait
around while you download it.
sIFR works like this: you include a JavaScript file on your pages that scans for headings,
copies the text from inside those headings, and uses that text inside a Flash object that
replaces the HTML text. The Flash object contains the font you want, so the text is
automatically formatted the way you want it, and you don’t have to do any customization
work. sIFR also scales the Flash object appropriately to fill the same amount of space that
the HTML text occupied, so your text replacement will be the same size.
Technically, the HTML text isn’t replaced, it’s just hidden, so the text remains fully
accessible. If Flash isn’t available, the sIFR JavaScript detects that and leaves the page
untouched; if JavaScript isn’t turned on, the page will remain in its normal state. This way
users see nice headings if their browsers allow it, but if their browsers don’t handle these
headings, they degrade to perfectly readable text.
For a beautiful example of sIFR, take a look at the Noodlebox site.6 Noodlebox’s
introduction text and other headings all use a custom typeface that reinforces its identity
and also produces a more refined design.

Figure 1.11 shows the result when sIFR
is unavailable, due to the user’s lack of
either Flash or JavaScript. The HTML
text acts as a backup and provides an
approximation of the designer’s real
vision.
It’s a win–win situation! Those users
who have Flash and JavaScript reap
the benefits; those without are none the
wiser.

Providing Additional Markup

The way to provide “alternative” text for those users without images enabled is to leave
the HTML text where it is, but physically hide it using an image. So, instead of moving
the text itself, we cover it up with the image we’re using to replace it. The image will appear to those users who have images enabled, while the text will display for those
who don’t.
This technique requires us to use a small amount of additional markup inside the h1:
additional-markup.html (excerpt)


Going to the snow!


The extra span inside the h1 gives us an element to which we can apply a background
image to cover up the HTML text.
We do this by positioning the span absolutely:
additional-markup.css (excerpt)
h1 {
position: relative;
width: 389px;
height: 43px;
overflow: hidden;
}
h1 span {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-image: url(images/title_snow.gif);
background-repeat: no-repeat;
}
Positioning the span absolutely moves it from the document flow, so the text of the h1 will
naturally flow underneath it. Once the background-image has been moved onto this span, the
span will cover up the h1’s text.
The h1 is positioned relatively because any absolutely positioned elements nested inside a
relatively positioned element will base their origin coordinates on the relatively positioned
parent. Consequently, when the span’s left position is set to 0 and top position to 0 it will
position itself at the top left of the h1, instead of relative to the entire page.
In addition to changing the h1’s position, we explicitly set its height and width, and set
overflow to hidden. The HTML text remains in its normal position, so if the text grows
beyond the dimensions of the image, it will begin to peek out from behind the image. To prevent this problem we make the h1 exactly the same size as the image, and use overflow:
hidden to cut off any text that exceeds the boundaries of the h1.
Also, the span must be the same size as the image if all of the image is to be displayed; we set
the height and width of the span to 100% so that it will automatically expand to the size of the
h1. We could explicitly set its size in pixels, but, using the technique I’ve shown here, we only
have to enter the exact pixel size on the h1—it’s always nice to save time on maintenance!
This method produces exactly the same result as the text-indent image replacement
technique. The only difference, which you can see in Figure 1.9, is that if the image is
turned off, users will still see relevant text there to tell them what the title’s meant to be.

This text can be styled normally, as it would if we were using plain HTML headings:

h1 {
position: relative;
width: 389px;
height: 43px;
overflow: hidden;
font-size: 175%;
line-height: 43px;
text-transform: uppercase;
}
The major disadvantage of this method is obvious—the additional markup. We’re
sacrificing semantic purity for accessibility and usability. It’s a sacrifice I normally make
willingly, to create a better experience for most users, but it’s good to know that there is a
“pure” markup solution if you need it. You’ll have to weigh up the options as they apply to
your own situation.

Using Text-indent

With text-indent image replacement, a negative text-indent is used on the text inside the
heading element to make it move off the left edge of the screen, effectively placing it out of
view.
CSS is then used to put a background image inside the h1, which means that your heading
can adopt any design you like.
Why is a negative text-indent necessary? We could just declare the properties that display
the background image:
h1 {
height: 43px;
background-image: url(images/title_snow.gif);
background-repeat: no-repeat;
}
But the HTML text of the heading would still be visible,

There is, however, one disadvantage of text-indent image replacement. If the image doesn’t
display, there’ll be a meaningless gap in the page, as shown in Figure 1.8. This means that
users who may have CSS turned on but images turned off—or even users who are just
waiting for the image to download—won’t see any alternative text, so they’ll have no idea
what the heading is.

Image Replacement

There are almost as many techniques for image replacement as there are web developers.
The concept behind all these image replacement tricks is that the text normally displayed
by HTML is hidden and replaced by an image. This means that any user with a CSSenabled
browser will see the replaced text, but user agents that don’t support CSS will just
see the plain text.
Let’s say we have some HTML like this:


Going to the snow!






Our aim is to hide the text of the level 1 heading—“Going to the snow!”—and replace it
with an image.
There are many different ways of using image replacement. All have their advantages and
disadvantages, but here are the two most useful ones.

Hierarchy


One function of headings is to define the hierarchy of a web page. The semantics behind
HTML document structure naturally include some sense of hierarchy, with headings
ranging from the big and bold h1 to the diminutive h6. However, from a visual perspective,
it’s the task of the designer to indicate this hierarchy so that the site retains a sense of
design and personality.
Khoi Vinh’s web site, Subtraction, which you can see in Figure 1.1, is an excellent example
of using just font size and weight on headings to create an immediate sense of hierarchy.
The layout grid for this site also helps to create a visual structure, but what if we were to
convert the structure of the page into a linear layout? As shown in Figure 1.2, the headings
themselves still convey a lot of the information required by the user while retaining the
site’s character—insofar as Helvetica can adequately express a site’s character all by itself
nowadays!

A List Apart web site takes a very different tack from
Subtraction when differentiating its headlines from its content.2 Weight and font size
are used again, but these effects are combined with different typefaces, colors, and
capitalization for the article headings and author names.
At first glance, it could be said that the A List Apart headlines are more differentiated than
those on the Subtraction site, but at the end of the day it’s all about what style ties into
a site’s particular design. Subtraction’s style is more conservative and minimalist, A List
Apart’s more ornate. The designers of both sites have done excellent work in creating a
visual hierarchy within the respective frameworks.
Because of the well-formed semantics underlying this visual hierarchy, CSS is well suited
to manipulating the appearance of each and every heading to produce the visual effects we
require for a clear structure.
However, hierarchy is but one aspect of headings. Let’s look at that other, more elusive,
aspect—identity.