Accessible Quantity Pickers and Steppers on Product Pages

November 3, 2026

Plus and minus buttons look trivial until the quantity field has no name, no announcement, and a tap target too small to use. How quantity steppers fail under WCAG and how to test them.

A quantity stepper is three controls pretending to be one. There is a minus button, a number, and a plus button, and on a lot of product pages only one of those three is actually operable without a mouse. The buttons are divs with click handlers, the number is not a field at all, and a screen reader lands on the group and hears nothing it can act on.

WCAG 2.2 sets plain conditions here. Buttons need an accessible name under 4.1.2 Name Role Value, the whole control needs to work from a keyboard under 2.1.1, and a change in quantity is a status the user should be able to confirm without hunting for it. None of that asks for a redesign. It asks that the stepper be built as controls, not as decoration that happens to react to a pointer.

Name the buttons for what they change

Minus and plus are not names. A button announced as plus button tells a screen reader user nothing about what will increase, and on a cart page with five line items there may be five identical plus buttons in a row. Decrease quantity for the named product is longer and it is the difference between using the cart and guessing at it. The product name does not need to be repeated in full if context is programmatically clear, but it does need to be determinable.

The same point applies to the value itself. If the quantity is plain text updated by script, changing it silently leaves the user unsure whether the click registered. Pair the field with an input where possible, or announce the new total through a polite live region. Do not move focus to do it. The shopper was on the plus button and, unless they chose otherwise, that is where they should stay.

Keyboard and target size are not extras

Test the stepper with Tab and Shift Tab only. Can you reach minus, the field, and plus in a sensible order, see where you are, and type a number directly? Typing matters more than stepping for anyone ordering 40 units, and a stepper that only allows one by one increments forces forty activations where one edit would do. That is slow for everyone and a real barrier for switch and voice control users.

Target size is the other quiet failure. WCAG 2.5.8 Target Size Minimum at AA sets 24 by 24 CSS pixels with narrow exceptions, and many steppers ship at 18 pixels because the design file drew them that way. On the cart page the cost of a miss is not abstract. A stray tap on remove instead of minus deletes the line item the shopper was adjusting.

What to record when it fails

Write the failure against a criterion, with the keystrokes and the product page you tested. Quantity stepper on the cart drawer, minus button not focusable, fails 2.1.1, is a ticket a developer can fix. The stepper feels inaccessible is not. Include the assistive technology and browser combination, because a button that works in one pairing and not another is still a defect, just a narrower one.

Retest after any theme or app update that touches the product form. Steppers are exactly the kind of small component that gets replaced during a redesign without anyone noticing, and the regression rarely shows up in a visual check because the new version looks identical to the old one.

Related reading: Accessible Address Autocomplete and Lookup Fields at Checkout, Accessible Subscription Pause, Skip, and Cancel Controls, Accessible Password Creation: Where Signup Forms Lock People Out.

Frequently asked questions

Does a quantity stepper have to be an input field?

No. WCAG does not prescribe one markup pattern. A group of real buttons plus a properly labelled input is the most flexible pattern, but buttons with a live region announcing the current quantity can also pass, provided every part is keyboard operable and named.

What should the minus and plus buttons be named?

They should make the action and its object clear, for example decrease quantity or increase quantity for a specific product on cart pages. Identical names repeated across line items force the user to guess which product will change.

Why can a shopper not just type the quantity?

On many steppers they cannot, because the number is rendered as text rather than an editable field. Allowing direct entry is faster for bulk orders and essential for voice and switch users, for whom repeated stepping is expensive.

How small can stepper buttons be?

WCAG 2.5.8 sets a minimum target of 24 by 24 CSS pixels at Level AA, with limited exceptions. Smaller targets raise the miss rate for everyone, and the cost of a miss next to a remove control is high.

Find out where your store stands

Get a free accessibility audit

Frequently asked questions

What is the main takeaway from What should an agency check in a Shopify theme before promising accessibility??

The main takeaway is to work through the basics in order, check each step as a real user would experience it, and fix patterns at their source rather than patching a single example. A short written record of what you checked makes the next review faster and more reliable.

How should I apply this guide in practice?

Pick one page, product, or routine and apply the steps there first. Note what changes, keep the change if the result improves, and only then roll the same pattern wider. Small verified changes beat a large unverified overhaul every time.

What should I check again later?

Recheck after any template, product, app, or routine change, and on a regular monthly rhythm in between. Conditions drift over time, so a dated check is what tells you whether a fix held or quietly broke again.