The old way to style content

In the olden days, when you wanted to change the font of your HTML, you would have to use a <font> tag, like <font face="Times">...

If you wanted to set the background colour and border width of a table and the amount of padding in each cell, you'd put <table border="1" bgcolor="silver" cellpadding="3" cellspacing="0">

There were a few serious problems with this type of approach:

  1. Because your styles are embedded into your content, it's laborious to write.
  2. You have to repeat the same styles over and over again, wherever they appear on a page and across your whole site.
  3. It's also lots of work to change the style of your site, as each page and every piece of styling has to be edited one-by-one.
  4. It adds extra size to every file.
  5. The same styles are seen by everyone, no matter whether they're viewing on a monitor, listening to the content, browsing on a PDA, or printing the content.

How CSS works

CSS is a new smarter way to apply style properties to HTML elements.

You can set all kinds of style properties, like border, font, background, spacing etc. (We'll go into these in detail later.)

There are 3 main ways CSS styles can be applied:

  1. Inline with HTML
  2. On-page style definitions
  3. Separate style sheets

1. CSS Inline with HTML (use with caution)

You can write CSS directly into an HTML tag. In the example below, don't worry about the specific styles for now. (The <div> element is simply a box, as you'll see in the introduction to HTML.)

Code

<div style="background-color:#ff3; border:1px solid black; color:red; font-size:150%; padding:1em;">I am a styled div!</div>

Looks like

I am a styled div!

This approach is very similar to the old-style inline HTML styling, and suffers from all the same problems.

It is only appropriate where the styling really is one-off. If there's a possibility that you'll use the same styling elsewhere, you really should use one of the alternative methods below, because it will save time and effort if you have to change your styling later.

2. On-page CSS definitions

A better way to write CSS is to define your styles once in the document (preferably in the document <head> section).

Code

<head>
  <style type="text/css">
    div {
      background-color:#339;
      color:#fff;
      padding:15px;
      border-bottom:5px solid red;
      margin-bottom:15px;
    }
  </style>
</head>

<body>
  <div>
    I am affected by the definition above..
  </div>
  <div>
    So am I, but the styles are only defined once.
  </div>
</body>

Looks like

I am affected by the definition above..
So am I, but the styles are only defined once.

The benefit of this over the previous approach is that the style definitions are only written once. In this case, they'd apply to any <div> elements on the page.

Use this method when you want to apply similar styles to multiple elements on a page, but not on any other pages. To apply the same styles to things on multiple pages, you need to use method 3 below.

3. Separate style sheets

The ideal way to define styles for your HTML elements is to put the definitions in a separate stylesheet document. Then, any page that includes the CSS file will inherit the same styles.

