Font Control
In our earlier section about
font styles, we looked at the effects of the em
and strong elements on text. While these
elements enable you to apply some simple font changes
(italic, bold), it would be nice to have more options.
Now that we’ve covered the basics of style sheets, it’s time to examine more sophisticated methods of font control. CSS font control is divided into three main components:
-
font-family: What is the name of the font? -
font-size: How big is the font? -
font-weight: Is the font bold? -
font-style: Is the font italic? -
text-decoration: Is the font underlined, struck through, …?
We’ll tackle each of these properties one-at-a-time.
The font-family Property
The font-family property selects the name of
the font you wish to use. This component is pretty
straightforward:
body { font-family: times new roman }
This CSS rule specifies that all text in the body
should be in Times New Roman. Times New Roman isn’t
necessarily a great font to use on the web, but it should be
familiar to anyone who uses a word processor.
Specifying Multiple Fonts
One of the unavoidable issues of web design is that you can’t count on any particular browser rendering your page exactly the way you want it to be. Fonts are no exception. You might want your text to use some fancy font, but what if your reader’s browser doesn’t have that font available?
To resolve this issue, font-family enables
you to specify multiple fonts. Here’s an example:
body { font-family: georgia, palatino, times new roman, serif }
The list of fonts proceeds in descending order of importance. The browser first tries to display the font Georgia. If Georgia is not available, it will try Palatino; failing that, Times New Roman; and if all hope is lost, a generic serif font.
There are some fonts that are usually available on on most people’s browsers. These include Times New Roman, Georgia, Palatino, Lucida, Impact, Trebuchet MS, Verdana, Comic Sans MS, Arial, Courier New, and Courier. However, even this impoverished selection is not always available. Worse, some of these “canonical” fonts are ill-suited for reading on a computer screen. Many websites declare their fonts to be “Arial, Helvetica, sans-serif”. But as accessibility expert Joe Clark says in his book Building Accessible Websites:
“Don’t use Helvetica. Typographic neophytes think Helvetica is “legible.” Try running a few tests with confusable characters like Il1i!¡|, 0OQ, aeso, S568, or quotation marks. Related grotesk typefaces like Univers suffer similarly. (One more time: Don’t use Arial. It’s a bastardized variant of Helvetica, it’s ugly, it bespeaks unsophistication, and it sticks you with all the same confusable characters as other grotesks.)”
Generic Fonts
If you specify the keyword “sans-serif” at the end of a list of fonts, this directs the browser to use some form of sans-serif. Specifying a generic font keyword is always a last resort, to be used if none of the fonts you name in your list are available.
There are five varieties of generic fonts, but only the first three are all that important.
-
sans-serif: lacks decoration or flaring at the end of each stroke.Examples include Verdana, Arial, and Geneva.
-
serif: has decoration or flaring at the end of some of its strokes.Examples include Times New Roman, Garamond, and Georgia. Printed materials often use serif fonts, because the serifs make the characters easier to distinguish and thus, easier to read. However, on the web, the reverse can be true. On paper, the little complicated serifs are sharp and easy to distinguish, but on a fuzzy computer screen, it’s often easier on the eyes to use sans-serif.
-
monospace: uses the same width for each character, often used to represent computer code or terminal text.Examples include Courier, Courier New, Monaco, and Andale Mono. The most well-supported monospace fonts are Courier and Courier New.
-
cursive: designed to mimic handwriting.Examples include Brush Script MT, Aristocrat LET, and Comic Sans MS. The most well-supported cursive font is Comic Sans MS, a cartoony font designed to resemble a child’s writing. Most other cursive fonts are not well-supported.
-
fantasy: highly decorative.Examples include Impact and Copperplate. Most fantasy fonts are not well-supported.
The font-size Property
The font-size property enables you to
specify your font size in a number of absolute and relative
ways:
-
points (”
font-size: 12pt“): Measured in “points” (units of 1/72 of an inch). -
pixels (”
font-size: 14px“): Measured in screen pixels. -
percentages (”
font-size: 150%“): Measured relative to the default font or the parent element’s font. A font size of “75%” would shrink the font by a factor of 3/4. -
em-widths (”
1.2em“): (Not to be confused with theemelement.) Measured relative to the default font or the parent element’s font. The value “1.0em” is the same as multiplying by one. -
absolute keywords (”
x-large“): Specifies one of seven sizes:xx-small,x-small,small,medium,large,x-large, andxx-large. The exact interpretation of what constitutes “medium” or “x-large” varies from browser to browser. -
relative keywords (”
larger“): Bumps the font up one size or down one size from its default or inherited size. The options arelargerandsmaller.
Note
Always keep in mind that people can and will override your font size settings. All browsers provide a text-zoom function, and people with weak eyesight (think, “people over thirty”) are quick to make use of it.
Modern browsers handle these ways of specifying the font size reasonably well, although there are some inconsistencies. But in the older browsers, font size handling is spotty at best. For example:
-
Old versions of Internet Explorer used a default font size of
smallinstead ofmedium. -
For the size keywords, Netscape 4 used a huge scaling factor between the different size keywords. Using
xx-smallorx-smalloften made the text unreadable,x-largeandxx-largewere a sight to behold. -
The only way to get consistent font sizes across all the old browsers was to use pixels (
px). However, due to a bug in old versions of Internet Explorer, using pixels disabled Internet Explorer’s ability to resize the text! That’s why you’ll see some websites with “text resize buttons”, even though these buttons shouldn’t be necessary.
Although these issues are generally improving over time, it can be quite a struggle to get your font sizes looking consistent and resizing properly even in the newer browsers.
Tip
The Yahoo! User Interface team provides a
free
fonts.css file that solves many of
these consistency and resizing problems for you.
Additional font-styling
Beyond specifying the font name and its size, you can further alter the font’s appearance. We’ve already covered how to change the text color in “Specifying Colors”. Further alterations include making the text bold (darker), italic (slanted), and much more.
font-weight (boldness)
The font-weight component specifies how
thick the font’s strokes should be. The important values to
know are normal and bold.
You may also specify, bolder, lighter,
or a number from 100 to 900. (400 corresponds to
normal and 700 to bold.) However, these
variations don’t do much even in the newer browsers. In
general, everything 500 and above is just bold. There isn’t
any such thing as really bold, at least not yet.
The normal option removes any boldness that
has already been applied. For example, most browsers display
strong as bold text. If you wanted to take this
effect away, you could write strong {font-weight:
normal}; in your style sheet.
font-style (italic)
The font-style component specifies whether
or not the font is slanted (italic). The most commonly-used
value is italic.
As with font-weight, there is also a value
of normal that enable you to un-italicize
something that would ordinarily be italicized. For a
demonstration, refer to
“An Example: Styling the em Element”.
text-decoration (underlines and
more)
Sadly, text-decoration doesn’t have a
sensible, consistent name (such as “font-decoration”). But
its purpose is similar to the components we’ve already
discussed. text-decoration provides five
options:
-
none: cancels all text-decoration. -
underline: creates underlined text. -
overline: creates overlined text. -
line-through: creates line-through (”strike-through”) text. -
blink: creates blinking text.
Caution
Avoid using blink. Most people hate
blinking text, and many browsers don’t implement this
option anyway.
Take care using underline. Most people
associated underlined text with hyperlinks. Avoid
underlining your (non-link) text unless absolutely
necessary.
An Example: Styling the em
Element
While most browsers display em as simply
italic, there’s no intrinsic reason why this should be so ―
it just happens to be the convention. Let’s say that instead
we want our em elements to be bold, red, and
larger than our default font size. How would we do this?
Example 3.14. Styled Elements
<html>
<head>
<title>Oh Better Far to Live and Die</title>
<style type="text/css">
p {
font-family: courier, monospace;
font-size: 12pt;
}
em {
font-style: normal;
font-weight: bold;
font-size: 14pt;
color: #ff0000;
}
</style>
</head>
<body>
<p>
KING:<br>
For... I <em>am</em> a Pirate <em>King!</em><br>
And it is, it is a glorious thing<br>
To be a Pirate King!<br>
For I am a Pirate <em>King!</em>
</p>
<p>
ALL:<br>
You are! <br>
<em>Hurrah</em> for the Pirate King!
</p>
<p>
KING:<br>
And it is, it is a glorious thing <br>
To be a Pirate King.
</p>
</body>
</html>
We’ve defined a default style for our paragraphs, and the
em element style overrides it. Notice that we
don’t have to specify the font-style for our paragraphs: the
default value is normal (non-italic), and presumably we’re
happy with that.
The font styling that we apply to the p
element cascades down to the em element. Let’s
take a look at what’s happening step-by-step.
-
font-family:-
pelement: set tocourier, monospace. If the browser can display Courier it will; otherwise it will serve up a generic monospace font. -
emelement: inherits its font-family from the parent element,p.
-
-
font-size:-
pelement: set to12pt. -
emelement: set to14pt, overriding its parent.
-
-
font-weight:-
pelement: not set; takes on the default value ofnormal. -
emelement: set tobold, overriding the defaultemvalue ofnormal.
-
-
font-style:-
pelement: not set; takes on the default value ofnormal. -
emelement: set tonormal, overriding the defaultemvalue ofitalic.
-
-
color:-
pelement: not set; takes on the default value of#000000. -
emelement: set to#ff0000, overriding the defaultemvalue of#000000.
-
Font Shorthand Notation
Typing font-family, font-size,
and font-style over and over again can get
cumbersome. Fortunately, there is a shorthand for all of
these properties with a simple name, font. You
need merely place the desired values in the proper order.
This shorthand only encompasses the properties that begin
with “font-”, so if you want to do something else such as
underlining text, you still need to use the appropriate
property, text-decoration.
Here is the order of the properties:
-
font-styleorfont-weightor both -
font-size -
font-family
You may leave out any of these properties except for the
font-family, as long as everything is in the
proper order. Let’s take a look at an example of some
paragraph classes.
Example 3.15. The font Property
p {
font: verdana, sans-serif;
}
p.styled {
font: 12pt verdana, sans-serif;
}
p.reallystyled {
font: bold italic 9pt verdana, sans-serif;
text-decoration: underline;
color: #008000;
}
The default paragraph is just Verdana, in whatever font
size the page default is currently in. The standard class,
styled, is 12pt Verdana. The second class,
reallystyled, is 9pt bold italic underlined
green Verdana.
The font property makes things a bit more
elegant, but keep in mind that some browsers will display
styles that are not properly ordered, while others are more
strict about following the rules. To be safe, always verify
that that your font declarations are in the
proper order before proceeding.
See Also
- Next Page: Borders
- Previous Page: DIV and Span