Skip to content
easeweb
Search topics

Video players that hide captions in a settings menu

A shop's own video player puts play and volume in its control bar, but captions and audio description three steps deep in a settings menu.

EN 301 549
Clause 7.3
Section 508
503.4.1503.4.2
Broken <button aria-label="Settings">
The accessibility problem illustrated: No hearing:Where do I turn captions on?
01

The problem

People who need captions or audio description have to know they are under a settings menu, and open three levels to turn them on.

02

Try it

Turn on the captions, then the audio description. How many presses did each take?

On the broken side, both are under Settings, two menus deep, while play and volume are in the bar. Apply the fix to get CC and AD buttons beside the volume. The panel under the player counts the presses each needs.

Broken Can you fix this?

How to brew our house blend

0:00 / 0:00

Presses from the player to turn on

Volume: 1 · Captions: 3 · Audio description: 3

Now: captions off, audio description off

Three presses each, where volume takes one

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Give captions and audio description their own buttons in the control bar, beside volume.

  1. 1Captions take one press, as volume does.
  2. 2Audio description takes one press too, wherever a described version exists.
  3. 3Both stay in the bar at every width and in full screen.
Before Captions and description inside Settings
<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="player-bar">    <button type="button" aria-label="Play">…</button>    <input type="range" aria-label="Volume"      min="0" max="1" step="0.1" value="1">    <button type="button" aria-label="Settings"      aria-expanded="false" aria-controls="player-settings">…</button>    <button type="button" aria-label="Full screen">…</button>  </div>  <div id="player-settings" class="player-menu" hidden>    <!-- Opens a second menu: Off, English -->    <button type="button">Subtitles</button>    <!-- Opens a second menu: English; English, described -->    <button type="button">Audio</button>  </div></div>
After Captions and audio description buttons beside volume
<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="player-bar">    <button type="button" aria-label="Play">…</button>    <input type="range" 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>    <button type="button" aria-label="Settings"      aria-expanded="false" aria-controls="player-settings">…</button>    <button type="button" aria-label="Full screen">…</button>  </div>  …</div>

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

04

Verify the fix

4 checks, no mouse.

Test with: Keyboard, Screen reader, Zoom

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 plugin.

Limits

This is a starting pattern, not a guarantee for every application. The buttons only help when there is something behind them: captions that are right, covered in videos without captions, or with unchecked automatic ones, and a description that says what is shown. The player's other controls need names, state and keyboard support too. EN 301 549 and the Trusted Tester tests for Section 508 ask this of players the site builds; test the complete journey with the people who will watch it, in the players and platforms the video really plays in.

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