Font Converter

WCAG Font Guidelines for Accessible Typography

This page collects every font-related WCAG 2.1 requirement in one place, then goes deeper on the five audiences those requirements exist for. You will find the exact contrast thresholds and success criteria, typefaces and sizes for low vision readers, what actually helps dyslexic readers, how typography changes cognitive load, and why screen readers ignore your font choice entirely.

Every recommendation below is tied either to a numbered WCAG success criterion or to a measurable typographic value you can copy into your stylesheet.

Why font accessibility matters

Roughly 15 to 20% of the population has some form of reading difficulty or visual impairment. Accessible font choices make your content readable by the widest possible audience, improve the experience for everyone else, and are how you meet legal obligations such as WCAG 2.1 Level AA conformance.

WCAG success criteria that govern text

WCAG never names a single "accessible font". It sets measurable thresholds that any typeface has to satisfy. Six success criteria do almost all of the work for typography, three at Level AA and three at Level AAA.

WCAG 2.1 success criteria that apply to text, with conformance level and requirement
Success criterionLevelWhat it requires for text
1.4.3 Contrast (Minimum)AA4.5:1 for normal text, 3:1 for large text (24px regular or 18.5px bold and above)
1.4.4 Resize TextAAText scales to 200% with no loss of content or functionality
1.4.12 Text SpacingAANothing breaks when users force line height 1.5, paragraph spacing 2em, letter spacing 0.12em, and word spacing 0.16em
1.4.5 Images of TextAAUse real text rather than pictures of text wherever the technology allows it
1.4.6 Contrast (Enhanced)AAA7:1 for normal text, 4.5:1 for large text
1.4.8 Visual PresentationAAALine height at least 1.5, paragraph spacing at least 1.5 times line height, no more than 80 characters per line, and no justified text

There is no WCAG minimum font size in pixels

WCAG defines large text (18pt, which is 24px, or 14pt bold, which is 18.5px) only so it can relax the contrast threshold. It never sets an absolute floor. In practice 16px is the working minimum for body copy because it is the browser default and it stops iOS from zooming on input focus. The WCAG font size requirements guide works through sizing, relative units, and 200% resize in full.

Font sizes in practice

  • Body text: 16px working minimum
  • WCAG large text: 24px regular
  • WCAG large text: 18.5px bold
  • Low vision body text: 18px to 20px

Contrast ratios

  • Normal text: 4.5:1 (AA)
  • Large text: 3:1 (AA)
  • Enhanced: 7:1 (AAA)
  • UI components and graphics: 3:1

Defaults worth adopting

  • Sans-serif for screen body text
  • Relative units so text scales
  • No font weight below 400 for body
  • Left aligned, never justified

Font contrast ratios: the 4.5:1 and 3:1 requirements

Roughly 253 million people worldwide have some form of vision impairment, and contrast is the single measurement that decides whether they can read your text. A contrast ratio expresses the difference in relative luminance between a foreground colour and its background, on a scale from 1:1 (identical colours) to 21:1 (black on white).

WCAG thresholds are not arbitrary. They are derived from research into people with moderately low vision, around 20/40, who do not use assistive technology. Meeting them does not restrict creative expression, and plenty of brand-aligned palettes clear 4.5:1 comfortably.

How the ratio is calculated

(L1 + 0.05) / (L2 + 0.05)

L1 is the relative luminance of the lighter colour, L2 the relative luminance of the darker colour

Relative luminance is derived from the RGB channels weighted by how the eye perceives them: green contributes most, then red, then blue. This is why pure green looks far brighter than pure blue at the same channel intensity.

Contrast perception is not linear. The jump from 3:1 to 4.5:1 is far more noticeable than the jump from 15:1 to 21:1, so most of the readability benefit comes from clearing the minimum thresholds rather than maximising the number.

Thresholds by text size and weight

Minimum WCAG contrast ratios by text size, weight, and conformance level
Text sizeWeightLevel AALevel AAA
Below 24pxRegular (400)4.5:17:1
Below 18.5pxBold (700)4.5:17:1
24px and aboveRegular (400)3:14.5:1
18.5px and aboveBold (700)3:14.5:1

How font weight changes the threshold

Bold starts at weight 700