(Another benefit of this method is that it enables you to use different style sheets for different user agents - which we'll address in a later article.)

HTML pages can include as many CSS files as you need, and the styles will be combined together (according to inheritance & cascading rules we'll get onto later).

Code (2 different files):

my-styles.css
body {
  background-color:#ccf;
  letter-spacing:.1em;
}
p {
  font-style:italic;
  font-family:times,serif;
}
my-html.html
<head>
  <link href="my-styles.css" media="screen" rel="stylesheet" type="text/css" />
</head>

<body>
  <p>Here is some content in a paragraph.</p>
  <p>Here is another paragraph.</p>
</body>

How it looks

Here is some content in a paragraph.

Here is another paragraph.

Note that, again, the styles I defined once have been applied to more than one qualifying element. The difference between this method and the one above is that, because I've defined the styles in a separate stylesheet, all I need to do to apply those styles to another HTML page is include the same stylesheet reference.

Advantages of separate stylesheets

There are lots of advantages of working this way, including:

  1. Reduced filesize - each CSS definition is written only once
  2. Reduced bandwidth - web browsers will remember (cache) the contents of CSS file, so don't need to download the file again with each new page that uses it
  3. Easier updating - you only have to change styles in one place for them to change site-wide
  4. Separates the work of styling and creating content - you can create all your HTML pages first, applying sensible semantic markup, class names and IDs, and then do all your design work later on your style sheets.

How CSS styles apply to HTML elements

There are a few basic rules that govern which (separately-defined) styles apply to what elements. Fortunately, these are relatively simple and logical, once explained. I'll go through them one at a time.

1. Applying to HTML elements themselves

In CSS, if you want some styles to apply to HTML elements of a certain type, you write the HTML element type, followed by style definitions all contained between curly braces and separated with semicolons.

p {
  font-weight:bold;
  line-height:1.3em;
}

<p>The styles above will apply to me because I am a paragraph.</p>
<div>But they won't apply to me.</div>

The code above will apply bold text and slightly increased line-height to the contents of any element of type <p> (i.e. paragraphs).

2. Applying to elements with class names

You can give any HTML element one or more class names. In CSS, these are defined with a preceding period (full-stop).

Styles derived from classnames (normally) override any of the same styles defined for the HTML element type (more on this later).

<style type="text/css">
  .custom {
    color:red;
  }
</style>

<p class="custom">Applies to me.</p>
<p>But does not apply to me.</p>

This is extremely useful, because you can define style characteristics under a single class, and then apply those characteristics to multiple elements by giving them that class (even if they're different types of elements).

3. Elements can have multiple classes

HTML elements can have more than one class. Class names must be separated in the class property with spaces.

<style type="text/css">
  .makered {
    color:red;
  }
  .yellowbg {
    background-color:#ff0;
  }
</style>

<p class="makered yellowbg">Both styles will apply to me.</p>

4. Applying styles by id property

HTML elements can have id properties as well as class names.

While there can be multiple elements that share any class name, there should only be one element with a particular id property. This isn't important in CSS, but it is important in DHTML, so good practice to follow.

Styles are associated with particular ids in CSS by prefixing the name with a hash/pound sign (#).

Another thing to remember is that properties inherited from an id will overwrite properties an element gets from its class (or from its HTML element type).

<style type="text/css">
  #banner {
    color:green;
  }
  .special {
    color:red;
    background-color:#ff9;
  }
  div {
    color:blue;
    font-weight:bold;
  }
</style>

<div id="banner" class="special">
  This text would come out green, because the ID trumps the class and the element type.
</div>

Note that, in the example above, the font-weight:bold; and background-color:#ff9; styles still apply to the text, because it's only the color: property that is overwritten by the superior style definition.

5. CSS styles apply to elements within elements, unless overwritten

Taking the above example...

<style type="text/css">
  div {
    color:green;
  }
  .special {
    color:red;
    background-color:#ff9;
  }
  #banner {
    text-decoration:underline;
    font-weight:bold;
    color:blue;
  }
</style>

<div>
  This text is only inside the div...
  <p class="special">
    This text is inside the div and inside the paragraph...
    <span id="banner">
      This text is inside the div, paragraph with classname and span with id.
    </span>
  </p>
</div>

The first bit of text gets its green colour because it's inside the div.

The second bit of text becomes red because it's inside something with class="special", which overrides the previous color property. It also gets the additional background-color.

The third bit of text is inside all three elements, but the properties it gets from its id overrule any other conflicting style properties it gets from the other elements. Note that it has also inherited the background-color from the special paragraph, because the id's styles don't specify a background.

Do you love our approach to crafting simple & effective web sites that just work for people?

We'd love to hear about your web strategy. Contact one of our team today!

Search this site
Pro Tips
Learn how to make fantastic web site designs..
Buy "Save the Pixel" now!
On “Save the Pixel”
Clicss templates, great robust useful CSS templates from £40
Share this Article
Send to a friend now&hellip
Follow Ben Hunt on Twitter
Floor 3
111 Buckingham Palace Road
London
SW1W 0WQ
UK
Phone
+44 (0)207 1600 989

Articles + tutorials in HTML & CSS Production

Overview
Menu of all our articles on HTML, CSS and web page production
CSS
List of our CSS articles
Introduction to CSS
Beginner's introduction to Cascading Style Sheets (CSS)
HTML
List of HTML articles
Introduction to HTML
Introduction to basic HTML tags and the structure of HTML documents.
How HTML, CSS and JavaScript work together in making web pages
Best practice for using HTML, Cascading Style Sheets, and JavaScript together to make web pages.
Building a web page with HTML + CSS for complete beginners
Learn what HTML is and how to build a website from scratch. A guide to creating a web page using HTML and CSS for people with no prior knowledge
Block vs Inline display style in CSS
HTML elements can be displayed either in block or inline style. The difference between these is one of the most basic things you need to know in order to use CSS effectively.
Inheritance and Cascading Styles in CSS
Introduction to how styles apply in CSS through inheritance and cascading.
HTML Lists
The basics of lists: unordered, ordered and definition lists covered.
HTML Tables
The basics of tables. When to use tables, and how to do it. Includes tips on colspan and rowspan properties, and the col and colgroup tags.
Anatomy of HTML tags
Describes the common attributes that can feature in your HTML tags.
Introduction to Semantic HTML
Explains what semantic HTML, or semantically-correct HTML, is and how it benefits web development.
Semantic HTML Handbook - Benefits of Writing Semantic HTML (Nov 15 2009)
Free article on Semantic HTML. Why you should learn Semantic HTML. Benefits for SEO and code reuse explained.
Complete List of HTML/xHTML Tags, With Guide to Proper Semantic Use (Nov 15 2009)
My Complete List of HTML/xHTML Tags, With Guide to their Proper Semantic Use
A Few Tips and Tricks to Write Better Semantic HTML (Nov 15 2009)
Tips and tricks for writing better semantic HTML or xHTML from a professional web producer
Web Page Production using xHTML and CSS (ebook)
This new 61-page ebook provides a worked example of web production, taking you through the entire process from a Photoshop page design, to a working HTML page template.
Datasheet-style form using HTML, CSS and JavaScript
Make a datasheet-style web form using HTML, CSS and JavaScript
Tabular list-style form using HTML, CSS and JavaScript
Create an appealing tabular list using HTML, CSS and JavaScript
Complete HTML tag reference
Our complete guide to HTML and xHTML tags, and their proper usage.
Keeping your content in order of priority with flexible CSS layouts
This article shows you how to use CSS floats to achieve any column layout, while keeping your most important content highest on the page.