Back to compare picker

Spinbutton / numeric stepper vs Slider vs Text input vs Select

Use a spinbutton for a small incrementable numeric value where users may click or press keys by one step; use a slider for relative position, text input for exact arbitrary entry, and select for named finite choices.

Learn the decision

Match the interaction to the person's task

Use a spinbutton for a small incrementable numeric value where users may click or press keys by one step; use a slider for relative position, text input for exact arbitrary entry, and select for named finite choices.

Spinbutton / numeric stepper

Use it when: Users adjust a small bounded count such as guests, copies, items, seats, nights, minutes, retries, or quantity.

Make this state clear: Initial state with visible label, default value, unit, min, max, and step.

Observe the result: A user enters -3 for guests, the value is repaired to 0, and the interface explains the lower bound before submit.

Study the full pattern →

Slider

Use it when: Users adjust one bounded value such as brightness, volume, opacity, zoom, intensity, cost tolerance, or preference strength.

Make this state clear: Initial value state with visible label, min, max, current value, and unit.

Observe the result: A user adjusts brightness with arrow keys, types 65 in the number field, sees both controls synchronize, and gets a warning near battery-heavy values.

Study the full pattern →

Text input

Use it when: The answer is short and user-authored.

Make this state clear: Empty untouched state with persistent label and optional hint.

Observe the result: A user leaves the required field blank, sees an error only after submit, returns to the same field, and their later typed value clears the error.

Study the full pattern →

Select

Use it when: The user chooses one option from a moderate known list.

Make this state clear: Closed state with empty option or current selected value.

Observe the result: Users can open, scan, choose one value, and review the selected value after close.

Study the full pattern →

Practice the judgment: Imagine this situation: A customer ID is rendered with plus and minus buttons, so keyboard arrows can change the identifier. Write the person's goal, choose one of these patterns, and show the state that helps the person continue. Use the decision rules and source trail below to explain your choice.

Review the underlying principle →

Decision dimensions

Dimension Spinbutton / numeric stepperSliderText inputSelect
UI or UX UI + UX - Bounded incrementable numeric-value controlUI + UX - Single-value bounded range controlUI + UX - Single-line freeform data-entry controlUI + UX - Single-choice dropdown control
UI guidance Render a visible label, editable numeric value, unit, lower and upper bounds, plus and minus controls, focus state, and warning, error, disabled, and read-only states.Render one thumb on a track with a persistent label, visible current value, unit, min and max labels, focus state, and disabled or read-only state.Render a persistent label, appropriately sized single-line input, optional hint, visible focus state, and nearby error text that is programmatically associated with the field.Render a persistent label, hint text, native closed value, finite option list, selected option, and validation state.
UX guidance Use a spinbutton when users adjust a small count or bounded quantity by one or a few steps and still may need to type the exact number.Help users adjust one bounded value quickly when the relative position or intensity matters.Let users edit normally, validate after interaction or attempted submit, preserve their typed value after errors, and explain exactly how to fix invalid or missing text.Help the person reach a clear task outcome.
Good UI A Guests control shows label, value 2, minus and plus buttons, range 0 to 9, and a clear unit beside the field.A Brightness slider shows 55%, dim and bright endpoint labels, visible focus, and a paired number input.A reference-name field has a visible label, hint, medium width, focus ring, and error message beneath the hint when submitted empty.Persistent label, hint text, visible selected value, readable options, and clear required validation state.
Bad UI An account ID field has plus and minus buttons, implying the identifier can be stepped.A two-stop slider is styled like a switch but lacks on/off semantics.The only instruction is placeholder text that disappears when the user starts typing.Placeholder as the only label.
Good UX A user enters -3 for guests, the value is repaired to 0, and the interface explains the lower bound before submit.A user adjusts brightness with arrow keys, types 65 in the number field, sees both controls synchronize, and gets a warning near battery-heavy values.A user leaves the required field blank, sees an error only after submit, returns to the same field, and their later typed value clears the error.Users can open, scan, choose one value, and review the selected value after close.
Bad UX A user scrolls a page while an account number field is focused and accidentally changes the stored account ID.A user is asked to choose Small, Medium, or Large through a numeric rail with hidden labels.Validation fires on the first focus event and blocks typing before the user has had a chance to answer.Hiding two obvious critical choices in a dropdown.
Best fit Users adjust a small bounded count such as guests, copies, items, seats, nights, minutes, retries, or quantity.Users adjust one bounded value such as brightness, volume, opacity, zoom, intensity, cost tolerance, or preference strength.The answer is short and user-authored.The user chooses one option from a moderate known list.
Avoid when The value is a numeric-looking identifier, code, account number, card number, phone number, postal code, date, or formatted string.Users need to enter an exact, arbitrary, or high-stakes number.The answer is a paragraph, comment, address block, or explanation requiring multiple lines.The option set is short and comparison matters.
Required state Initial state with visible label, default value, unit, min, max, and step.Initial value state with visible label, min, max, current value, and unit.Empty untouched state with persistent label and optional hint.Closed state with empty option or current selected value.
Accessibility burden Expose the editable value as a spinbutton or native number input with a visible label.Prefer native range input where possible.Associate every text input with a visible label or equivalent accessible name that matches the visible question.Prefer native semantics or implement equivalent name, role, state, and keyboard behavior.
Common misuse Using a spinbutton for numeric-looking identifiers or codes.Using a slider for a binary on/off choice.Using placeholder text as the only label or instruction.Using select to hide two or three obvious choices that should be compared.

Spinbutton / numeric stepper