WCAG treats a font-weight of 700 or higher as bold. At 18.5px and above, bold text counts as large text and only needs 3:1 instead of 4.5:1, because thicker strokes are genuinely easier to separate from the background. The same 18px string needs 4.5:1 at weight 400 and 3:1 at weight 700. The font weight calculator helps you pick weight values that stay on the right side of that line.

Light weights need more than the minimum

WCAG does not raise the requirement for weights of 100 to 300, but thin strokes are measurably harder to read at low contrast. If you use light weights, target 6:1 or better and never take them below 20px. For body text, do not go below weight 400 at all.

Variable fonts

Variable fonts let you set any weight from 100 to 900. Treat anything below 700 as normal text for contrast purposes unless the rendered size is 24px or larger.

Verified colour pairs

Every ratio below is calculated with the WCAG relative luminance formula against a pure white background unless stated otherwise.

Common text and background colour pairs with their measured contrast ratio and WCAG verdict
Text on backgroundRatioVerdict
#000000 on #FFFFFF21:1Maximum possible
#333333 on #FFFFFF12.6:1Passes AAA
#595959 on #FFFFFF7.0:1Passes AAA, just
#767676 on #FFFFFF4.5:1Lightest grey passing AA
#0066CC on #FFFFFF5.6:1Passes AA
#008000 on #FFFFFF5.1:1Passes AA
#D73F09 on #FFFFFF4.6:1Passes AA
#FF0000 on #FFFFFF4.0:1Fails AA for normal text
#999999 on #FFFFFF2.8:1Fails AA entirely
#00BFFF on #FFFFFF2.1:1Fails AA entirely
#FFFF00 on #FFFFFF1.07:1Effectively invisible
#F0F0F0 on #1F1F1F14.5:1Dark mode, passes AAA
#E0E0E0 on #3333339.6:1Dark mode, passes AAA

Tools that measure it for you

WebAIM Contrast Checker

Paste two hex codes and see AA and AAA verdicts for normal and large text instantly. Best for quick spot checks during design.

Colour Contrast Analyser

A desktop app from TPGi with an eyedropper that samples colours straight off the screen, plus colour blindness simulation. Best for auditing designs already built.

Chrome and Edge DevTools

Inspect any text node and the colour picker shows the live contrast ratio with suggested passing colours. No extra tooling needed.

axe, Lighthouse, and WAVE

Full page scans that flag every failing element at once. Run axe or Lighthouse in CI so contrast regressions never reach production.

Practices that keep you passing

  • Check during design, not after build. Figma and Adobe XD plugins such as Stark catch failures before they become code.
  • Aim above the minimum. Target 5:1 rather than exactly 4.5:1 so rendering differences and screen glare do not push you under.
  • Contrast is not colour blindness. A pair can pass 4.5:1 and still be indistinguishable to a colour blind user, so never carry meaning in colour alone.
  • Test on real devices. Phones in daylight show far less effective contrast than a desktop monitor indoors.
  • Document the pairs that pass. A colour token table stops designers and developers reinventing failing combinations. Our CSS implementation guide covers structuring those tokens.

Contrast ratio questions

