What Font Size Should Body Text Be on a Website?

· 5 min read

The short answer is 16 pixels, and for most sites it is the right one. The longer answer explains why 16 is sometimes too small, why two fonts both set at 16 can look very different sizes, and why the unit you write it in matters as much as the number.

Why 16 pixels is the starting point

Every major browser renders text at 16 pixels unless told otherwise. That is not an accident of history; it is roughly the size at which body text is comfortable on a desktop screen at normal viewing distance, and on a phone held closer. Going below it for paragraphs is almost always a mistake, and a common one — small grey text is the most frequent readability complaint about the web.

Many content sites now go a step larger, to 17 or 18 pixels on wide screens, because readers sit further from a desktop monitor than from a phone. That is a reasonable choice for long articles. For interfaces packed with controls, 16 is usually right, and 14 is acceptable only for secondary labels.

The same size is not the same size

A font size sets the height of an invisible box, not the height of the letters. How much of that box the lowercase fills — the x-height — varies a great deal between typefaces. Inter and Atkinson Hyperlegible have large lowercase letters and read big. A face like EB Garamond, with a small lowercase in the manner of old book types, looks noticeably smaller at the same setting and may need 18 or 19 pixels to feel equivalent.

So choose the size by looking, not by the number. Set a real paragraph in the typeface you have picked, at 16, 17 and 18, and read each one on a phone and on a laptop. The Lorem Ipsum tool does exactly this with any font in the archive.

Merriweather Sans — variable

Sphinx of black quartz, judge my vow

In the static download

400 is one of the 6 weights the static download ships as its own file.

Merriweather Sans has a large lowercase and sturdy strokes, and holds up well at body sizes. Its regular weight is the one to read in.

Write it in rem, not in pixels

Some readers set a larger default font size in their browser. A size written in pixels overrides that choice; a size in rem respects it. font-size: 1rem is 16 pixels for most people and 20 for someone who has asked for larger text. Use 1.125rem for 18. Leave the root element’s font size alone rather than setting it to a pixel value, which undoes the benefit for the whole site.

Size, line height and line length are one decision

  • Line length. Around 45 to 75 characters per line. Wider, and the eye loses its place returning to the next line; a max-width of about 65ch on the text column is a simple way to enforce it.
  • Line height. Around 1.5 for body text, written unitless. Larger sizes and longer lines want a little more.
  • Contrast. Dark enough to reach at least 4.5 to 1 against the background. A perfect size in pale grey is still hard to read.

Changing one changes the others. A larger size in the same column gives fewer characters per line; a shorter line can take less leading. The spacing side of this is covered in kerning, tracking and leading, and the typeface side in the most readable fonts.

One size for phones, a slightly bigger one for desktops

A phone is held closer than a laptop, so the same 16px is comfortable on one and a little tight on the other. The usual answer is a single fluid value rather than a breakpoint: clamp(1rem, 0.95rem + 0.25vw, 1.125rem) gives 16px on a narrow screen and 18px on a wide one, with everything in between handled for you.

Two cautions with fluid type. Keep the minimum at 1rem so a reader who has set a larger default still gets it, and keep the maximum modest — body text above about 20px starts to feel like large print rather than generous.

Headings are a scale, not a set of numbers

Pick a ratio and multiply rather than choosing each size by eye. A ratio of about 1.25 gives 16, 20, 25, 31, 39 — close enough to round to sensible values — and every heading on the site then relates to the body text by the same step. The result looks deliberate because it is.

  • Body 16 to 18px, and the same size for lists, table cells and blockquotes.
  • One step up for a subsection heading, two for a section heading, three or four for the page title.
  • Captions and labels one step down, and never below 12px.
  • Line height comes down as the size goes up: 1.5 for body, about 1.2 for large headings.

Forms, buttons and the 16-pixel rule

Input fields are the one place where a size has a hard behavioural consequence: iOS zooms into any field whose text is smaller than 16px, and the page is left scrolled sideways afterwards. Set every input, select and textarea to at least 16px and the zoom never happens.

Buttons follow the same logic for a different reason. A label at 14 to 16px inside a target at least 44px tall is the size a thumb can hit reliably, and the guidelines are explicit about the target rather than the text. Getting both right is why an interface often ends up with fewer sizes than a designer expects — the useful ones are a short list.

Inter — variable

Sphinx of black quartz, judge my vow

In the static download

400 is one of the 9 weights the static download ships as its own file.

Inter at a range of weights. For body text the useful range is narrower than the slider: light weights lose contrast on a screen, whatever the size.

An article and a dashboard are different documents

The 16 to 18px advice assumes text somebody reads. A dense interface is not that: it is a surface for scanning, where fitting more on screen genuinely helps, and 14px with tight line height is a reasonable body size for a data table.

The mistake is applying one of those answers to the other. A long article at 14px is tiring, and a dashboard at 18px means half the data is below the fold. Decide which kind of document each page is, and let the size follow — the interface side of that decision is in choosing a typeface for a product interface.

Questions

What is the best font size for body text on a website?
16 pixels as a minimum, which is the browser default. Many reading-focused sites use 17 or 18 pixels on larger screens. Fonts with a small lowercase may need a larger setting to look equivalent.
Should I use px or rem for font size?
Rem. A size in rem scales with the reader’s own browser setting, so someone who has asked for larger text gets it. A size in pixels ignores that preference.
Is 14px too small for body text?
For paragraphs, yes, on most sites. It is acceptable for secondary labels and captions in a dense interface, but main reading text should start at 16 pixels.
Why does my font look smaller than another at the same size?
Font size sets the height of the type’s whole box, not of the letters. Typefaces with a smaller x-height, meaning smaller lowercase letters relative to that box, look smaller at the same setting.
What font size should buttons and form fields be?
At least 16px for anything a visitor types into: below that, iOS zooms the page in when the field is tapped. Button labels work at 14 to 16px as long as the button itself is at least 44 pixels tall, which is the size a thumb can hit reliably.

Fonts in this post

Find the font for your next project.

All 337 families here are free for commercial use, and every download carries its license inside the zip.