Skip to content
easeweb
Search topics

Task boards that say nothing when a card moves

A card moves to another column by its button or by a drag, but its new place shows only on screen, in the column and the counts, and nothing in a live region says where it went.

WCAG 2.2
SC 4.1.3AA· new in 2.1
Required by
EN 301 549 (EU)
Broken list.append(card);
The accessibility problem illustrated: No vision:Where did my card go?
01

The problem

Screen reader users move a card and hear nothing about where it went, so they can't tell whether the move worked without leaving the card to read the column.

02

Try it

Press “Move to Done” on “Write release notes”, and listen. Then drag a card to another column.

The panel shows what a screen reader says. After each move, does anything say where the card went?

Broken Can you fix this?

BrokenCards that move in silence

To do 2

  • Write release notes
  • Update the pricing page

Doing 1

  • Fix the footer links

Done 0

Screen reader says:

(press a Move button, or drag a card)

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Write where the card went into a status region that was on the page before the move.

  1. 1Keep one status region on the page from the start, outside the board.
  2. 2After every move, made any way, say the card and its new column, once.
  3. 3Never make the board, a column or a card list a live region.
Before Cards that move in silence
<section class="column" data-column="todo">  <h2>To do <span class="count">2</span></h2>  <ul>    <li data-card="notes" draggable="true">      <span id="card-notes">Write release notes</span>      <button type="button" data-to="doing" aria-describedby="card-notes">Move to Doing</button>      <button type="button" data-to="done" aria-describedby="card-notes">Move to Done</button>    </li>    …  </ul></section><!-- Doing and Done are the same: a heading with its count over a list of cards -->
After

A move line under the board

<section class="column" data-column="todo">  <h2>To do <span class="count">2</span></h2>  <ul>    <li data-card="notes" draggable="true">      <span id="card-notes">Write release notes</span>      <button type="button" data-to="doing" aria-describedby="card-notes">Move to Doing</button>      <button type="button" data-to="done" aria-describedby="card-notes">Move to Done</button>    </li>    …  </ul></section><!-- Doing and Done are the same: a heading with its count over a list of cards --><p id="board-status" role="status" class="board-status"></p>

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.

Test with: Screen reader, Keyboard, Mouse

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 the board component or its drag library changes.

Limits

Live regions behave differently across screen readers and browsers, and their timing beside a focus change differs most. This pattern covers moving a card between columns on one board. Making a card movable without dragging is covered in drag-and-drop boards that only a mouse can use, and reordering items within one list, with their new position said, in sortable lists that move only by dragging, or in silence. Status messages in general are covered in status messages that are shown but never announced. Test your real board, with its drag library, its card limits and its narrow layout, with the screen readers your users 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