Editorial pairing guideserif + sans-serif

Playfair Display + Source Sans 3

High-contrast modern serif with a workhorse humanist sans.

A heading set in Playfair Display.

And a paragraph of running text set in Source Sans 3. The two faces have enough contrast in voice to do different jobs in the hierarchy, but enough common ground in proportion and weight to feel like they were chosen for the same project. Read on for the design rationale, the implementation notes, and the copy-paste CSS you need to ship the pair on a real project.

Why Playfair Display + Source Sans 3 works

The most successful font pairings follow a single underlying rule: contrast in voice, consistency in proportion. Playfair Display and Source Sans 3 are a textbook application of that rule. The two families come from genuinely different typographic traditions, which gives them the contrast you need to separate a heading from running text without resorting to weight or colour alone. But they share enough in their underlying construction — the x-height, the apparent stroke weight at body sizes, the rhythm of their rounder letters — that the eye does not register the heading face and the body face as belonging to different worlds.

Playfair Display sits at the front of the pair. As a serif design, it brings the personality, the authority, and the tonal cue that tells the reader what kind of publication, product, or brand they are looking at. Set at a heading size, the family\'s distinctive features — its terminals, its weight contrast, its proportion — do the rhetorical work that a body face cannot.

Source Sans 3 takes the supporting role. As a sans-serif design, it is engineered to disappear into a paragraph at fourteen to eighteen pixels, carry the meaning of the words without distracting from them, and produce an even grey texture down the column. That is a different design problem than the one the heading face has to solve, and the two families have been chosen because they handle their respective problems in voices that complement rather than compete.

Where this pairing belongs

Playfair Display + Source Sans 3 is the right pairing for Fashion, hospitality, and luxury brands that need an elegant heading and a plain body face.. We have tested it on hero sections at large sizes, on sub-headings at medium sizes, on running paragraphs at body sizes, on captions at small sizes, and on dark backgrounds as well as light ones. In each context the pair holds together, which is the actual test of a font pairing — the two families have to keep working as the typographic system scales up and down through the layout.

Beyond that primary use case, the combination is also a strong default for any project where you want an editorial register without committing to a single foundry\'s house style. Both Playfair Display and Source Sans 3 are independent open-source releases, which means you can ship them in commercial work without paying a licensing fee, host them yourself for performance reasons if you prefer not to depend on the Google Fonts CDN, and modify either family\'s source files if your project demands a custom variant.

Implementation: the CSS

The fastest way to ship this pairing is to load both families through the Google Fonts CDN with a single combined request, then declare them in your stylesheet. The example below loads the regular and bold weights of each family — enough to build a complete heading-and-body system — and uses font-display swap so the page paints quickly even on a slow first-paint connection.

/* Add to the <head> of your document */
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&family=Source+Sans+3:wght@400;700&display=swap" rel="stylesheet">

/* Then in your CSS */
h1, h2, h3 {
  font-family: 'Playfair Display', serif;
  font-weight: 700;
  letter-spacing: -0.015em;
}
body, p {
  font-family: 'Source Sans 3', sans-serif;
  font-weight: 400;
  line-height: 1.6;
}

Notes from production

A few things to watch for when you ship this pairing on a real project. First, set the heading face at the actual sizes your layout uses before you commit. Playfair Display at sixty pixels and Playfair Display at twenty-four pixels are nearly different typefaces — display-engineered features stop reading at small sizes, and characteristics that were quiet at heading sizes can become loud at sub-heading sizes. Second, set the body face on a real paragraph of your own copy, at your real line length, in your real reading colour. Specimen text in nineteenth-century pangrams hides a lot of the small typesetting problems that show up on production copy. Third, audit the combined font-weight payload. Loading two families at two weights each is roughly four font files, which adds 60-120 KB to your first paint depending on subsetting — acceptable for most marketing sites, worth budgeting carefully on performance-sensitive product surfaces.

If Playfair Display feels too loud for your application, swap it out for a quieter sibling family in the same category and re-test. The TypeCraft use-case hubs are organised exactly so that you can find a like-for-like replacement on either side of a pairing without having to start from zero.

Alternatives to consider

No font pairing is perfect for every project. If you like the basic structure of Playfair Display and Source Sans 3 but want a slightly different register, the closest alternatives in the open-source catalog are sibling families from each category. For the serif heading slot, browse the serif category page for a like-for-like swap. For the sans-serif body slot, the sans-serif category page collects the open-source designs in the same family.

For more curated combinations, see the rest of the TypeCraft pairing guides. For ranked, opinionated buyer guides on individual use cases, see the TypeCraft buyer guides — twenty-fonts-per-category lists with editorial commentary on every entry.