Designing with AI — From Prompt to Product — 6. Advanced Typography: Giving the Brand a Voice

19 min read min de lecture
Chapter 06

Advanced Typography: Giving the Brand a Voice

Chapter 6 of 10 · 60%

Chapter objectives

  • Read a typeface's personality and pair two families without a false note
  • Tune the measure, line heights and micro-typography
  • Set up fluid typography with clamp()

Typography is the voice, not the dressing

The Sereno landing presentation went well — very well, even. But on the way out of the room, the client slipped in a sentence that changes the rest of the project: "It's beautiful. Now I want people to recognize Sereno with their eyes closed." Studio Mango's director looks at you: "That's typography." He's right: an interface is 90% text. Change a product's type and you change its voice — before the color, before the images.

In chapter 2, you set up a size scale at a 1.25 ratio and two families chosen a bit quickly. That was enough to prototype; it's no longer enough for an identity. This chapter goes one level deeper: how to read a typeface's personality, how to pair two without dissonance, how to tune the measure and the micro-typography details that separate the amateur from the professional — and how to make all of it fluid between mobile and desktop with a single line of CSS.

Reading a typeface's personality

A typeface isn't "pretty" or "ugly": it has measurable character traits. Serifs (the small terminals at the ends of strokes) evoke heritage, publishing, warmth; their absence evokes modern neutrality. The stroke contrast — the difference in thickness within a single letter — brings elegance when it's strong, sturdiness when it's weak. The x-height (the size of lowercase letters relative to capitals) affects legibility at small sizes. The open or closed forms of letters like the "e" or the "a" make a typeface welcoming or strict.

You don't need to become a type designer: you need this vocabulary to brief. And the AI is an excellent private tutor here too — show it two typefaces and ask: "compare the personality of Fraunces and Playfair Display in terms of serifs, contrast and letterforms; which one best translates 'warm premium calm' and why?". You get a reasoned analysis, and above all the words to justify your choice to the client tomorrow.

Pairing two families without a false note

The golden rule of type pairing fits in one sentence: frank contrast or total kinship, never the in-between. Two nearly identical typefaces (two geometric sans-serifs, for example) create a subtle dissonance — the eye senses something is off without knowing what. Two frankly different typefaces (a serif with strong character for headings, a neutral sans-serif for body) set each other off. It's the safest duo, and it's Sereno's: Fraunces speaks, Inter steps back.

Second, lesser-known criterion: a comparable x-height. If the heading face has proportionally much larger lowercase letters than the body face, the two will look badly calibrated side by side, even at "identical" sizes. Finally, limit yourself to two families — a third is reserved for very specific cases (code to display, a dashboard figure in display style). Every extra family is loading weight and a risk of cacophony.

Serif + sans contrast (the classic duo)A serif with character for headings, a neutral sans-serif for body. Safe, expressive, legible. It's Sereno's choice: the voice and the silence.
SuperfamilyOne family available in serif and sans by the same designer. Perfect kinship guaranteed, but less creative tension — ideal for very editorial products.
Single variable familyOne variable font whose axes you exploit (weight, width, optical size). Maximum consistency, a single file to load — but the whole personality rests on a single design.
PROMPT
Propose 3 Google Fonts pairings for Sereno, a meditation app, direction "calm, premium, warm":
- for each pairing: the heading face, the body face, and 2 sentences justifying the match in terms of serifs, stroke contrast and x-height
- constraint: the body face must stay impeccable at 16px and weight 400
- exclude: typefaces seen everywhere without intent (no default Montserrat or Roboto)
Then recommend ONE pairing and explain how it stands apart from the other two for this specific product.
Always test a pairing with real texts from the project — actual headings, actual paragraphs — never with pangrams or lorem ipsum. A typeface can be superb on "The quick brown fox" and mediocre on your four-word headings.

The measure: 45 to 75 characters, not one more

