| UI or UX | UI + UX - Bounded incrementable numeric-value control | UI + UX - Single-value bounded range control | UI + UX - Single-line freeform data-entry control | UI + 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. | Use text input for short freeform answers that users can type or paste and that cannot be accurately represented as a fixed option choice. | Help users choose one value from a moderate known list without showing every option permanently. |
| 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. | An unlabeled rail has no visible value, min, max, or unit. | The only instruction is placeholder text that disappears when the user starts typing. | Placeholder as the only label. |
| Good UX | A user adds one guest, types 7, clears the required field, then sees a specific error and restores a valid count without losing context. | 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 types or pastes a short reference, submits it, and the interface confirms the stored value without changing their wording. | Users can open, scan, choose one value, and review the selected value after close. |
| Bad UX | A user tries to set 480 items with one-step buttons and cannot type or jump by larger increments. | A user tries to enter $812.37 with a huge slider and cannot land on the exact cents. | 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. | Custom select with no keyboard support or hidden selected state. |