Choice check

Choice check

TL;DR: Do people tend to design interfaces with checkboxes even if the behavior actually requires radio buttons, because people are more familiar with check marks?

This seems to be a case that pits web standards & usability vs. aesthetics & user experience, which is not a good place to be in.

Ever since the first edition of Inside Macintosh in 1984, the rule has been the same for when to use checkboxes versus radio buttons. All subsequent GUI standards and the official W3C Web standards have included the same definition of these two controls:

  1. Radio buttons are used when there is a list of two or more options that are mutually exclusive and the user must select exactly one choice. In other words, clicking a non-selected radio button will deselect whatever other button was previously selected in the list.
  2. Checkboxes are used when there are lists of options and the user may select any number of choices, including zero, one, or several. In other words, each checkbox is independent of all other checkboxes in the list, so checking one box doesn’t uncheck the others.
  3. A stand-alone checkbox is used for a single option that the user can turn on or off.

Sounds simple enough, right?

Yet I frequently encounter Web pages that use radio buttons and checkboxes wrong. Even after twenty years, it’s worth stating these guidelines once again.

Jakob Nielsen, Checkboxes vs. Radio Buttons

That was written in 2004.

I’m usually in this situation when design decisions are not up to me, and I have very little room to debate those choices. I don’t really mind spending more time on it, but if you work as closely to the “ground floor” of HTML, CSS, JS and sweat these details, it gets to you a bit.

Braun UI by Adrien Olczak

Braun UI by Adrien Olczak

I know that people probably understand a check mark better than concentric circles to signify an active state. Maybe it’s more necessary to show that, instead of the difference between multiple selection vs. single selection.

Or maybe some designers find the distinction between checkboxes and radios arbitrary, or prefer checkboxes aesthetically.

Or what if users aren’t as clueless after all, and have been familiar with web form controls for long enough?

Whether I find the answers to those things or not, I have to choose between:

  1. Using radios in markup, then injecting CSS/JS to make them look like checkboxes.
  2. Using checkboxes in markup, then injecting JavaScript to force radio behavior; or

#1 is more desirable because the markup is faithful to the intent (a single active state). It’s even possible to forego JavaScript and go POSH if you drop support for IE8.

But the fact that you have to do extra instead of let the browser do its thing and render an already available feature, or the fact that a designer prefers to erase the default appearance of browser interface elements rather than design around them, does make me wonder.

The control which designers know in the print medium, and often desire in the web medium, is simply a function of the limitation of the printed page. We should embrace the fact that the web doesn’t have the same constraints, and design for this flexibility. But first, we must “accept the ebb and flow of things.”

A Dao of Web Design, John Allsopp

At what point does the design of an interface reach “control freak” or “brute force hacking” levels, or how does one tell if it’s still “zen” enough?

Whose opinion holds more weight? Safe answer would probably be UX, but only if there’s supporting data. In which case, poor browser makers and their radio buttons—why design them that way in the first place? Is the convention no longer relevant?

Probably another reason people want to work on native mobile apps, perhaps.

My house has radio buttons by mikekrieger

My house has radio buttons by mikekrieger

Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> Anything in between < and > will be treated as HTML, so you might want to use character entities if you have to display literal markup.

*