How many button states does an interface need?
Button states explain availability, progress and results. Design pointer feedback, focus, pending actions and persistent selection as distinct concerns.
Separate interaction feedback from task state
Default, hover, pressed and disabled describe interaction feedback. Pending and selected describe a task or a value. Treating all of them as one flat list can hide combinations such as a focused button while a request is pending.
Touch may provide no hover feedback; keyboard users need a visible focus location. Check each input method and the state combinations supported by the component.
The W3C button pattern explains keyboard behavior, accessible names and toggle state. Prefer native buttons for actions on the web, and links for navigation.
Handle waiting and duplicate actions together
Without feedback after Save, people may press it again. Show progress and decide whether the same action can be invoked while pending. Check that a changing label does not shift nearby controls.
Preventing repeated clicks is only one layer. Refreshes and retries can still produce duplicate requests, so operations that must not repeat need a corresponding server rule.
Completion should expose a result or a useful failure. Decide whether inputs remain available and whether the user can retry immediately or needs to check the previous result first. That decision determines when re-enabling the control is appropriate.
Explain persistent selection and unavailability
Filters and toggles retain a selected value after activation. Distinguish that value from a transient pressed effect, and decide whether it persists after leaving the screen or combines with other selections.
Explain unavailable actions near the control. Missing input, insufficient permission and an operation already in progress each suggest a different next step. A hover-only explanation is difficult to discover through touch or keyboard interaction.
Use text, an icon or another clear state cue alongside color. An unavailable button should still help the user understand what needs to happen before the action becomes possible.
Test transitions, not only static appearances
Static examples are useful, but also exercise transitions: submit and succeed, fail and retry, or leave the screen while a request is pending.
- Reach and activate the button using a keyboard.
- Check where focus remains during and after the operation.
- Make success and failure understandable without color alone.
- Try long translations in a narrow layout.
Review visual states in the shared component and request-to-result behavior in the screen flow. Before adding a state, explain the information it gives the user and which decision that information supports.
Другие статьи
Все статьи-
운영 기능을 권한으로 나눌 때 먼저 정할 것
운영 화면을 함께 쓰더라도 데이터 접근은 분명하게 나눠야 합니다. 역할, 작업, 데이터 범위, 승인과 기록을 기준으로 권한을 설계하고 서버에서 검증하는 방법입니다.
-
Define permissions before combining admin workflows
A shared interface still needs explicit authorization. Define roles, actions, data scope and audit requirements, then enforce them on the server.
-
AI가 만든 기능을 검증하는 코코드의 방법
코드가 완성된 뒤에는 약속한 동작이 실제로 이어지는지 확인해야 합니다. 코코드는 단위 테스트로 개별 규칙을, BDD 통합테스트로 사용자 흐름을 검증하고, 변경 후에도 다시 확인할 수 있는 기준을 남깁니다.
О том, как мы работаем, и об условиях можно прочитать на странице вакансий.
Все вакансии