The measure is the length of a line of text, counted in characters. Below 45, the eye jumps lines constantly and reading becomes choppy; beyond 75, the eye gets lost on the return sweep and rereads the same line twice. The comfort zone sits between 45 and 75 characters, with an ideal around 65 for long texts. It's the web's most frequent mistake: paragraphs stretched across the full width of a 27-inch screen, i.e. 150 characters and more — unreadable, however careful the rest.

The solution fits in one property: max-width: 65ch on text blocks (the ch unit roughly equals the width of one character of the current font). Couple it with line height: the longer the measure, the more generous the leading must be to help the eye find the next line. And for alignment, one simple rule on the web: left-aligned, never justified — justification creates irregular rivers of space that browsers handle poorly, especially without hyphenation.

css
/* Comfortable reading block */
.prose {
  max-width: 65ch;          /* measure: ~65 characters */
  font-size: var(--text-base);
  line-height: var(--leading-body);  /* 1.6 for this measure */
  text-align: left;          /* never justify on the web */
  text-wrap: pretty;         /* avoids orphan words at paragraph ends */
}

.prose + .prose { margin-top: var(--space-6); }

/* Headings: shorter measure, tight leading */
h1, h2 {
  max-width: 22ch;
  line-height: var(--leading-tight);
  text-wrap: balance;        /* balances heading lines */
}

Fluid typography with clamp()

Your chapter 2 scale is static: an h1 at 3.052rem is that size everywhere. Yet 49px is perfect on desktop and crushing on a 375px phone. The classic answer was a cascade of media queries; the modern answer fits in one function: clamp(min, fluid-value, max). You give a floor size, a ceiling size, and in between a value that breathes with the screen width (in vw). The heading grows continuously from 2rem on mobile to 3.05rem on desktop, with no jumps.

One crucial accessibility detail: never use vw alone in the fluid part. A size in pure vw ignores browser zoom — a visually impaired user zooming to 200% would see the text… stay the same size. The safe formula always combines a rem part and a vw part: clamp(2rem, 1.4rem + 2.6vw, 3.05rem). The rem guarantees that zoom and the system's font-size preferences are respected.

