J2.01.1large-text contrast thresholddesignresearch

Contrast thresholds relax as type size and weight increase

Aliases: large text · WCAG large text · contrast sensitivity

What it is

The same gray can fail as 12 px caption copy and pass as 24 px bold. The contrast floor for text is not a single “dark enough” number. It relaxes with size and weight: ordinary text needs a higher luminance ratio; large text (commonly about 18 pt regular or 14 pt bold, roughly 24 px / 18.5 px on screen) may sit at a lower ratio. The exception is not “headings matter more.” Larger, heavier letters occupy lower spatial frequencies on the retina, so less luminance difference is required to resolve strokes. Icons, borders, and control outlines do not inherit this relaxation.

Why it happens

The contrast sensitivity function is harsher at mid-to-high spatial frequencies. Thin, small glyphs sit where more luminance difference is needed to separate stroke from ground. Increasing size lowers the equivalent frequency; increasing weight thickens strokes and shifts energy the same way. Relaxation therefore depends on size and weight together — a 16 px medium “heading” is not large text; 14 px bold is only just inside some definitions.

Classification uses rendered visual size, not the role name in the stylesheet. If the user raises system font size, yesterday’s body copy may become large text. Point sizes on a 1× artboard must be checked against a 16 px root. Dense CJK strokes should not be treated as large text merely because the em square looks blocky at the same pixel size.

Studying it

Measure contrast on painted pixels, not on swatches in a file. Build a size × weight matrix of the same string and also record reading speed and identification errors. WCAG 2.x luminance ratios remain the usual conformance stick. APCA models size and weight continuously and is useful as a research check; substituting it for ratio-based claims misaligns with most legal baselines.

Independent variables: type size, weight, foreground/background luminance contrast. Dependent variables: contrast ratio, reading speed, omission or misread rate, share of styles classified as large text.

Log “looks like a heading” separately from “is large in pixels,” so role names cannot impersonate size.

Where it stops holding

The relaxation applies to text only. A thin glyph on a large button cannot borrow the large-text floor. Stricter conformance levels raise both the ordinary and large-text floors. Placeholders, disabled copy, and footer legalese still follow their rendered size; “not body text” is not an exemption. Custom fonts and zoom reclassify styles. Projection or long viewing distance can make on-screen large text small again.

Applying it

  • Classify every type style as ordinary or large by rendered pixels and weight. Do not auto-relax because the role is “heading.”
  • Mix colors to the stricter floor for ordinary text; use the looser floor only when size or boldness actually crosses the line.
  • Do not assume one gray that passes at 24 px also passes at 12 px — only the large cut passed.
  • Verify with a type table marking which styles qualify as large; run a contrast checker on rendered colors for the rest. Raise system text size and see whether classifications flip.

Related

  • Same group: J2.01.2 Semi-transparent text must be measured on the composited color · J2.01.3 Text on photos and gradients needs a guaranteed floor
  • Nearby: J2.10 Non-text Contrast · J2.15 Dark Mode and High Contrast Compatibility
  • Search terms: large text · contrast ratio · contrast sensitivity function

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/J2.01.1