Harmony Contrast Balanced
Heading
Playfair Display

didone serif · x-height 51% of the em · 5 weights · 38 KB · variable · headings only

Body
Inter

neo-grotesque sans · x-height 55% of the em · 5 weights · 47 KB · variable

Why this pair works

Playfair Display is built for large sizes and nothing else, which is exactly what you want above the fold. Inter does the reading, and its neo-grotesque sans shapes stay out of the way at paragraph size. Inter runs the taller x-height (55 percent of the em against 51), so nudge Playfair Display up a point if they ever sit on the same line.

The preview is editable, so paste your own copy in
The quick brown fox jumps over the lazy dog

Type is the one design decision every visitor experiences, whether they notice it or not. Get the pairing right and the page reads as a single voice.

Good typography builds a hierarchy before anyone has read a word. The heading tells you where you are, the body tells you what is going on, and the gap between the two is what makes a page feel considered rather than assembled. Two faces that argue politely will do more for a layout than any amount of color.

Contrast is what makes a hierarchy readable

Pairs fail in two directions. Fonts that sit too close together look like a loading error, and fonts that share nothing at all look like two websites glued down the middle. The useful middle ground is a clear difference in letterform with a shared sense of proportion.

Test it with real sentences

Lorem ipsum hides problems. Paste in a real headline, a real paragraph and the longest word your product name can throw at it, then look at the result at the size people will actually read.

Heading type scale
44px
1.15
-0.02em
Body type scale
17px
1.65
0em
Code for your project
Send the result to: CSS Formatter CSS Minifier

About the Font Pairing Generator

What is a font pairing generator?

A font pairing generator suggests two typefaces that belong on the same page, one for headings and one for body copy. Most of them shuffle a list and hope for the best. That's how you end up with Montserrat over Poppins, two geometric sans faces so alike that readers assume something failed to load.

We built this one to score pairings instead of shuffling them. Every family in the tool carries its category, its style class, the weights Google actually publishes, and an x-height we measured in a browser from the rendered glyphs. The generator uses those numbers to reject combinations that don't work, then tells you in plain English why the pair it picked does. When you're happy with it, the code is waiting underneath, whether you want a link tag, plain CSS, custom properties, a Tailwind theme block or a next/font module.

How to Use This Tool

  1. Generate a pair. Hit Generate pair for a scored suggestion, or switch to Designer picks for combinations that turn up again and again in professional work.
  2. Steer it. Drag the slider toward Harmony for families that share a lineage, or toward Contrast for a sharper split between the heading and the text.
  3. Keep what you like. Lock either font and keep generating, and only the other one changes. The swap button trades their roles.
  4. Read the reasoning. The panel under the two cards explains what the pair is doing, including how far apart the x-heights sit and what to do about it.
  5. Set the scale. Adjust weight, size, line height and letter spacing for each role. The preview updates as you go, and so does the code.
  6. Try it on real content. The preview is editable and comes in three layouts. Paste your own headline into it, because lorem ipsum hides problems that a long product name will find.
  7. Take the code. Pick a format, copy it, and check the weight budget underneath. Copy share link puts the whole setup in a URL you can send to a teammate.

Common Use Cases

Typography is usually settled early and then lived with for years, so it's worth a few minutes up front. People reach for this tool when they're:

  • Starting a site or a landing page and want a heading and body combination that holds together before any other design work begins.
  • Rebuilding an old theme where the fonts were inherited from a template nobody remembers choosing.
  • Cutting page weight. The budget readout shows how many families and weights you're asking for and roughly how many kilobytes that costs on the Latin subset.
  • Writing a design system and need the pairing expressed as CSS custom properties rather than a screenshot.
  • Setting up a Next.js project where next/font wants the family names and weight lists spelled out exactly.
  • Settling an argument. The explanation under each pair gives you something concrete to point at instead of a matter of taste.
  • Checking what a fallback looks like before deciding whether to self-host. Our Web Safe Fonts list covers the faces that need no download at all, and the CSS Formatter will tidy the output if you paste it into a larger stylesheet.

Frequently Asked Questions

Are these fonts free to use commercially?

Yes. Every family here comes from Google Fonts, and they're open source, with most published under the SIL Open Font License. You can use them on client work, in products you sell, and in printed material without paying a license fee or crediting anyone.

What actually makes two fonts work together?

Contrast in form, agreement in proportion. The two faces should be easy to tell apart at a glance, which is why a serif heading over a sans body is such a reliable move, but they should share a similar sense of width and vertical proportion so the page still reads as one voice. Fonts from the same superfamily, like Roboto and Roboto Slab, get this for free because they were drawn together.

Why does the tool refuse some combinations?

Because they'd be bad advice. We block a font from the body role when it was designed for large sizes only, we block script faces from body text entirely, and we block two families from the same style class that share no design lineage. That last rule is the one that stops the generator handing you two nearly identical geometric sans faces and calling it a pairing.

How many fonts should one site load?

Two families is the sweet spot, and a single family is a respectable choice if you use weight and size to build the hierarchy. Each extra family is another connection and another download before your text can render in the right face. The budget chips under the code show what your current choice costs.

Will web fonts slow my site down?

They add weight, but you control how much. The code here requests only the weights you selected and sets display=swap, so your text is readable in a fallback face while the font arrives. Variable families help a lot, since one file covers the whole weight range instead of one file per weight. Watch out for asking a family for a weight it doesn't have, because the browser will fake it by smearing the letterforms, and faux bold looks noticeably worse than the real thing.

Should I use the link tag or the CSS import?

Use the link tag when you can. An @import sits inside a stylesheet, so the browser has to download and parse that file before it even learns the font exists, which delays the request. The link version also carries the two preconnect hints that open the connection to Google's servers early.

Can I use these fonts in Figma or Photoshop?

Yes. Figma already has the full Google Fonts library built in, so the names here will match what you see in its font picker. For Photoshop, Illustrator or Affinity, download the family from the Google Fonts site and install it on your machine first.

Where do the x-height numbers come from?

We rendered all 124 families in Chrome and measured each one against its own em, so the figures describe the real glyphs rather than an estimate. It matters more than it sounds. Josefin Sans sits at 38 percent of the em and Anton at 73 percent, which is why the same 17px setting looks tiny in one and huge in the other.

Does the share link save my settings?

It does. The two families, both weights, every size and spacing value, the preview layout and the slider position all live in the URL, so anyone opening it sees exactly what you saw. Nothing is stored on our end, and the tool runs entirely in your browser.