Choosing Headings

Headings and subheadings invite and guide readers through the text. Effective use of large headings grabs their attention. Smaller subheadings help them decide whether or not they want to read a particular section. Headings need to stand out to help anchor the composition.

Using the Same Typeface

You can start off having headlines use your body typeface with double or triple the size. Experiment with the spacing, weight, alignment, and case (such as setting a header in all-uppercase via text-transform), or even color. Reusing the same body typeface not only creates visual harmony, but also reduces the number of fonts to be loaded, boosting performance. If you plan to use foreign languages on your site, the font you choose will need to include language-specific subsets—additional sets of characters required by foreign languages—so your font files will be on the large size to begin with. As a general rule, eliminating any unnecessary font files helps your site load faster.

Combining Typefaces

If you want more distinctive headings, then you will need to find a typeface that can both stand out as an attention grabber and complement the body text. In most cases, it’s not a good idea to pair two serifs (e.g. Bembo and Goudy) or two sans-serifs (e.g. Helvetica and Open Sans). Having two typefaces that are fundamentally similar but still different can look awkward.

One of the recommended methods for combining typefaces is to keep it in a superfamily—typefaces that have different classes (e.g. sans, serif, slab) but share similar structure. For example, if you use FF Meta Serif Web Pro for body text, you can complement it with FF Meta Web Pro for headings. Another suggestion is using typefaces from the same designer. For example, you can pair Egyptienne with Univers since both faces are designed by Adrian Frutiger and they share the same structures. For this book which you are reading, the text face is set in Adobe Caslon Pro, designed by Carol Twombly, and the headings are set in Myriad Pro, designed by Twombly and Robert Slimbach. Do keep in mind that there is no set rule for mixing typefaces. You can choose two complementary or completely distinctive typefaces. Go with your own instinct to find a balanced combination for your project.

Using Em for Headings

When writing CSS for headings, I prefer em units over px units. Em is a relative unit calculated from the font-size property. For example, if I set my body text at 100% (or 16px), then 1em equals 16px, 2em equals 32px, and 2.5em equals 40px. One of the advantages of using em for headings is that when I need to change the text size, I can do it in one place. For instance, if I change my body text from 100% (16px) to 83.1% (13px), all my headings will also scale accordingly. I understand many designers prefer px units because they are easier to figure out the sizes. To convert px to em without doing the math, is a useful for tool to bookmark. If you use Sass, here is a function that does the conversion:

@function calc-em($target-px, $context) {
  	@return ($target-px / $context) * 1em;
h1 {font-size: calc-em(32px, 16px);}  // Outputs 2em

$target is the unit you want to use (32px) and $context is your base unit (16px). Therefore, 32px divided by 16px equals 2em.

To learn more on using em-based units, read Ethan Marcotte’s “Type Study: Sizing the Legible Letter.”

Modular Scale

On the web, you will need at least six levels of headings (h1 to h6), whether you will use them all or not. If you design a typographic system to be used in a content management system (CMS), it is safe to define them all because you never know what level of heading a CMS user’s going to pick in the WYSIWYG editor. You don’t want your heading to fall back to the browser’s default setting and mess up your hierarchy.

To select the appropriate size for headings, I often experiment with em units in the CSS and then reload the page to see the live results. One of the benefits of using pre-calculated modular scales is to help you with choosing proportions. Modular scales are based on a set of numbers that connect to each other in a harmonious relationship. In a Fibonacci series, for instance, each number is a result of two previous numbers added together. If your base size is 16px and you want to chose your headings according to the golden section, the scale of sizes includes 16, 26, 42, 68, 110, 178, and so on.

To help calculate the values for various scales, Tim Brown, Type Manager for Adobe Typekit, and Scott Kellum, Senior Front-end Designer for Vox Media, have developed a useful tool called Modular Scale. To use it, all you have to do is enter in the base text size (1em or 16px is the default) and another base size (for heading), and then select a scale ratio. For example, when you enter 16px for text size, 50px for the largest heading, and select the golden section, you will receive the following values: 1em, 1.194em, 1.618em, 1.931em, 2.618em, and 3.125em. You can then enter those numbers into your CSS:

h1 {font-size: 3.125em;}
h2 {font-size: 2.618em;}
h3 {font-size: 1.931em;}
h4 {font-size: 1.618;}
h5 {font-size: 1.194em;}
h6 {font-size: 1em;}

If you want your headings to be bigger on a large screen, you can find a different set of values using a different scale. For example, let’s keep the text size at 16px, but change 100px for the largest heading, and then select the octave scale. You will get the following values: 1em, 1.563em, 2em, 3.125em, 4em, and 6.25em. You can then plug them in to your CSS’s media query:

@media only screen and (min-width: 42em) {	
  h1 {font-size: 6.2em;}
  h2 {font-size: 4em;}
  h3 {font-size: 3.125em;}
  h4 {font-size: 2em;}
  h5 {font-size: 1.563em;}
  h6 {font-size: 1em;}

Take a look at the demo page or download the code on GitHub to see how different scales work on different screen sizes.