css
:root {
  /* Fluid scale — 1.25 ratio preserved at the extremes */
  --text-base: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);
  --text-lg:   clamp(1.15rem, 1.05rem + 0.5vw, 1.4rem);
  --text-xl:   clamp(1.35rem, 1.2rem + 0.8vw, 1.75rem);
  --text-2xl:  clamp(1.6rem, 1.35rem + 1.2vw, 2.2rem);
  --text-3xl:  clamp(1.9rem, 1.5rem + 1.9vw, 2.75rem);
  --text-4xl:  clamp(2.25rem, 1.7rem + 2.8vw, 3.4rem);
}
PROMPT
Convert my static typographic scale (below) into a fluid scale with clamp():
[paste your current --text-* tokens here]
Constraints:
- reference viewport: 375px (mobile) to 1280px (desktop)
- every clamp combines rem + vw (never vw alone, to respect browser zoom)
- preserve the 1.25 ratio between levels at both extremes
- give the final :root block, then a recap table: size at 375px / at 768px / at 1280px for each level
Finally, indicate the recommended line heights per level.
After going fluid, check three things: the render at 320px wide (the web's real floor), the render at 200% zoom, and the hero between 700 and 900px wide — that intermediate zone is where badly calibrated clamp formulas produce strange sizes.

Creating hierarchy without going bigger

The beginner's reflex for hierarchy is size: more important = bigger. But size is only one of five levers, and often the least refined. Weight distinguishes a heading from a label at equal size. Case — an eyebrow in spaced small caps ("GUIDED MEDITATION") above a large heading — creates an elegant tier of hierarchy that consumes not one extra pixel. Color recedes secondary text (--color-text-muted) without shrinking it. Space isolates and therefore elevates. Combine two subtle levers rather than one loud one: it's the difference between a page that shouts and a page that speaks.

A word about variable fonts, the modern standard: a single file contains all the weights (and sometimes other axes, like optical size or width). Double advantage: you load one file instead of four, and you can use precise intermediate weights (550 rather than the binary 500/600 choice). Fraunces, as it happens, is variable and exposes an "optical" axis that softens or sharpens the design depending on size — exactly the kind of detail that makes an identity recognizable "with eyes closed".

Micro-typography: the details that look pro

There remains the final layer, invisible when done well and glaring when missing. Curly apostrophes (the straight apostrophe is a typewriter relic), proper quotation marks, non-breaking spaces where the language requires them — between a number and its unit, before certain punctuation in French — these are precise conventions that AI-generated text doesn't always respect. Systematically ask for a pass: "apply correct typographic conventions to all the texts on the page".

On the technical side, three delivery reflexes: serve fonts in woff2 (the modern compressed format), add font-display: swap so the text shows immediately with a system font while waiting for the real one, and check the license — Google Fonts are free, but a premium font found "somewhere" can cost the client dearly in an audit. Two well-served families weigh under 200 KB; that's the budget not to exceed so that premium doesn't get paid for in seconds of loading.

🛠️ Your turn

Context

The client wants Sereno to be recognizable "with eyes closed". Studio Mango's director gives you one day to overhaul the landing's entire typography: committed new families, a fluid scale, a comfortable measure and impeccable micro-typography. The developer will integrate your tokens on Monday — everything must fit in the design system.

Instructions

  1. Ask the AI for 3 reasoned font pairings (serifs, contrast, x-height) for the "warm premium calm" direction, then choose one with justification.
  2. Test the chosen pairing with the landing's real headings and paragraphs — not lorem ipsum — and adjust weights and sizes.
  3. Convert your static scale into a fluid scale with clamp() (rem + vw), calibrated from 375px to 1280px.
  4. Apply a measure of 65ch maximum to text blocks and tune line heights accordingly.
  5. Add a tier of hierarchy without size: an eyebrow in spaced small caps above the hero heading.
  6. Run the micro-typography pass (curly apostrophes, proper quotes, non-breaking spaces) and check the render at 320px and at 200% zoom.
Hint — If you hesitate between two pairings, look at the body text at 16px before the headings: a mediocre heading face gets noticed, a mediocre body face gets endured across the whole page.

In summary

  • Typography is the brand's voice: an interface is 90% text.
  • A typeface has a readable personality: serifs, stroke contrast, x-height, open or closed letterforms.
  • Pairing families: frank contrast or total kinship, never the in-between — and two families maximum.
  • The ideal measure is 45 to 75 characters (max-width: 65ch); left-aligned, never justified on the web.
  • clamp() makes the scale fluid between mobile and desktop — always combining rem + vw to respect zoom.
  • You also create hierarchy with weight, case, color and space, not only with size.
  • Micro-typography (curly apostrophes, non-breaking spaces, proper quotes) and delivery (woff2, font-display, license) make the professional finish.

Quiz — check your understanding

1. What is the ideal measure (line length) for body text?

Below 45 characters, reading is choppy; beyond 75, the eye gets lost on the return sweep. max-width: 65ch is the simplest setting to stay in range.

2. What is the golden rule for pairing two type families?

Two nearly identical typefaces create a subtle dissonance. A committed contrast (characterful serif + neutral sans) or a superfamily works; the in-between feels off.

3. Why never use vw alone in a fluid text size?

clamp(2rem, 1.4rem + 2.6vw, 3.05rem): the rem part guarantees that 200% zoom and the system's font-size preferences are respected.

4. How do you add a level of hierarchy without increasing the text size?

An eyebrow in spaced small caps, a heavier weight or text dimmed with --color-text-muted creates hierarchy elegantly, without an extra pixel.

5. Which text alignment should you favor on the web?

Web justification creates irregular rivers of space, especially without hyphenation. Left alignment gives the eye a stable starting edge.

6. What is the main advantage of a variable font?

One file replaces four weight files, and you can use fine weights (550) or axes like optical size — less weight, more nuance.

Auteur(s)

R

REHOUMA Haythem

Haythem Rehouma est un ingénieur et architecte IA et cloud, formateur et enseignant technique, avec un profil orienté IA médicale, AWS, MLOps, LLM/RAG et vision par ordinateur.