Skip to main content
← 🎨 CSS as a design systemΒ·Module B4 Β· Lesson 9
TaskStyle .prose to max-width 65ch and add margin auto so it centers. Body has padding 16px and font-family system-ui.

Measure: max-width for readable line lengths

75 XP5 min
Theory

The "ideal measure" for body text

Typography research converges on 45-75 characters per line for sustained reading. Wider lines tire the eye (hard to find next line after long return); narrower lines fragment the rhythm.

.prose {
  max-width: 65ch;     /* ch unit = width of "0" character */
}

65ch reads as "65 zero-widths wide" β€” which for most body fonts at 16px works out to ~520px, fitting 60-70 characters of body text per line.

When to ignore the rule

  • Tables. Tables of data routinely exceed 65ch; that's expected, not a typography failure.
  • Code blocks. Code lines can be 80-120ch. Don't constrain.
  • Headlines. A single-line headline doesn't need a measure limit.

Compose with grid

.layout {
  display: grid;
  grid-template-columns: 1fr min(65ch, 100%) 1fr;
}
.layout > * {
  grid-column: 2;          /* every child centered + max 65ch */
}
.layout > .full-bleed {
  grid-column: 1 / -1;     /* opt out for hero images */
}

A blog-style layout where prose is constrained but heroes are full-width. Two declarations.

Don't use width

.prose { width: 65ch; }     /* breaks on narrow screens β€” overflow */
.prose { max-width: 65ch; } /* shrinks below 65ch when screen is narrow */

Always max-width, never width for content widths.

πŸ”’

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 10 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.