Skip to main content
🎨 CSS as a design system·Module B4 · Lesson 8
TaskStyle three text elements: h1 with letter-spacing -0.02em (tighten), .eyebrow with letter-spacing 0.08em + text-transform uppercase (loosen all-caps), p with normal default.

letter-spacing & word-spacing (tracking)

60 XP5 min
Theory

When to add it, when to remove it

h1 { letter-spacing: -0.02em; }    /* TIGHTEN large headings */
.eyebrow { letter-spacing: 0.08em; text-transform: uppercase; }   /* loosen ALL CAPS */

Two rules:

  1. Tighten large headings (negative letter-spacing). Display fonts space-out at large sizes; -0.02em to -0.04em snaps them back.
  2. Loosen ALL CAPS labels (positive letter-spacing). Uppercase characters are spaced for readability at body size; for an "EYEBROW" label or button text in caps, 0.05em to 0.10em reads better.

Use em, not px

h1 { letter-spacing: -0.02em; }       /* scales with font-size */

If you set -1px, a 16px heading gets the same tightening as a 64px heading — way too aggressive at the small size. em is proportional, always correct.

word-spacing

.relaxed { word-spacing: 0.2em; }

Less commonly useful. Justified text occasionally needs it. Body paragraphs almost never do.

When NOT to touch them

Default letter-spacing in modern fonts is already tuned by the type designer. For body text at 16px, leave letter-spacing: normal. Only adjust for displays (big) or ALL CAPS labels (loosen).

🔒

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial — card required, cancel anytime.

Sign up — free trial →

First 15 lessons in each track are free. No card needed for those.

PreviousNext lesson →

Get one Python or web tip a day — by email

Short, hand-written, no spam. Unsubscribe in one click.