What are WCAG contrast ratio requirements?
WCAG AA requires 4.5:1 for normal text and 3:1 for large text (18pt+ or 14pt bold). WCAG AAA requires 7:1 for normal text and 4.5:1 for large text.
How do I calculate font contrast ratio?
Use tools like WebAIM Contrast Checker or browser DevTools. The ratio compares relative luminance of foreground and background colors. Our font tools can help analyze text visibility.
Does font weight affect contrast ratio?
Font weight affects perceived contrast but not calculated ratio. Lighter weights may appear lower contrast even with technically compliant colors. Use medium weights for body text.
What contrast ratio do fonts need for logos?
WCAG exempts logos and decorative text from contrast requirements. However, for readability, logos with text should still aim for good contrast, especially if the text conveys essential information.
Can I use light gray text on white background?
Only if it meets contrast requirements. Light gray (#767676) on white is the lightest that meets 4.5:1 ratio. Most light grays used for placeholder text fail WCAG requirements.

Low vision fonts: size, contrast, and spacing

The World Health Organization estimates that around 246 million people have moderate to severe vision impairment. Low vision, defined as visual acuity between 20/70 and 20/400 or significant visual field loss, still leaves usable sight, which means typography decides whether content is readable or abandoned.

The underlying conditions differ, macular degeneration takes central vision, glaucoma takes the periphery, cataracts blur everything, and albinism reduces contrast sensitivity, but the typographic response is consistent: larger type, higher contrast, cleaner letterforms, and more space.

What each impairment demands

Low vision characteristics mapped to the typographic response each one requires
CharacteristicTypographic response
Reduced visual acuity18px to 20px minimum body size, weight 400 to 600, no thin serifs, distinct letterforms so similar characters do not merge
Reduced contrast sensitivityTarget 7:1 or better rather than the 4.5:1 minimum, use near-black instead of grey, avoid patterned backgrounds behind text
Visual field lossLine height 1.8 to 2.0, line length 50 to 70 characters, left aligned with a ragged right edge, clear paragraph breaks as anchor points
Screen magnificationLetter spacing 0.05em to 0.1em so glyphs do not crowd, layouts that reflow at high zoom, headings that aid navigation in a tiny viewport

Typefaces that work

Recommended typefaces for low vision readers with the reason and best use case
TypefaceWhy it helpsBest for
Arial and HelveticaClean uniform strokes, legible at every size, universally installedBody text, navigation, forms
VerdanaDrawn for screens, wide spacing and a large x-heightDigital content, moderate impairment
TahomaVerdana-like clarity in a narrower footprintSpace-constrained interfaces
CalibriHumanist sans with softly rounded terminalsDocuments and Office environments
APHontBuilt by the American Printing House for the Blind for low visionEducational material, free for educational use
Atkinson HyperlegibleBraille Institute design maximising character differentiationReaders who confuse similar letters, free and open source

Several of these ship under permissive terms. The open-source font licensing guide explains what OFL and Apache 2.0 allow when you embed them in a product.

Typefaces to avoid

  • Decorative serifs. Fine strokes smear together under magnification. Large serif headings at 24px and above can still work if contrast is excellent.
  • Light weights (100 to 300). Strokes thin out or disappear entirely.
  • Condensed or narrow faces. Crowding makes individual letters harder to separate.
  • Script and handwriting faces. Connected letters and variable stroke width are illegible for this audience.
  • Novelty and display faces. They trade readability for impact.

Sizing and spacing targets

Low vision readers need a base size well above the usual 16px. Start body copy at 18px to 20px, and let users push it further. The font size converter translates pixel targets into rem and em values for a scalable type system.

/* Low vision baseline */
body {
  font-size: 1.125rem;      /* 18px */
  line-height: 1.8;
  letter-spacing: 0.05em;
  color: #1a1a1a;           /* off-black avoids halation */
  background: #fafafa;      /* off-white, about 15:1 */
}

@media (min-width: 1024px) {
  body { font-size: 1.25rem; }  /* 20px */
}

p { margin-bottom: 2em; }

.article-content {
  max-width: 65ch;          /* 50 to 70 characters per line */
  line-height: 2;
}

h1 { font-size: 3rem; }     /* 48px */
h2 { font-size: 2.25rem; }  /* 36px */
h3 { font-size: 1.75rem; }  /* 28px */
h4 { font-size: 1.5rem; }   /* 24px */

High contrast without glare

Pure black on pure white measures 21:1 but causes halation, a bleeding glow, for some low vision readers. Off-black on off-white keeps you around 15:1 with far less strain. Then respect whatever the operating system already knows about the user.

/* Respect OS-level high contrast preferences */
@media (prefers-contrast: more) {
  body {
    color: #000;
    background: #fff;
  }

  a {
    color: #0000ee;
    text-decoration: underline;
  }
}

Test at 200% to 400% zoom

WCAG 1.4.4 requires functionality at 200%, but many low vision users run screen magnifiers at 300% or 400%. Use macOS Zoom or Windows Magnifier and confirm the layout reflows rather than clipping. Avoid text baked into images, since it pixelates at exactly the magnification level these users depend on. Full sizing detail lives in the WCAG font size requirements guide.

Low vision typography questions

What font size is recommended for low vision users?
Minimum 16px base size, with ability to scale to 200% without loss of content. Many low vision users need 24px or larger. Ensure text remains readable when browser zoom is used.
What makes a font good for low vision?
High x-height, open counters, clear ascenders/descenders, consistent stroke width, and distinct letterforms. Sans-serif fonts like Verdana, Tahoma, and APHont are often recommended.
How does font weight affect low vision readability?
Medium to bold weights are generally easier to read than light weights. However, very bold text can cause letters to blur together. 400-600 weight range is typically optimal.
Should I use high contrast for low vision accessibility?
Yes, WCAG requires 4.5:1 for normal text and 3:1 for large text. However, some users prefer lower contrast, so offer a contrast adjustment option. Pure black on white can cause eye strain for some.
What's APHont and why is it recommended for low vision?
APHont is a font designed by the American Printing House for the Blind specifically for low vision readers. It features distinct letterforms, consistent spacing, and clear number differentiation.

Dyslexia-friendly fonts and the spacing that matters more

Dyslexia affects 5 to 10% of the population. The typographic challenges are specific: mirrored letterforms (b, d, p, q), crowding that makes words hard to separate, rivers of white space running down justified text, and losing your place between lines.

The research on specialised dyslexia typefaces is genuinely mixed. Controlled studies have repeatedly found no significant reading speed gain over well-set Arial, while user surveys report reduced fatigue and greater comfort. Reduced fatigue is a real benefit even when speed is unchanged, which is why the right answer is to offer the choice rather than to impose one font on everybody.

Specialised dyslexia typefaces

Dyslexia-specific typefaces with their design approach and licensing
TypefaceDesign approachLicence
OpenDyslexicWeighted bottoms anchor each letter to the baseline, unique b, d, p, q shapes, generous built-in letter spacing, Regular, Bold, Italic and Bold-ItalicFree, Creative Commons
Lexie ReadableK-Type design using distinctive letter shapes rather than weighting, large x-height, clear I, l and 1 separation, friendly toneFree for personal and educational use, commercial licence required
DyslexieSlanted forms emphasising reading direction, varied letter heights for distinctive word shapes, heavy baseline, enlarged aperturesCommercial, individual and organisational tiers
Read RegularUnambiguous shapes and open counters without heavy stylisation, so it reads as a normal professional body faceCommercial

Standard fonts many readers prefer

Work from the British Dyslexia Association and others points at ordinary fonts that perform well, and plenty of dyslexic readers prefer them precisely because they look unremarkable.

Comic Sans MS

Its irregular handwritten forms give every letter a unique silhouette, which is exactly what defeats mirroring. Appropriate where readability outranks formality.

Verdana

Wide proportions, generous spacing, and a large x-height. Built for screens and holds up at smaller sizes.

Arial

Simple, ubiquitous, professional. The safe default when you need a business register without sacrificing clarity.

Helvetica

Neutral and readable, though I, l and 1 sit close together. Add letter spacing, and avoid it for code or data-heavy content.

Calibri

Soft rounded terminals and comfortable spacing, familiar to anyone who has used Microsoft Office.

Century Gothic

Near-circular geometric forms and wide spacing. Excellent for headings, tiring across very long documents.

What to avoid

  • Decorative serifs, which add visual noise around each letter
  • Condensed faces, which increase crowding
  • Light weights, whose thin strokes can appear to move
  • Italics, which are harder to track; use bold for emphasis
  • All caps, which destroys the word shape readers rely on
  • Justified text, which creates rivers of white space

The spacing values that matter more than the typeface

Increasing letter spacing by around 35% over the default measurably improves reading speed for dyslexic readers, which is a larger effect than most font swaps produce. These values also line up with WCAG 1.4.12 Text Spacing, so meeting them serves both goals at once.

.dyslexia-friendly {
  letter-spacing: 0.12em;   /* WCAG 1.4.12 threshold */
  word-spacing: 0.16em;     /* WCAG 1.4.12 threshold */
  line-height: 1.8;         /* 1.5 is the WCAG floor */
  text-align: left;         /* never justify */
  max-width: 70ch;          /* 60 to 70 characters */
}

.dyslexia-friendly p {
  margin-bottom: 1.5em;
}

Give users the switch

Ship OpenDyslexic as an option alongside your default face and persist the choice. Serving it as WOFF2 keeps the extra download small, and font-display: swap keeps text visible while it loads.

@font-face {
  font-family: 'OpenDyslexic';
  src: url('/fonts/OpenDyslexic-Regular.woff2') format('woff2'),
       url('/fonts/OpenDyslexic-Regular.woff') format('woff');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

:root {
  --letter-spacing: normal;
  --word-spacing: normal;
  --line-height: 1.5;
}

.dyslexia-mode {
  font-family: 'OpenDyslexic', Verdana, sans-serif;
  --letter-spacing: 0.12em;
  --word-spacing: 0.16em;
  --line-height: 1.8;
}

body {
  letter-spacing: var(--letter-spacing);
  word-spacing: var(--word-spacing);
  line-height: var(--line-height);
}

Do not make it the default

Forcing OpenDyslexic on every visitor is counterproductive. Many dyslexic readers prefer the standard face they already know, and non-dyslexic readers often find specialised faces harder going. Offer the switch, remember the preference, and test with real readers. To apply a dyslexia-friendly face to an existing document, use the dyslexia font converter.

Dyslexia-friendly font questions

What makes a font dyslexia-friendly?
Dyslexia-friendly fonts have distinct letterforms that prevent confusion (b/d/p/q), larger x-heights, consistent spacing, and avoid mirroring. Examples include OpenDyslexic, Lexie Readable, and Dyslexie.
Are dyslexia fonts scientifically proven to help?
Research is mixed. Some studies show improvement in reading speed and error reduction, while others show no significant difference. Individual results vary, so let users choose their preferred font.
What's the best free dyslexia-friendly font?
OpenDyslexic is the most popular free option, available in multiple weights. Lexie Readable and Sylexiad are also free. Comic Sans, while not designed for dyslexia, has features that help some readers.
Should websites use dyslexia fonts by default?
No. Offer dyslexia-friendly fonts as an option rather than default. Many dyslexic readers prefer standard fonts they're familiar with. Provide a font switcher for user choice.
What other design factors help dyslexic readers?
Adequate line spacing (1.5x), shorter line lengths (45-75 characters), left-aligned text, high contrast, cream/off-white backgrounds, and avoiding justified text all improve readability.

Cognitive accessibility: typography for ADHD, autism, and learning differences

Cognitive disability covers ADHD, autism spectrum conditions, learning disabilities such as dyscalculia and dysgraphia, intellectual disability, brain injury, and age-related decline. The CDC estimates that around 16% of children aged 3 to 17 have a developmental disability, many of which affect cognition.

Unlike contrast, cognitive accessibility has no single number to hit. The mechanism is cognitive load: complex, decorative, or inconsistent typography consumes mental effort that should be going into understanding the content. Familiarity, simplicity, consistency, obvious hierarchy, and generous spacing all reduce that load.

What each condition needs

Cognitive conditions with their typographic challenge and the design response
ConditionTypographic challengeDesign response
ADHDLong paragraphs lose attention, dense text triggers avoidance, inconsistent formatting splits limited focusParagraphs of 3 to 5 lines, frequent headings, bulleted lists in place of prose, plenty of white space
AutismSensory sensitivity to busy typography, difficulty with abstract or metaphorical presentation, anxiety from inconsistencyAbsolute consistency, predictable repeating patterns, literal presentation, explicit structure
Learning disabilitiesSymbol confusion, working memory pressure, slower processing speedFonts that separate 1, l and I clearly, adequate spacing, consistent formatting so structure is never relearned
Memory impairmentLosing your place in long documents, forgetting what an earlier section saidDescriptive headings that restate context, repeated patterns, visual anchors, summaries that repeat key information

Choose familiar over optimal

Arial, Verdana, Tahoma, and Calibri have been seen thousands of times by almost every user, so decoding them costs close to nothing. That familiarity beats any theoretical legibility advantage a novel typeface might claim. Preview candidates across sizes and weights with the font preview generator before committing.

What raises cognitive load

  • Decorative and display faces, which demand extra processing per glyph
  • Script and handwriting faces, which are the worst case for processing difficulty
  • Unfamiliar trendy faces, which force the reader to learn new letterforms
  • All caps, which removes the word shape cues that allow whole-word recognition

Consistency is the highest-leverage rule

Use one font family across the whole interface. Every h2 should look identical to every other h2, and every link identical to every other link. Once a reader learns that large bold text is always a section heading, they can navigate without conscious effort. Breaking that pattern forces deliberate processing, which is exactly the resource in short supply.

/* One family, one scale, no exceptions */
:root { --font-body: Arial, Verdana, sans-serif; }

body { font-family: var(--font-body); font-size: 1rem; line-height: 1.6; }

h1 { font-size: 2rem;    font-weight: 700; margin-top: 0;    margin-bottom: 1rem; }
h2 { font-size: 1.5rem;  font-weight: 700; margin-top: 3rem; margin-bottom: 1rem; }
h3 { font-size: 1.25rem; font-weight: 600; margin-top: 2rem; margin-bottom: 0.75rem; }

Write the scale down. A short pattern library (page titles 32px bold, section headings 24px bold, subsection headings 18px semibold, body 16px regular, captions 14px regular) is what stops the system drifting once more than one person touches it.

Make hierarchy unmistakable

  • Step sizes by at least 1.5 times. A 16px body and a 17px heading do not register as different.
  • Use 400 against 700. Subtle steps like 500 against 600 are invisible to most readers.
  • Add space above headings. Size, weight, and a large top margin together make a section break impossible to miss. If you are fine-tuning weights on a variable font, the variable fonts guide covers picking meaningful steps.
  • Use real heading elements. h1 to h3 in order, never skipping a level, so the structure survives with styling disabled and works for screen reader users who also have cognitive disabilities.

Layout and writing

Layout

  • Paragraphs of 3 to 5 lines at most
  • Line height 1.6 to 1.8 for body text
  • Bulleted lists wherever prose would carry a sequence
  • White space treated as a feature, not wasted room

Writing

  • Plain language, no jargon or idiom without need
  • Sentences of 15 to 20 words at most
  • Active voice, since passive constructions add a reversal step
  • Headings that describe rather than tease

Cognitive accessibility resists automated testing more than any other category. Testing with people who actually have ADHD, autism, or a learning disability surfaces problems no linter will ever report.

Cognitive accessibility questions

How do fonts affect cognitive accessibility?
Clear, familiar fonts reduce cognitive load. Avoid decorative fonts for body text, use consistent typography, and ensure adequate spacing. Simple sans-serif fonts often work best.
What fonts are best for users with cognitive disabilities?
Simple, clean fonts like Arial, Verdana, or Helvetica. Avoid fonts with unusual letterforms, decorative elements, or inconsistent spacing. Familiarity often trumps 'optimal' design.
How does typography affect reading comprehension?
Good typography reduces cognitive effort: adequate line height (1.5+), comfortable line length (45-75 chars), left-aligned text, clear hierarchy, and consistent styling improve comprehension.
Should accessible sites limit font variety?
Yes, use 2-3 fonts maximum. Consistent typography creates predictable patterns that reduce cognitive load. Reserve different fonts for clear semantic purposes (headings vs body).
How do animations and moving text affect cognitive accessibility?
Animated text can be distracting or cause seizures. Avoid auto-playing text animations, provide pause controls, and respect prefers-reduced-motion media query settings.

Screen readers and fonts: why the typeface is irrelevant

Screen readers convert digital text into synthesised speech or refreshable braille. JAWS, NVDA, VoiceOver, TalkBack, and Narrator all work the same way: they parse the DOM and the accessibility tree, and they never touch your font files. Whether you set Comic Sans or Helvetica makes no difference at all to a screen reader user.

What does matter is document structure: semantic HTML, heading hierarchy, landmarks, alternative text, form labels, and ARIA where native HTML cannot express the pattern. A beautifully typeset page with no semantic structure is unusable; a visually plain page with correct structure is excellent.

What the accessibility tree carries

Included

  • Text content, the actual words
  • Semantic roles: heading, button, link, list, navigation
  • State: checked, expanded, selected, disabled
  • Relationships: input labels, aria-describedby links
  • Alternative text for images and icons

Not included

  • Font family
  • Font size, weight, or style
  • Colours and contrast
  • Visual spacing and layout
  • Decorative CSS such as borders and shadows

Semantic emphasis beats visual styling

Screen readers can announce semantic emphasis but ignore CSS that only looks emphatic. The two versions below render identically and read very differently.

<!-- Carries meaning to assistive technology -->
<p>This is <strong>important</strong> text.</p>
<p>This is <em>emphasised</em> text.</p>

<!-- Looks the same, carries nothing -->
<p>This is <span style="font-weight: 700">bold</span> text.</p>
<p>This is <span style="font-style: italic">italic</span> text.</p>

Icon fonts are the real font accessibility problem

Display fonts are harmless to screen readers. Icon fonts are not. Font Awesome, Material Icons, and IcoMoon map glyphs onto Unicode characters, frequently in the private use area, and a screen reader will try to announce them as text. The result is an unknown character, a random phonetic fragment, or a completely unlabelled button. Understanding how Unicode ranges work explains why private use area mappings behave so unpredictably.

Hide purely decorative icons

<button>
  <i class="fa fa-heart" aria-hidden="true"></i>
  Favorite
</button>
<!-- Announced as: "Favorite, button" -->

Label icon-only controls

<button aria-label="Close dialog">
  <i class="fa fa-times" aria-hidden="true"></i>
</button>
<!-- Announced as: "Close dialog, button" -->

<button>
  <i class="fa fa-search" aria-hidden="true"></i>
  <span class="sr-only">Search</span>
</button>

.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

Better still, use SVG

SVG scales cleanly, supports multiple colours, does not suffer the flash of invisible text that icon fonts show while loading, and gives you exact control over what is announced.

<!-- Decorative: hidden from assistive technology -->
<svg aria-hidden="true" focusable="false"><use href="#icon-heart" /></svg>
<span>Favorite</span>

<!-- Informative: announced -->
<svg role="img" aria-labelledby="search-icon-title">
  <title id="search-icon-title">Search</title>
  <use href="#icon-search" />
</svg>

The title attribute is a last resort. Not every screen reader announces it, so prefer aria-label or visually hidden text.

What actually decides the experience

Screen reader users navigate by headings more than by any other method, then by landmarks, lists, and the links list. Get those right and the font question disappears.

<header>
  <nav aria-label="Primary navigation">
    <ul>
      <li><a href="/">Home</a></li>
      <li><a href="/accessibility">Accessibility guides</a></li>
    </ul>
  </nav>
</header>

<main>
  <h1>Page title</h1>
  <h2>Section</h2>
  <h3>Subsection</h3>

  <label for="email">Email address</label>
  <input type="email" id="email" required>
</main>

<footer>...</footer>

<!-- Announced as: "Primary navigation, navigation landmark",
     "List, 2 items", "Item 1 of 2, Home, link" -->
  • Real headings, in order. Never fake a heading with a styled div, and never skip a level.
  • Descriptive link text.The links list strips surrounding context, so "Read the WCAG contrast guide" works and "Click here" does not.
  • Programmatic form labels. A placeholder is not a label.
  • Test with a real screen reader. NVDA is free on Windows and VoiceOver ships with macOS. Navigate your own site with the screen off.
  • Reach for ARIA last. The first rule of ARIA is not to use ARIA. Prefer native HTML, and add ARIA only for custom widgets HTML cannot express.

Screen reader and font questions

Do fonts affect screen reader performance?
Screen readers don't read fonts. They read text content from the DOM. However, font rendering affects sighted users who may use screen readers alongside visual display. Unicode support matters for special characters.
Why do icon fonts cause accessibility problems?
Icon fonts use Unicode characters for visual icons, which screen readers may announce as random characters or skip entirely. Use SVG with proper aria-labels instead of icon fonts.
How should fonts handle screen reader users?
Ensure fonts have proper Unicode mapping, don't use ligatures for functional text, avoid pseudo-content for meaningful information, and test with actual screen readers (NVDA, JAWS, VoiceOver).
Do decorative fonts affect screen readers?
Only if implemented poorly. Screen readers read the underlying text, not the visual appearance. Ensure decorative fonts don't use unusual Unicode mappings that might be announced incorrectly.
Should accessible sites avoid custom fonts?
No. Custom fonts are fine for accessibility as long as text remains readable, resizable, and properly structured in HTML. Screen reader users can override styles with their preferences.
Sarah Mitchell

Written & Verified by

Sarah Mitchell

Typography expert specializing in font design, web typography, and accessibility

Make your fonts accessible

Start with the dyslexia-friendly font converter, or work through the WCAG font size requirements to get your type scale right.

Advertisement