Skip to content
easeweb
Search topics

Videos a keyboard can't play, or with no captions button

A product video's play button, drawn over the poster, takes only clicks and says nothing, or the player the site built has no button for the captions and the described version the video has.

WCAG 2.2
SC 2.1.1ASC 4.1.2A
EN 301 549
Clause 7.1.1Clause 7.2.1
Required by
Section 508 · EN 301 549 (EU)
Broken <div class="big-play"></div>
The accessibility problem illustrated: Motor:How do I play the video?
01

The problem

Keyboard and screen reader users can't start the video, so they never reach its captions, and in a player with no captions button, nobody can turn on the captions or the described version.

02

Try it

Using only the keyboard, play the brewing video and turn on its captions.

In Broken 1, the play button on the picture takes only clicks: Tab goes from the heading straight to the link under the video, and the panel under the player shows that a screen reader finds nothing in it. Click it with the mouse to see the rest of the player. In Broken 2, the play button works from the keyboard, but nothing in the bar turns on the captions or the described version. Apply a fix and try again.

Broken Can you fix this?

How to brew our house blend

Shop the house blend

Moving through the player, a screen reader says:

(nothing: no button, no text)

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Make the play button over the poster a named button that hands focus on to the bar, show the bar from the start, and give it captions and audio description buttons whenever the video has them, or use the browser's own controls.

  1. 1Every control, the play button over the poster included, is a native button or slider, or the browser's own.
  2. 2Each says what it does, and when one goes away, focus moves on to what replaces it.
  3. 3Whenever the video has captions or a described version, the player can turn them on.
Before

A play button over the poster that takes only clicks

<div class="player">  <video src="brew-guide.webm" poster="brew-guide.jpg">    <track kind="captions" srclang="en" label="English"      src="brew-guide.en.vtt">  </video>  <div class="big-play"></div>  <div class="player-bar" hidden>    <input type="range" class="seek" aria-label="Position"      min="0" step="1" value="0">    <button type="button" class="play" aria-label="Play"></button>    <span class="time">0:00</span>    <button type="button" class="mute" aria-label="Mute"      aria-pressed="false"></button>    <input type="range" class="volume" aria-label="Volume"      min="0" max="1" step="0.1" value="1">    <button type="button" class="captions"      aria-pressed="false">CC<span class="visually-hidden"> captions</span></button>    <button type="button" class="described"      aria-pressed="false">AD<span class="visually-hidden"> audio description</span></button>  </div></div>
After

A play button and a bar, with captions and audio description

<div class="player">  <video src="brew-guide.webm" poster="brew-guide.jpg">    <track kind="captions" srclang="en" label="English"      src="brew-guide.en.vtt">  </video>  <button type="button" class="big-play" aria-label="Play video"></button>  <div class="player-bar">    <input type="range" class="seek" aria-label="Position"      min="0" step="1" value="0">    <button type="button" class="play" aria-label="Play"></button>    <span class="time">0:00</span>    <button type="button" class="mute" aria-label="Mute"      aria-pressed="false"></button>    <input type="range" class="volume" aria-label="Volume"      min="0" max="1" step="0.1" value="1">    <button type="button" class="captions"      aria-pressed="false">CC<span class="visually-hidden"> captions</span></button>    <button type="button" class="described"      aria-pressed="false">AD<span class="visually-hidden"> audio description</span></button>  </div></div>

Why this fix: Use native HTML first

Fixing this with an AI coding assistant? Get this guide as Markdown, or get every guide in your coding agent.

04

Design ideas

A video can start from a poster that looks good and still works from the keyboard.

Five ways to draw how the brewing video starts. Tab to each and try to turn on the captions before you start it: three start from the keyboard and offer the captions, two don’t.

In the design file

  • Draw the play button as a button, with its focus ring, and write beside it the name a screen reader will say, such as Play video.
  • After the first press: draw the player with its bar, and mark the Pause button as where focus lands.
  • Put the captions button, and the audio description button when there is a described version, where they show before the video starts, in a bar that is always there or beside Play on the poster.
  • Draw the focus ring over the lightest and the darkest part of the poster, so it shows on both.

Passes

  • A play pill with the running time A pill in the poster’s corner says Watch and 0:24, white on #1b1b1b at 17.22:1, so it reads as a button and tells people how long the video is before they start. The bar under the picture is there from the start, so CC and AD are one press too. Tab stops on the pill, Enter starts the video, and the yellow ring shows past a dark gap on any part of the picture.
  • The whole poster as one button The poster, its title on a solid #1b1b1b band (17.22:1) and a small play mark make one button, named by the title, so a screen reader says what will play, and the bar under it is there from the start, so the captions are one press before the video plays. The ring goes round the whole card, which suits a grid of videos where each card plays its own.
  • CC and AD beside Play, on the poster Play, CC and AD sit together on the poster, so a clean poster with no bar still lets people turn on captions or audio description before they start, in one press each. The chips are white on #1b1b1b at 17.22:1, filled yellow when on, and the bar that appears once the video plays keeps the same choice.

Fails

  • A play bubble that follows the pointerWCAG 2.1.1 A round Play bubble trails the mouse across the poster, and a click anywhere starts the video. There is no button under it, so Tab goes straight past the video, and on a touch screen there is no pointer for the bubble to follow.

    Rule of thumb: Use native HTML first

  • A muted loop with only a sound chipEN 301 549 7.1.1 The video loops with the sound off and one round chip to turn it on. The narration has captions, but nothing shows them, so turning the sound on is the only way to the recipe. Drawn still here; on a site it loops.
05

Verify the fix

4 checks, no mouse.

Test with: Keyboard, Screen reader

0 of 4 checked

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat after updating the player or its library.

Limits

This is a starting pattern, not a guarantee for every application. It covers how the player's controls are reached, what they say, and whether the captions and the described version can be turned on. What is in them is covered elsewhere: videos without captions, or with unchecked automatic ones for the captions, and videos without audio description of what they show for the description. A video that starts with its sound on needs a way to stop it first, in autoplaying sound with no way to stop it, and one that moves by itself beside other content needs a pause, in tickers, carousels and animations that can't be paused. Test the complete journey in the browsers and with the assistive technology your viewers use.

This is a recreated teaching example, not a finding about a named client. The code is a starting pattern: test it in your own product. No completed assistive-technology test is claimed here.

Keep this fixed as your code changes.

Turn guides like this into rules your coding agents and CI follow, then have the result retested with a keyboard and screen readers.

How retests work