UI or UX
UI + UX - Bounded incrementable numeric-value control
UI guidance
Render a visible label, editable numeric value, unit, lower and upper bounds, plus and minus controls, focus state, and warning, error, disabled, and read-only states.
UX guidance
Use a spinbutton when users adjust a small count or bounded quantity by one or a few steps and still may need to type the exact number.
Good UI
A Guests control shows label, value 2, minus and plus buttons, range 0 to 9, and a clear unit beside the field.
Bad UI
An account ID field has plus and minus buttons, implying the identifier can be stepped.
Good UX
A user enters -3 for guests, the value is repaired to 0, and the interface explains the lower bound before submit.
Bad UX
A user scrolls a page while an account number field is focused and accidentally changes the stored account ID.
Best fit
Users adjust a small bounded count such as guests, copies, items, seats, nights, minutes, retries, or quantity.
Avoid when
The value is a numeric-looking identifier, code, account number, card number, phone number, postal code, date, or formatted string.
Required state
Initial state with visible label, default value, unit, min, max, and step.
Accessibility burden
Expose the editable value as a spinbutton or native number input with a visible label.
Common misuse
Using a spinbutton for numeric-looking identifiers or codes.

Slider

UI or UX
UI + UX - Single-value bounded range control
UI guidance
Render one thumb on a track with a persistent label, visible current value, unit, min and max labels, focus state, and disabled or read-only state.
UX guidance
Help users adjust one bounded value quickly when the relative position or intensity matters.
Good UI
A Brightness slider shows 55%, dim and bright endpoint labels, visible focus, and a paired number input.
Bad UI
A two-stop slider is styled like a switch but lacks on/off semantics.
Good UX
A user adjusts brightness with arrow keys, types 65 in the number field, sees both controls synchronize, and gets a warning near battery-heavy values.
Bad UX
A user is asked to choose Small, Medium, or Large through a numeric rail with hidden labels.
Best fit
Users adjust one bounded value such as brightness, volume, opacity, zoom, intensity, cost tolerance, or preference strength.
Avoid when
Users need to enter an exact, arbitrary, or high-stakes number.
Required state
Initial value state with visible label, min, max, current value, and unit.
Accessibility burden
Prefer native range input where possible.
Common misuse
Using a slider for a binary on/off choice.

Text input

UI or UX
UI + UX - Single-line freeform data-entry control
UI guidance
Render a persistent label, appropriately sized single-line input, optional hint, visible focus state, and nearby error text that is programmatically associated with the field.
UX guidance
Let users edit normally, validate after interaction or attempted submit, preserve their typed value after errors, and explain exactly how to fix invalid or missing text.
Good UI
A reference-name field has a visible label, hint, medium width, focus ring, and error message beneath the hint when submitted empty.
Bad UI
The only instruction is placeholder text that disappears when the user starts typing.
Good UX
A user leaves the required field blank, sees an error only after submit, returns to the same field, and their later typed value clears the error.
Bad UX
Validation fires on the first focus event and blocks typing before the user has had a chance to answer.
Best fit
The answer is short and user-authored.
Avoid when
The answer is a paragraph, comment, address block, or explanation requiring multiple lines.
Required state
Empty untouched state with persistent label and optional hint.
Accessibility burden
Associate every text input with a visible label or equivalent accessible name that matches the visible question.
Common misuse
Using placeholder text as the only label or instruction.

Select

UI or UX
UI + UX - Single-choice dropdown control
UI guidance
Render a persistent label, hint text, native closed value, finite option list, selected option, and validation state.
UX guidance
Help the person reach a clear task outcome.
Good UI
Persistent label, hint text, visible selected value, readable options, and clear required validation state.
Bad UI
Placeholder as the only label.
Good UX
Users can open, scan, choose one value, and review the selected value after close.
Bad UX
Hiding two obvious critical choices in a dropdown.
Best fit
The user chooses one option from a moderate known list.
Avoid when
The option set is short and comparison matters.
Required state
Closed state with empty option or current selected value.
Accessibility burden
Prefer native semantics or implement equivalent name, role, state, and keyboard behavior.
Common misuse
Using select to hide two or three obvious choices that should be compared.
Decision rules
  • Prefer a spinbutton when the value is truly incrementable, bounded, and likely to change by a few steps, such as guests, copies, seats, nights, items, minutes, or retry count.
  • Prefer a slider when users adjust one value across a wider range by spatial position or subjective intensity rather than repeated small clicks.
  • Prefer text input when users need to type an exact arbitrary value, paste a value, enter decimals or currency, use a very large range, or provide a number that is really an identifier.
  • Prefer select when valid values are named options or a short fixed list where users benefit from seeing labels before choosing.
  • Do not use a spinbutton for account numbers, payment card numbers, verification codes, ZIP or postal codes, phone numbers, dates, or other numeric-looking strings that should not increment.
  • Keep a direct editable value field available unless the surrounding platform convention makes button-only stepping clearly sufficient.
  • Declare min, max, step, unit, default, empty state, disabled state, read-only state, and repair or validation feedback near the control.
  • Use arrow keys for one-step movement and Home, End, Page Up, and Page Down only when the range and larger-step behavior are clear.
  • Disable the decrement button at the lower bound and the increment button at the upper bound, but keep the reason visible when the whole field is unavailable.
  • When the value is high-stakes or expensive to change, confirm through review or clear submit behavior instead of silently committing each click.
Inspect live examples
Failure modes
  • A customer ID is rendered with plus and minus buttons, so keyboard arrows can change the identifier.
  • A quantity from 1 to 500 requires hundreds of clicks because no direct typing or larger-step path exists.
  • The current number has no unit or label, so users cannot tell whether they are changing rooms, guests, nights, or items.
  • The field accepts decimals while the buttons move by whole units and the submitted value is rounded without warning.
  • A sold-out value is disabled without an explanation or read-only review path.
  • The plus and minus buttons are focusable but have names like plus and minus instead of the affected quantity.

Saved items