1.4.5 Level AA Guideline 1.4 Distinguishable Added in WCAG 2.0 Not detectable automatically

Images of Text

Text is used to convey information rather than images of text, except where the presentation is essential (logotypes) or the image is customisable by the user.

Who this affects

Low-vision users cannot restyle an image of text — it pixelates on zoom and ignores their font, spacing, and colour preferences. Screen reader users depend entirely on the alt text.

The failure and the fix

Each example below is a self-contained page, loaded in a frame so its markup cannot affect this page. Open either one on its own to test it with a keyboard or screen reader.

Fails 1.4.5

Open the failing example in a new tab

fail.html — the problem

<h1>Spring festival</h1>

<!-- FAILURE 1: the headline is a picture of text. Even with correct alt text
     - so 1.1.1 passes - it pixelates when enlarged, ignores the user's font,
     colour and spacing preferences, cannot be selected or searched, and cannot
     be translated. -->
<img src="../../assets/media/promo-heading.svg" width="420" height="70"
     alt="Three days of events, 12 to 14 April">

<!-- FAILURE 2: a "button" that is really an image. It cannot reflow, cannot
     grow with the user's text size, and its label is locked into the file. -->
<p><a href="#book"><img src="../../assets/media/promo-button.svg" width="200" height="52"
     alt="Book festival tickets"></a></p>

<!-- FAILURE 3: a paragraph of terms and conditions rendered as an image,
     usually because someone wanted a specific typeface. This is the worst
     case: a wall of unselectable, unsearchable, unzoomable text. -->
<img src="../../assets/media/promo-terms.svg" width="420" height="96"
     alt="Tickets are non-refundable. Members save 20%. Under 16s go free with a paying adult.">

<p id="book">Booking.</p>

Meets 1.4.5

Open the passing example in a new tab

pass.html — the fix

<h1>Spring festival</h1>

<!-- FIX 1: real text styled with CSS. It stays sharp at any zoom, respects the
     user's font and spacing overrides, can be selected, searched, translated
     and read by a screen reader as text rather than as an alt attribute. -->
<p class="promo-heading">Three days of events, 12 to 14 April</p>

<!-- FIX 2: a real link styled as a button. It grows with the text, reflows,
     and its label is in the DOM. -->
<p><a class="button" href="#book">Book festival tickets</a></p>

<!-- FIX 3: terms as real text. -->
<p class="promo-terms">Tickets are non-refundable. Members save 20%.
   Under 16s go free with a paying adult.</p>

<!-- The exceptions, and they are narrow:
       - LOGOTYPES: a brand's wordmark is exempt. Your logo can stay an image.
       - ESSENTIAL presentation: a font specimen, a scanned manuscript, or a
         typographic artwork where the exact rendering IS the content.
       - Customisable images: at AA you may use an image of text if the user
         can adjust its font, size and colours. This exception is removed
         entirely at AAA by 1.4.9.

     "Our designer wanted a specific typeface" is not an exception - web fonts
     exist. Neither is "the CSS was hard". -->

<p id="book">Booking.</p>

How to test it

Look for headings, buttons, banners, quotes, and infographics rendered as images. Ask whether CSS could produce the same effect with real text.

  • Automated

    Recognising that an image contains text requires OCR and human judgement about whether it is essential.

    No axe rule maps to this criterion. It has to be checked by a person.

  • Keyboard

    Unplug the mouse. Move through the page with Tab, Shift+Tab, Enter, Space and the arrow keys. See the keyboard testing script.

  • Screen reader

    Listen to both examples with NVDA, JAWS, VoiceOver or TalkBack and compare what is announced. See the screen reader cheat sheets.

  • Visual

    Zoom to 200% and 400%, narrow the viewport to 320 px, and apply the text-spacing overrides. See the visual testing procedures.

In the specification