Practical guides

Choose interface links, buttons and actions

A link reaches a destination; a button triggers an action. This distinction helps people anticipate outcomes, use the keyboard and retain browser functions. Shape or colour does not replace the control’s role.

Go to the method

Laptop, phone and open notebook on a white table
Illustration

Describe the outcome in the label

The W3C link and button patterns distinguish destination and action. “View prices” can open a page; “Send enquiry” submits a form. Retain that distinction even when controls look alike.

Use a verb and object where they clarify consequences. Repeated “Learn more” links need identifiable context. Deletion or payment should name what is affected. An icon-only control needs an accessible name consistent with its visible purpose.

Choose waiting and unavailable states

Inside a form, the HTML button element needs an appropriate type: a secondary action should not accidentally submit. Native disabled prevents activation; aria-disabled announces a state but does not block the action itself.

Explain why an important action is unavailable and how to enable it. An unexplained disabled control can leave people searching for an invisible error. During submission, keep a clear waiting state and recovery from failure; do not remove all explanation when activation is blocked.

Prevent repeated operations at the right layer

Blocking a button after a click can reduce repeated activation, but does not protect against another request or browser history. The service needs repetition handling appropriate to the consequence. Use test data and inspect the recorded outcome.

Specify what cancellation cancels: a local edit, pending request or accepted operation. If saving finishes despite closing the window, its outcome must remain findable. Avoid labels implying a guarantee the system cannot deliver.

Example: an enquiry with an attachment

Educational example: Add document opens file selection without submitting; Send enquiry performs submission. After an error, the button becomes usable and fields remain. A second test repeats a test request and checks that one receipt does not mask two created cases.

Content updated on October 7, 2026

Acceptance matrix to adapt to your project

These proposed checks use synthetic cases. Decide the required behaviour with the team, record the result and assign unresolved gaps before release.

Scroll the table horizontally to read every column. With a keyboard, focus the table area and use the arrow keys.

Test cases, expected outcomes and useful evidence
CaseExpected outcomeEvidence to retain
Page linkAddress and browser functions remain usableDestination and new-tab opening
Secondary actionNo accidental submission occursAction and request count
Unavailable controlCause and next step are understandableExplanation and availability condition
Repeated test requestThe service follows the expected ruleRecorded result and confirmation

Frequently asked questions

Can a link look like a button?

Yes, when it remains a link with a real destination. Appearance can express priority without changing the action’s nature.

Does disabling prevent all duplicate requests?

No. Requests can be repeated another way. Consequential operations need service-side handling and checks with test data.

Why specify a form button’s type?

It distinguishes an interface action from submission. An add or open command should not send the fields accidentally.