If I had a podcast, I would tell you to close your eyes and imagine the following. But this is a blog post…
You’re walking down a hallway, hand out, ready to turn a doorknob. Your hand lands on the knob… and suddenly the door slides open before you touch it. Or worse, the room you thought you were entering is actually a closet full of vacuum cleaners. Disorienting, right? Jarring? A little bit scary?
That’s how a user feels when they tab through a webpage and a piece of content jumps, moves, or redirects them without asking for permission first.
When any component receives focus, it must not initiate a change of context.
If I land on a link, a button, or a form field just by pressing Tab, nothing dramatic should happen. No page reloads. No pop-ups. No sudden navigation to a different section. Nothing. Until I activate it.
The only thing that should happen is that I get a visual indicator telling me, “Hey, you’re here now.”
If I want to click the link or submit the form, then things can change. But just landing there? That’s a no-go zone for surprises.
The Cognitive Whiplash
Picture yourself using a screen reader or navigating via keyboard. You’re building a mental map of the page. You tab over an input field. Suddenly—bam!—the page scrolls automatically. Or a modal opens. Or you get redirected to a new URL.
Your brain goes into panic mode. “Where did I go? What happened? Did I miss something? Do I need to start over?”
For users with cognitive disabilities, attention deficits, or anyone who relies on the predictable rhythm of keyboard navigation, this isn’t just annoying. It’s a tripwire. It breaks their flow. It turns a smooth ride into a rollercoaster they didn’t buy a ticket for.
Predictability is a form of respect.
When we design interfaces that act unexpectedly on focus, we’re saying: “I don’t trust you to know what you’re clicking. I’m going to move things around for you.”
That’s patronizing. It’s also dangerous.
Users have a right to control when actions happen. They shouldn’t be held hostage by a script that assumes their next step before they’ve even decided on it.
TL;DR
3.2.1 is about keeping the peace between the user and the interface. It’s a promise that says: “I won’t sneak up on you. I won’t move the goalposts while you’re watching. You control the action.”
So, check your code. Look for those sneaky onfocus event handlers that are doing too much. Kill them. Make your interactions wait for a proper invitation (a click, a keypress).
Your users will breathe easier knowing the door doesn’t slide open until they actually turn the knob.
Comments are closed.