About this set
A prioritised task queue whose rows can be put in a new order by dragging or with the keyboard. Each row starts with a grip handle. Drag a row and the others move out of its way while it is dimmed and an indigo line marks where it will land. Or Tab to a handle and press the up or down arrow key to move that row one place, with focus staying on the handle so you can keep going. Both paths renumber the position column and write a sentence such as Rework the onboarding copy moved to position 2 of 4 to a status line under the table, which screen readers announce. Rows are draggable table rows using the browser’s built-in drag and drop, and the row being dragged and the drop target are marked with data attributes that all three versions style. The handles carry a hidden instruction through aria-describedby, and the handle’s name includes the task. Use it for priority lists, playlists, menu editors and form builders. Send the new order to your server in the dragend and keydown handlers.
What’s included
- Drag and drop with a drop-position line
- Arrow keys move a row from its handle
- Positions renumbered after every move
- Moves announced through a status region
- Handles named after their task
Accessibility
The caption explains the two ways to reorder, the handle column has a hidden header, and each handle is a native button whose name includes the task and whose description gives the arrow key instruction. Every move is written to a role="status" region, focus stays on the handle after a keyboard move, and handles show a 2px focus outline. Nothing animates.
Customise it
The drop line is the inset 0 2px 0 #4f46e5 box-shadow on tr[data-over] cells and the dragged-row opacity is .4 on tr[data-dragging]. Handle colours are #858d9c and #f0f2f6 in .handle (plain CSS), the --bs-btn-* variables (Bootstrap) or the handle classes (Tailwind).




















