How to use any font you like with CSS3

Default avatar.
January 10, 2013
How to use any font you like with CSS3.

ThumbCustom fonts are among the most potentially appealing aspects of CSS3 for designers. With the font-face rule, you can render any font you have online within your web page text, regardless of whether the user has it installed or not.

As with most CSS3 techniques, the basic code is pretty simple, but the practical reality is a little more complex.

In this short tutorial, we will run through the basics of including custom fonts in your pages.

Upload the font

First, make sure that the font you want to use is licensed for web use. Almost all free fonts can be used on a website and many premium fonts are available with a license that covers web usage.

Next upload your chosen font to your server. You may wish to store it in a dedicated fonts” directory but this is optional.

Remember to include the files for any variants of the font you plan on using, such as bold or italic. You can use EOT (Embedded OpenType) files for Internet Explorer and either OTF (OpenType) or TTF (TrueType) for the rest. (Additional options include WOFF (Web Open Font Format) and SVG (Scalable Vector Graphics) but we will stick to more common types here.)

Make a note of where the font files are stored on your server.

Add a font-face section to your CSS code

Open the HTML or CSS file for the page you are working with. Add a font-face declaration to the style code:

@font-face {
}

First inside the font-face section, give the font a name you can later use to refer to it:

font-family: 'lovelyFont';

Next, still inside the font-face section, provide the location of the EOT file:

src: url('fonts/lovely_font.eot'); 

Alter the location and name of the font as necessary. Next add an OTF and/​or TTF font:

src: 
	url('fonts/lovely_font.otf') 
src: 
	url('fonts/lovely_font.ttf') 

This is the bare bones of the necessary code, which will be sufficient in many cases. However, there are additional steps we can take to make the code more reliable. First extend this section to include an indicator of the font file type:

src: 
	url('fonts/lovely_font.otf') 
	format('opentype');
src: 
	url('fonts/lovely_font.ttf') 
	format('truetype');

As another optional efficiency measure, we can get the browser to check for a local copy of the font in case the user already has it. Extend your code again as follows, adding the local section before specifying the URL, so that the font is only downloaded if necessary:

src: 
	local('Lovely Font'),
	local('Lovely-Font'),
	url('fonts/lovely_font.otf') 
	format('opentype');
src: 
	local('Lovely Font'),
	local('Lovely-Font'),
	url('fonts/lovely_font.ttf') 
	format('truetype');

The addition is the same for both OTF and TTF. We specify the font name after the local keyword.

In this case we have two lines specifying the local font because the font name has more than one word in it. The hyphenated version caters for the way font names are stored on certain operating systems — this additional line is not necessary if the font only has a single word in its name. If you happen to know that a font can have different names on different systems, include each of the possibilities in your local section.

Apply the font to page elements

Finally we can apply the font to the page elements. In the CSS code for a particular element, or group of elements, simply specify the font name you used, including any fallbacks you choose:

div { font-family: 'lovelyFont', sans-serif; }

Include font variants

If, for example, you want to use a bold version of your font as well, simply include another font-face section with the bold font file URL and a declaration of font-weight:bold;”. Specify a font weight of bold for any element with the custom font applied to it and the browser will automatically render the bold version:

/*default version*/
@font-face {
	font-family: 'lovelyFont';
	src: url('fonts/lovely_font.eot'); 
	src: 
		local('Lovely Font'),
		local('Lovely-Font'),
		url('fonts/lovely_font.otf') 
		format('opentype');
}
/*bold version*/
@font-face {
	font-family: 'lovelyFont';
	src: url('fonts/lovely_font_bold.eot'); 
	src: 
		local('Lovely Font Bold'),
		local('Lovely-Font-Bold'),
		url('fonts/lovely_font_bold.otf') 
		format('opentype');
	font-weight: bold;
}
/*container element*/
div { font-family: 'lovelyFont', sans-serif; }
/*span elements inside the container div*/
span { font-weight: bold; }

That’s it!

Do you use CSS3 to expand the type faces available to you? Do you use a service like Adobe’s Typekit or Google’s Webfonts? Let us know in the comments.

Featured image/​thumbnail, fonts image via Shutterstock.

Susan Smith

Sue Smith is a Web/​software developer and technical writer Äì see BeNormal Development for details. Currently focusing on mobile application development for the Android platform and HTML5, Sue specialises in writing educational material on programming topics for Web publication. Follow Sue on Twitter @BrainDeadAir or email [email protected]​benormal.​info.

Read Next

AI Changes Everything and Nothing

The marketing frenzy surrounding the recent flood of AI-powered apps and services has caused some observers to question…

15 Best New Fonts, March 2023

Fonts are one of the most critical tools in any designer’s toolbox. With clever use, you can transform a design from hu…

20 Best New Websites, March 2023

We have another exciting collection of the best new sites on the web for you. In this month’s episode, there are severa…

Exciting New Tools for Designers, March 2023

We have invoicing apps and scheduling tools. Some resources will save you the trouble of hiring a designer or developer…

Free Download: Budget Planner UI Kit

Designing an onboarding process can be tricky; there are so many different options, and if you get it wrong, you could …

3 Essential Design Trends, February 2023

There’s a common theme in this month’s collection of website design trends – typography. All three of these trends show…

Free Download: Education Icons

Icons are essential for successful web design. They provide an eye-catching, unobtrusive way to communicate important i…

15 Best New Fonts, February 2023

The fonts you embed in your website transform the design and can mean the difference between an extraordinary brand exp…

Unlocking the Power of Design to Help Users Make Smart Decisions

Users are faced with decision-making on websites every day. The decision-making process can be far more complex than it…

20 Best New Websites, February 2023

The quality of websites in 2023 has moved up a gear, with designers cherry-picking trends as tools, embracing new ideas…

AI’s Impact on the Web Is Growing

Despite the massive strides tech has taken in the last few years, we rarely see a week as tumultuous as this. When your…

Exciting New Tools for Designers, February 2023

No matter what you’re working on, you can guarantee that there’s a cool app, resource, or service that will help you do…