Forms are where people give up and leave. And picking the wrong control — a checkbox where you meant a switch — changes what the feature actually does.
26 terms26 live demos
The control you pick decides the behaviour
A checkbox does nothing until a save button is pressed; a switch takes effect the moment it is flipped. A native select cannot be restyled much, while a combobox has to be built from scratch. Choosing the control is choosing the estimate → Deep dive: which input control should you use
01
Form
폼 · 입력 양식
When this comes up
"Build me a sign-up form" — referring to the whole screen that collects input.
The whole set of inputs that gets submitted. Sign-up, log-in, checkout and contact are all forms.
See it Try clicking
Easy to get wrong
In a form, the number of fields is the drop-off rate. Asking now for things you could ask later costs you sign-ups. Sort required from optional during planning.
Using it on the job
If you cannot cut fields, split them into steps. Three steps of three beats ten on one screen for completion rate.
Ask for it like this
Build a sign-up form. Require only email and password, and collect everything else after sign-up. Mark required fields with * and label optional ones "(optional)".
"Put an input here" — the most basic request there is.
A field for a single line of text. The most basic form element.
See it Try clicking
Easy to get wrong
The width of a field is itself a hint. A postcode field as long as a name field confuses people. Size the width to the length of what you are collecting.
Ask for it like this
Size input widths to the content — postcode short (90px), name medium (160px), address full width. Match the mobile keyboard type too (numeric keyboard for numeric fields).
"Let people write several lines in the enquiry box"
A field for multiple lines. Used for enquiries, long descriptions and reviews.
See it Try clicking
0 / 200 characters
Easy to get wrong
If there is a character limit, the remaining count has to be visible while typing. Finding out you are over 500 characters only after pressing submit is the worst possible version.
Ask for it like this
Make the enquiry field a textarea capped at 500 characters. Show the remaining count live while typing, and allow resizing vertically only.
When an accessibility review comes back with "the label is not associated".
The name tag telling you what a field collects. Usually placed above the field.
See it Try clicking
Easy to get wrong
Clicking the label should put the cursor in the field (a for association in code). Without it, small targets like checkboxes become very hard to hit. Put it on the review checklist.
Ask for it like this
Give every input a label and associate it with the <code>for</code> attribute. Clicking the label text should focus or toggle the matching field.
"Drop the label and just put faint text inside" — a request you should push back on.
Faint example text inside a field. It disappears the moment typing starts.
See it Try clicking
✗ Bad — placeholder only, no label
Once it is filled in, there is no telling whether this is a date of birth or a sign-up date.
✓ Good — label plus placeholder
You can always tell what was entered.
Easy to get wrong
Never use a placeholder instead of a label. It vanishes as soon as someone types, leaving "wait, what was I filling in?". The faint grey also fails contrast. Label outside, placeholder for examples only.
Ask for it like this
Do not use placeholders in place of labels. Keep the label visible above the field at all times, and put only a format example in the placeholder (e.g. 010-1234-5678).
"Tell people the password rules up front" — guidance before the error.
A short note attached below a field, stating the format or the rule in advance.
See it Try clicking
At least 8 characters, including letters and numbers
Easy to get wrong
Telling someone "at least 8 characters, must include a number" after the error is too late. The whole point of helper text is showing it before they type.
Ask for it like this
Show the password rules as helper text below the field ("8+ characters, letters and numbers"). When validation fails, replace it in place with a red error message.
"Make the region picker a dropdown" — referring to a control that picks a value.
A form element for choosing one item from a fixed list. The list only appears when pressed.
See it Try clicking
Try it. The browser and the operating system decide how the list looks — the designer cannot.
Easy to get wrong
A native select can barely be styled. Draw a custom design in the mockup, then say "just use a select", and the developer has to build it from scratch — that is separate effort. With five or fewer options, radio buttons are often better.
Using it on the job
A native select brings up the OS picker on mobile, which is frequently better to use. Unless the design genuinely demands otherwise, use the native one.
Ask for it like this
Use the native browser select for region. No custom styling needed — the OS picker on mobile is actually preferable here.
"The list is too long to find anything in" — when there are dozens of options.
Combines free typing with list selection. Typing narrows the candidates.
See it Try clicking
Try typing "ka". The options narrow down.
Easy to get wrong
Different from a select. Once there are dozens of options — banks, countries — a select is painful and a combobox is right. It is considerably harder to build than a select.
Ask for it like this
The bank list has more than 20 entries, so build it as a combobox (searchable select). Typing narrows the options, and up/down arrows plus Enter must work.
Firing a request on every keystroke hammers the server, so ask for debouncing (request only after a brief pause) at the same time. Leave it out and you get code that calls the server on every character.
Ask for it like this
Add autocomplete to the search box. After 2+ characters, debounce 0.3s and show up to 5 results; show "No results" when there are none.
"Add a checkbox for the terms" — when several things submit together.
A square box that lets you select several things at once.
See it Try clicking
Interests (choose any)
Easy to get wrong
A checkbox usually takes effect only when [Save] is pressed. If it should apply immediately, you want a switch. Skip this decision and you get support tickets saying "I ticked it but it did not save".
Ask for it like this
Make the terms agreement a checkbox, submitted together when [Sign up] is pressed. Add an "Agree to all" checkbox that toggles the individual items with it.
A round button for choosing exactly one of several options. Named after the channel buttons on old radios.
See it Try clicking
Payment method (one only)
Easy to get wrong
By convention, once selected you cannot return to nothing selected. If clearing must be possible, add a "None" option or use a select. Pre-selecting a sensible default reduces drop-off.
Ask for it like this
Make payment method radio buttons with the first option pre-selected. There are only four options, so show them all rather than collapsing into a select.
"Let people turn notifications on and off" — when it must apply immediately.
A control that flips between on and off. The same idea as a light switch.
See it Try clicking
It saves to the server the moment the switch flips. There is no separate [Save] button.
Easy to get wrong
A switch applies immediately; a checkbox applies on save — that is the difference that matters. Notification settings that take effect at once are a switch; terms agreement submitted with the form is a checkbox. This comes up in QA constantly.
Using it on the job
Decide what happens when saving to the server fails after a flip. The usual answer is to revert the switch and show the error.
Ask for it like this
Make notification settings switches that save the moment they change. No save button. If saving fails, revert the switch and show an error message.
A control for picking one option from a joined group of buttons. Think of it as radio buttons in a different shape.
See it Try clicking
Period
Easy to get wrong
Easily confused with tabs because they look alike, but tabs switch content while a segmented control picks a value. Two to four items suits it; long labels get clipped.
Ask for it like this
Build the period picker as a segmented control — Daily / Weekly / Monthly. It picks a value rather than switching views; selecting one changes only the chart data below.
"Add a slider" — more likely than not they mean a carousel. Always check.
A control for setting a value by dragging a handle. Used for volume, brightness and price ranges.
See it Try clicking
Font size — 16px
The size of this sentence changes.
Easy to get wrong
In Korean practice, "slider" far more often means a carousel — the banner that slides left and right. "Add a main slider" is almost certainly about a banner carousel. Always confirm.
Ask for it like this
By "slider", do you mean a bar for setting a value, or a main banner that slides left and right? If it is the latter, "carousel" is the accurate word.
A slider with two handles, for setting a minimum-to-maximum range. Price filters are the classic case.
See it Try clicking
Price range
~
The built-in one has a single handle. Two handles need a custom implementation.
Easy to get wrong
Native HTML gives you only one handle, so a two-handle version has to be built or pulled from a library. It looks simple but it costs real effort.
Ask for it like this
Build the price filter as a range slider with two handles. Native HTML only provides one, so this needs a custom implementation. Allow typing the numbers directly as well.
A − 1 + control for nudging a quantity up and down.
See it Try clicking
QuantityTotal: 1
Easy to get wrong
The name collides with the step indicator. If "stepper" comes up in a meeting, check which one. And typing must also work — nobody should press a button 50 times to order 50.
Ask for it like this
Add a quantity stepper (− number +) to the cart. Minimum 1, maximum the available stock, and allow typing the number directly. Bring up the numeric keyboard on mobile.
A UI for choosing a date from a calendar. Anything that picks from a fixed set of values — dates, times, colours — is collectively a picker.
See it Try clicking
August 2026
SMTWTFS262728293031123456789101112131415
Above is the browser default; below is a custom calendar.
Easy to get wrong
Choosing a span is separately called a range picker. The browser's built-in calendar cannot be styled and looks different in every browser — matching the mockup means building your own.
Ask for it like this
Collect the visit date with a date picker. Block dates before today and allow typing the date directly. If it has to match the mockup, this needs a custom calendar rather than the browser default.
An area for uploading files by selecting them or dragging them in.
See it Try clicking
Drag a file here, or click to choose one JPG, PNG, PDF · 10MB max
Try pressing it. This imitates the highlighted state when a file is dragged over.
Easy to get wrong
The spec must state allowed file types, maximum size, and whether multiple files are allowed. Leave it out and the developer picks, and later you get "files over 10MB will not upload".
Ask for it like this
Add a file uploader. JPG, PNG and PDF only, up to 10MB each, maximum 5 files. Support both drag-and-drop and click-to-select, with upload progress and a remove button.
A small pill-shaped interactive element. It can be selected or removed. Filter chips and input chips are common kinds.
See it Try clicking
Filters
You can press to toggle them on and off — that is what makes it a chip.
Easy to get wrong
Chips can be pressed; tags usually cannot. That is the difference. Filters as chips make the current selection visible at a glance.
Ask for it like this
Build the filters as chips. Pressing one toggles it on and off, with selected chips distinguished by colour. Add a "Clear" button that removes all selections at once.
A label marking how content is classified. Its main purpose is display.
See it Try clicking
New summer dress 2026
#summer#dress#newin
Easy to get wrong
Similar in appearance to a chip, but a tag is usually not a click target. If clicking should open a list for that tag, write that behaviour into the spec.
Ask for it like this
Show tags on the product. These are display-only, not clickable. (If clicking should open the list for that tag, tell me and I will add it.)
"Check whether the input is valid" — you need to decide when to check.
Checking whether input meets the rules — email format, password length, required fields and so on.
See it Try clicking
✓ That format is valid
Please enter at least 8 characters (currently 3)
Easy to get wrong
You have to decide when it runs: ① while typing ② when leaving the field ③ on submit. Red errors appearing mid-typing are irritating, so ② (on blur) is usually the safe default.
Ask for it like this
Run form validation when focus leaves a field (blur). Do not show errors while typing, and once a field has errored, re-check it as soon as it is edited.
"Insert the hyphens in the phone number automatically"
Formatting input automatically as it is typed. Type digits only and the hyphens appear on their own: 010-1234-5678.
See it Try clicking
You only type 01012345678, 1250000 and the screen tidies up the rest.
Easy to get wrong
Rather than telling people "enter it without hyphens", a good form tidies up whatever they type. Apply it to phone numbers, card numbers, registration numbers and amounts.
Ask for it like this
Add input masking to the phone number, registration number and amount fields. Hyphens and commas appear automatically as digits are typed, while only digits are sent to the server.
"What is the CTA for this section?" — a question that comes up constantly in client meetings.
The one button you most want people to press. "Start for free", "Buy now", "Book a consultation".
See it Try clicking
✗ Weak label
No idea what pressing it does
✓ Strong label
The outcome is clear and the commitment is low
Easy to get wrong
Very common in client conversations. "What is the CTA for this section?" means "what do you actually want people to do on this screen?". Labels that state the action convert better than "OK".
Ask for it like this
Change the CTA labels from "OK" to something that states the action — "Start for free", "Book a consultation". Keep one main CTA per screen and style the rest as secondary.
"All the buttons look the same" — when setting hierarchy.
A button hierarchy that visually separates the main action from supporting ones. Primary is usually filled, secondary outlined.
See it Try clicking
From the left: primary → secondary → text button → danger button.
Easy to get wrong
As a rule, one primary per screen. Make everything solid because everything is important and nothing is. Destructive actions such as delete get red on their own.
Ask for it like this
Please sort out the button hierarchy — one primary (filled) per screen, everything else secondary (outlined) or text, and destructive actions like delete in red.
The family of buttons without a filled background. Outline has only a border; ghost and text have only the label.
See it Try clicking
Easy to get wrong
Names differ by company. Material says Outlined/Text; some teams say Ghost/Tertiary. There is no right answer — what matters is picking one set and using it consistently within the project.
Ask for it like this
Standardise the button style names across the project — Filled / Outline / Text — and write them into the design system documentation.
A button with only an icon and no text. Used to save space.
See it Try clicking
← each button carries an invisible name
Easy to get wrong
An icon alone often fails to convey meaning. Go text-free only for widely understood icons (X, search, cart) and label the rest. And even when nothing is visible, a screen-reader name is mandatory.
Ask for it like this
Give every icon button a screen-reader name (aria-label). Also ensure the touch target is at least 44×44px regardless of the icon size.