Font pairing – heading and body font combinations
Font pairing made easy: pick a font pair and instantly see how heading and body text work together – with your own text if you like. Every pair uses pre-installed system fonts only: nothing to download, no request to Google or any other server. Each pair comes with the reasoning, the measured x-height and availability per operating system.
Source: Microsoft Learn – Font List Windows 11 (as of 21 Apr 2022, retrieved 27 Sep 2026). Updated: .
How it is calculated
How to pair fonts
Two fonts work together when they are clearly different but similarly built. The safest route is contrasting a serif with a sans-serif: one carries the headings, the other the body text. Two similar serifs or two similar sans-serifs, on the other hand, easily look like a mistake.
How to pair fonts
- Choose a font pair from the list, e.g. Georgia + Verdana.
- Set the body font size (12–28 px) and try your own text in the preview if you like.
- Check the reasoning, x-height and availability per operating system, then copy the CSS.
Example: Georgia + Verdana with 18 px body text: the heading is shown 1.8 times as large, i.e. 1.8 × 18 = 32.4 px. The x-height is 0.481 em (Georgia) and 0.545 em (Verdana) – so the body text looks about 13% larger at the same font size.
Just as important is the x-height – the height of lowercase letters relative to the font size. Fonts with a large x-height (Verdana: 0.545 em) look noticeably bigger at the same size than fonts with a small one (Calibri: 0.464 em). If a pair’s x-heights are far apart, balance them with the font size. The values shown come from the OS/2 table of the Windows 11 font files.
Why system fonts only?
System fonts are already installed on the device: pages load faster, text does not jump while loading, and no request goes to a third-party server. Loading web fonts straight from a font CDN sends every visitor’s IP address to that provider – a privacy issue under the GDPR in Europe. If you want custom web fonts, host them yourself.
Font stacks: why several names?
No font is installed on every system. That is why CSS lists several fonts in a row (a font stack): the browser uses the first one that is installed, and a generic family such as serif or sans-serif catches everything else. The table shows which font actually appears on Windows, macOS, iPhone/iPad and Android – based on Microsoft’s and Apple’s font lists and Android’s font configuration (accessed 27 Sep 2026). Android has no Georgia or Verdana and shows Noto Serif or Roboto instead; Linux distributions ship different fonts depending on the installation.
Tips for readable body text
- Set on-screen body text at 16 px or more, ideally 17–20 px, with a line height of about 1.5 to 1.7.
- Make headings clearly larger (1.6 to 2 times) and bolder than the text – then even a single font family is enough.
- Keep lines to roughly 60 to 80 characters.
- Check colour contrast: grey text on white quickly gets too faint – use the color contrast checker.
More web design tools: pick colors with the color palette generator, convert color values with the color converter and design backgrounds with the CSS gradient generator.
Frequently asked questions
Which fonts go well together?
Pairs of a serif and a sans-serif are a safe bet, such as Georgia with Verdana, Palatino with the system UI font, or Cambria with Calibri. What matters is clear contrast and similar x-heights.
How many fonts should a website use?
Two at most: one for headings, one for text. Add a third, such as a monospace font for code, only if it has a job of its own.
Are Georgia and Verdana available on every device?
On Windows, macOS and iOS, yes. Android does not ship them and shows Noto Serif or Roboto – which is why every font stack should end with a generic family like serif or sans-serif.
What is x-height?
The height of a lowercase x relative to the font size. A large x-height makes text more legible at the same size but needs a little more line spacing.
Why not just use web fonts from a CDN?
Every page view then sends the visitor’s IP address to the font provider and adds a download before text appears. System fonts avoid both; custom fonts can be self-hosted.
Is my preview text saved?
No. Your own headings and text stay in this browser window only. Just the selected pair and font size are remembered.
Sources and legal basis
- Microsoft Learn – Font List Windows 11 (as of 21 Apr 2022, retrieved 27 Sep 2026)
- Microsoft Learn – Font List Windows 10 (as of 4 Sep 2020, retrieved 27 Sep 2026)
- Apple Developer – System Fonts (macOS, iOS; retrieved 27 Sep 2026)
- Android Open Source Project – fonts.xml (font aliases serif/sans-serif, retrieved 27 Sep 2026)
- MDN Web Docs – font-family
As of: · Editorial policy
Related tools
- Color contrast checker (WCAG 2.2)Check the contrast between text and background colors: WCAG 2.2 contrast ratio with AA/AAA ratings for normal text, large text and UI components.
- Color palette generatorBuild matching colors from one base color: complementary, analogous, triadic, square, split-complementary or monochrome – with HEX, RGB and HSL values.
- Flesch Reading Ease CalculatorPaste your text to get the Flesch Reading Ease score, the score band, words per sentence and syllables per word – plus the German version by Amstad.
- Fancy Text GeneratorTurn text into bold, italic, cursive, gothic and 20+ other fancy fonts to copy and paste into Instagram, TikTok or Discord – with a note on accessibility.
- What is my IP address?What is my IP? See your public IPv4 or IPv6 address at once, plus approximate location, internet provider and browser details. Free, never stored.
- Px to Rem ConverterPx to rem converter with your own base font size, plus em, pt, percent and vw, and a lookup table of common font sizes. Free, no sign-up, works offline.
- CSS clamp calculatorCSS clamp calculator for fluid font sizes and spacing: enter minimum and maximum values plus the viewport range and copy the finished clamp() value.
- HTTP Status CodesLook up HTTP status codes: the meaning of 200, 301, 404, 500 and over 40 more codes explained, with search by code or keyword and a filter by class.
- YAML to JSON converter (and JSON to YAML)YAML to JSON converter and JSON to YAML following YAML 1.2: lists, anchors, text blocks, comments. Errors show the line number. Runs in your browser, no upload.