Typography workspace
Font Pairing Tool
Find a heading and body combination that works with your words. Start with a curated pair, tune the details, compare a saved version, and take the CSS with you.
Uses local fonts and system fallbacks. No font downloads or installed-font scan. A named font may fall back on your device.
JavaScript prepares your local preview.
Container size only. Test the exported CSS in your actual page at each breakpoint.
Make room for better ideas.
Your validated text and font settings will appear here.
- Requested heading stack
- Georgia, serif
- Requested body stack
- system-ui, sans-serif
These are requests, not detected font names. Your browser may use different fonts for different characters or synthesize bold.
Pairing checks
Choose sizes to compare your heading and body hierarchy.
Only text and background color contrast is checked. A pass does not establish overall WCAG conformance, readable letterforms, or a successful font pairing.
Keeps one snapshot in this page. Saving again replaces it. Reloading clears it.
Saved comparison
The saved sample retains its own text and settings. Its container follows the current preview width.
Use this pairing
Add class="font-pairing" to a content wrapper. The CSS uses the chosen size for its headings and styles its paragraphs. Set separate heading sizes if your page needs several levels. Rem values assume a 16px root size; other root sizes change the rendered dimensions.
No font files or loading rules are included. The export uses your current valid settings. Add licensed web fonts separately if you need a specific face on every device.
How to choose a font pair
- Start with a curated combination that suits your page. Serif headings with a sans-serif body create a clear difference between roles. A single family with different sizes and weights can work just as well.
- Replace the samples with real copy. Test the longest heading, important numbers, punctuation and every language your page needs.
- Adjust the body size and line height first, then give the heading enough visual emphasis. Save a comparison before trying another direction.
- Check the narrow container, copy the CSS, and test your actual page with keyboard navigation, zoom, user text spacing, and different devices.
Interpreting the checks
The heading-to-body ratio describes size hierarchy; it is not a quality score. A comfortable line length depends on font, language and content. The ch unit measures the advance width of the zero character, so 60ch does not guarantee 60 letters per line.
For opaque sRGB colors, this tool calculates relative luminance and the WCAG contrast ratio. AA needs at least 4.5:1 for normal text and 3:1 for large text. Here, large means at least 24 CSS px, or at least 18.667 CSS px at bold weight 700. Decisions use the unrounded ratio, so a rounded display of 4.50:1 can still fail.
Local fonts, honest fallbacks
A font stack is an ordered request to your browser. Georgia, Arial, Palatino and other named fonts are not installed on every system. The browser moves through the stack and may use additional fallback faces for missing characters. Generic families such as serif and system-ui vary by browser and operating system.
Custom family names are useful when a font is already available locally. This tool does not verify installation or identify the exact rendered font. Browser font-loading checks alone cannot prove that a named font exists. No font is bundled, downloaded or licensed through this page.
Privacy and accessibility notes
Your samples, settings, contrast calculations and saved comparison stay in this page's memory. The tool makes no network requests and stores no inputs. Copy and download occur only when you choose those actions. The website's shared page resources and analytics follow its existing settings.
Color contrast is one part of accessibility. Check legibility, reflow, zoom, language support and resilience to user spacing changes. A line-height setting by itself does not prove that a page meets text-spacing requirements.
Primary references: CSS font stacks, font-loading check limitations, WCAG text contrast, and text-spacing overrides.