End hover abuse now

All around the web, hover states are being abused. Let’s put a stop to it.

Whatever a mouse user is doing, they are perpetually hovering. They may be hovering over a specific control, or over several places in the course of another action: dragging a scrollbar, selecting a word, even just idling around the screen. But until they click, the user has taken no positive action. A click is unambiguous: the caveman pointing at the mammoth, the dog scratching at the door to go out. It cannot be done in the course of anything else.

Hover states can provide subtle visual cues that help the user understand how something works. A faint glow around a “favourite” star. An underline appearing underneath a link. But they should not be used for anything else. Hovering does not demonstrate intent.

Designers who pop up information panels or move page elements on hover are using flawed logic, second-guessing what users want to do before they do it. The result, which I’ve seen in countless usability tests, is that users activate these controls accidentally. You know what happens? People actually flinch: “What was that?” They return with hesitation, less confident in their understanding of the site. It’s no accident that the Twitter worm propagated through hover—accidental activation meant users spread the worm unintentionally.

You may argue that hover states save space, and you can use hover panels to display supplementary information that helps the user know whether to click. It’s a feeble excuse. If the information is important, it should be on the screen already; if not, it should be omitted. The hover compromise shows only that you were too timid to make this decision.

Another compelling reason not to hide information behind hover is that you can’t rely on hover states even existing. The approach prioritises just one mode of input—the mouse—and makes information unavailable to people using keyboards, touchscreens and screenreaders. That’s not what your parents taught you.

Please, do your part. End hover abuse now.

Addendum: If you positively have to use hover popups, at least add a delay so they only activate if the user hovers for >500ms. It’s still no guarantee of intent, but it makes it a more likely probability.

[Post edited lightly in July 2015 inc. cleaning up some needless default gendering. Sorry about that.]