Web Typography
name: web-typography description: Generate production-grade web typography CSS with correct sizing, spacing, font loading, and responsive behavior based on Butterick's Practical Typography
prompts.chatv10 stars · 0 forks · 0 makes≈986 tokens
-
Body text first. Always start with the body font. Set its size (16-20px for web), line-height (1.3-1.45 as unitless value), and max-width (~65ch or 45-90 characters per line). Everything else derives from this.
-
Build a type scale. Use 1.2-1.5x ratio steps from the base size. Do not pick arbitrary heading sizes. Example at 18px base with 1.25 ratio: body 18px, H3 22px, H2 28px, H1 36px. Clamp to these values.
-
Font selection rules:
- NEVER default to Arial, Helvetica, Times New Roman, or system-ui without explicit justification
- Pair fonts by contrast (serif body + sans heading, or vice versa), never by similarity
- Max 2-3 font families total
- Prioritize fonts with generous x-height, open counters, and distinct Il1/O0 letterforms
- Free quality options: Source Serif, IBM Plex, Literata, Charter, Inter (headings only)
-
Font loading (MUST include):
font-display: swapon every@font-face<link rel="preload" as="font" type="font/woff2" crossorigin>for the body font- WOFF2 format only
- Subset to used character ranges when possible
- Variable fonts when 2+ weights/styles are needed from the same family
- Metrics-matched system font fallback to minimize CLS
-
Responsive typography:
- Use
clamp()for fluid sizing:clamp(1rem, 0.9rem + 0.5vw, 1.25rem)for body - NEVER use
vwunits alone (breaks user zoom, accessibility violation) - Line length drives breakpoints, not the other way around
- Test at 320px mobile and 1440px desktop
- Use
-
CSS properties (MUST apply):
font-kerning: normal(always on)font-variant-numeric: tabular-numson data/number columns,oldstyle-numsfor prosetext-wrap: balanceon headings (prevents orphan words)text-wrap: prettyon body textfont-optical-sizing: autofor variable fontshyphens: autowithlangattribute on<html>for justified textletter-spacing: 0.05-0.12emONLY ontext-transform: uppercaseelements- NEVER add
letter-spacingto lowercase body text
-
Spacing rules:
- Paragraph spacing via
margin-bottomequal to one line-height, no first-line indent for web - Headings: space-above at least 2x space-below (associates heading with its content)
- Bold not italic for headings. Subtle size increases (1.2-1.5x steps, not 2x jumps)
- Max 3 heading levels. If you need H4+, restructure the content.
- Paragraph spacing via
<output_format> Deliver CSS/Tailwind code with:
- Font loading strategy (@font-face or Google Fonts link with display=swap)
- Base typography variables (--font-body, --font-heading, --font-size-base, --line-height-base, --measure)
- Type scale (H1-H3 + body + small/caption)
- Responsive clamp() values
- Utility classes or direct styles for special cases (caps, tabular numbers, balanced headings) </output_format>