Are you choosing a button style because it looks right, or because it is the right control for the job?
That gap causes a lot of interface problems. Teams spend hours refining color, corner radius, and hover polish, then ship flows where the wrong action dominates, destructive actions look harmless, or icon-only controls force users to guess. A button is never just a shape with a label. It signals priority, risk, commitment, and next step.
The history of buttons makes that clearer than most design systems do. The oldest known button dates back about 5000 years to around 3000 BC in the Mohenjo-daro region of the Indus Valley, and early buttons were often ornamental before they became practical fasteners, as described in this history of buttons. Digital buttons inherited that same dual role. They still carry meaning, status, and instruction before anyone taps them.
That is why a generic list of different types of buttons is not enough anymore. Designers and developers need a working framework for deciding when to use each one, how to label it, what states it needs, and where it fails in production. On web and mobile projects, most button bugs are not visual bugs. They are hierarchy bugs, accessibility bugs, and behavior bugs.
The ten button types below show up in almost every modern product. The practical difference is not whether you know their names. It is whether you know when to use them, when not to use them, and how to make them obvious under real conditions like keyboard navigation, loading delays, long translations, touch input, and cramped mobile layouts.
1. Primary Action Button
If a screen has one action users should notice first, this is it.
The primary action button carries the main intent of the page. In a checkout, that might be “Place Order.” In a SaaS signup flow, it might be “Start Free Trial.” In a form, it is usually the final committed step, not every possible next move. If two buttons look equally important, the screen usually has a hierarchy problem.
A strong primary button earns its prominence. It should use the highest-contrast treatment in the local layout, enough size to feel tappable, and a label that describes the outcome. “Continue” is often too vague. “Review Order” or “Create Account” is better because it tells users what happens next.
What works in practice
The best primary buttons are visually louder than nearby controls, but not louder than the entire page. Stripe, Airbnb, LinkedIn, and Figma all use this pattern well in their main acquisition and task flows because the visual signal and the action label align.
A few rules hold up across products:
- Keep one per zone: One page can have several important actions across sections, but each immediate decision area should usually have one dominant button.
- Use action language: “Buy now,” “Save changes,” and “Book stay” outperform generic labels because they reduce interpretation.
- Design the states early: Hover, pressed, focused, disabled, and loading states matter as much as the default look.
If you need a solid baseline for those states and hierarchy decisions, UI design best practices are a useful reference point.
A primary button should answer one question instantly: “What does this product want me to do next?”
Common mistakes
The most common failure is overpromotion. Teams turn “Learn more,” “Skip,” “Maybe later,” and “Start now” into equally bold controls. That does not create freedom. It creates friction.
Another mistake is using a primary button for a low-confidence or reversible action while the committed action gets weaker styling. Users then hesitate at exactly the point where the interface should feel most certain.
For microcopy, short wins. Two to four words is usually enough. If the label gets long, the workflow may need to be simplified instead of the button widened.
2. Secondary Action Button
Secondary buttons are where mature interfaces show restraint.
Not every action deserves the same visual weight. Users often need an alternate path like “Cancel,” “Back,” “Save draft,” or “Learn more.” Those actions should be available without competing directly with the main conversion or task-completion path.
A secondary action button works best when it stays close to the primary action but clearly sits one level below it. Outline styles, lighter fills, or reduced emphasis can all work. What matters is that users can spot the alternative quickly without mistaking it for the main choice.
Where teams get this wrong
The failure pattern is familiar. A modal has “Delete” and “Cancel,” but “Cancel” is so faint that users pause to hunt for it. Or a form has “Submit” and “Save Draft,” but both are equally prominent, so people choose slowly because the system is not helping them prioritize.
Secondary buttons should support intent, not dilute it.
A reliable layout approach:
- Keep proximity tight: Pair secondary and primary actions near each other so users see the decision set as one unit.
- Maintain contrast: Lower emphasis does not mean low legibility.
- Match the consequence: “Cancel” should be easy to find. “Duplicate” can be quieter.
Practical ordering rules
Button order should reflect risk and expected behavior, especially in dialogs and forms. The exact sequence may differ by platform convention, but consistency inside your product matters more than personal preference.
On forms, “Save draft” often works best as a secondary button because it preserves work without forcing a commitment. On marketing pages, “View demo” or “Talk to sales” may deserve secondary treatment when “Start free” is the obvious main path.
One more caution: ghost-style secondary buttons can disappear on busy backgrounds. If the layout is visually noisy, use a clearer outlined or toned container so the secondary option remains visible and accessible.
3. Danger Destructive Action Button
A destructive button should create a moment of pause.
Deleting a file, terminating an environment, removing a team member, closing an account, or confirming a high-stakes payment are not ordinary actions. They need a distinct treatment that signals risk before the click, not after it.
Red is common for destructive buttons, but color alone is not enough. Pair the visual warning with precise microcopy. “Delete” is weaker than “Delete repository.” “Remove” is weaker than “Remove teammate from workspace.” Clear labels reduce accidental confirmation.
Friction is useful here
Many teams are taught to remove friction. For destructive flows, that advice can backfire.
Good destructive design often adds intentional friction:
- Require confirmation: Use a confirm step for irreversible actions.
- Ask for typed input when stakes are high: Re-entering a project name or account identifier can prevent expensive mistakes.
- Offer undo when technically possible: Undo is often better than a dramatic warning modal.
GitHub, Slack, AWS, and Facebook all use forms of this pattern because the consequence justifies the extra step.
If an action can cause loss, the UI should slow the user down before the system does.
Accessibility and implementation notes
Do not rely on red alone. Add an icon, strong wording, and explicit state changes so the signal survives color-vision differences and dim screens. Keyboard focus styles also matter. In confirmation dialogs, destructive actions often sit near cancel actions, and ambiguity there is costly.
Progressive disclosure helps too. Do not put destructive buttons at the same visual level as everyday controls if the action is rare. Keep “Delete project” inside settings, not beside “Save.”
A final trade-off: if every mildly risky action gets destructive styling, users stop reading the warning. Reserve this treatment for actions with real consequence. Otherwise the pattern loses credibility.
4. Floating Action Button
A floating action button is powerful and easy to misuse.
The FAB works when an app has one recurring, high-value action that users may need from many places. Compose in Gmail is the classic example. Create note, start message, add item, or begin route can also fit. The key is consistency. A FAB should represent the same core action wherever it appears.

On mobile, a FAB earns its keep because it stays available without consuming toolbar space. It also performs well for thumb reach when placed correctly for the interface direction and device ergonomics.
When a FAB helps and when it hurts
Use a FAB when the primary action is frequent, global, and creation-oriented. Gmail’s “Compose” works because users understand the action regardless of which inbox view they are on. Notion or Slack can use a FAB effectively for adding content or starting communication.
Skip the FAB when the primary action changes by screen, when the action is not clearly represented by one icon, or when it competes with bottom navigation and overlays. In those cases, a persistent floating button starts to feel like UI noise.
The reason this pattern succeeds or fails often comes down to affordances in UI design. A circular floating control suggests immediacy and availability, but only if users can infer what it will do without hesitation.
Practical details that matter
A FAB should have a comfortable touch target and enough separation from screen edges and system gestures. The icon should be obvious. A plus sign is fine for add/create flows. More specific icons can work if the action is equally universal.
Be careful with speed-dial FABs that expand into multiple choices. They look efficient in prototypes but often introduce discovery and motor-control issues in real use. If users need more than one option often, a dedicated screen or bottom sheet is usually clearer.
For mobile polish, subtle haptics and clear pressed states help. For accessibility, ensure the control has a meaningful label for assistive tech. “Button” is useless. “Compose message” is not.
5. Icon Button
Icon buttons save space, but they spend user certainty.
That trade-off is worth it in dense toolbars, compact headers, media players, and mobile navigation. It is not worth it when the icon is ambiguous, uncommon, or dependent on product-specific learning.
Search, close, menu, back, and settings usually translate well as icons. Archive, filter variants, share options, or custom workspace actions often need reinforcement through labels, tooltips, or surrounding context.

A good icon button is still a real button
Teams sometimes obsess over the glyph and forget the interaction target. The symbol might look crisp, but if the tappable area is tiny, users miss it. The icon itself can stay visually small while the hit area stays generous.
Desktop and mobile need different support:
- On desktop: Add tooltips for non-obvious actions.
- On mobile: Prefer icon-plus-label when space permits.
- Across both: Keep icon style consistent. Do not mix unrelated stroke weights and metaphors.
The ambiguity problem
Some icon buttons fail because they ask users to decode intent without enough context. A heart may mean like, save, or favorite depending on the product. A bookmark may save content, but users may expect a collection flow, not an immediate state change.
This gets even harder in compact interfaces with adjacent icon-only controls. If users cannot tell which button is active, focused, or toggled, the interface becomes guesswork. The problem is especially visible in TV, keyboard, and remote-driven interfaces where focus clarity matters more than pointer hover.
A good rule is simple. If a first-time user cannot predict the result of tapping the icon, add text, a tooltip, or a stronger state cue. Space efficiency is not a win if it forces interpretation on every interaction.
6. Toggle Button
How quickly can someone tell whether the control is on or off?
That is the test for a toggle button. If users need to tap, hover, or pause to decode the state, the control is doing extra work they should not have to do. Toggle buttons earn their place when the interface needs a persistent binary choice such as saved filters, mute, bold text, dark mode, or show and hide behavior.
The design job is not visual polish. It is state communication.
Teams often get this wrong by making the selected state too subtle. A light tint change, a thin outline, or a tiny icon swap may look refined in mocks and still fail in production, especially outdoors on mobile or in dense desktop toolbars. The active state needs clear contrast, a visible focus treatment, and a label or icon treatment that still makes sense for people who do not perceive color differences well. Start with practical website accessibility guidelines for state and focus treatment, then test the control in real conditions.
Microcopy matters here more than many teams expect. Decide whether the label names the current state or the next action. “Muted” reports status. “Mute” describes what happens on press. Both can work, but mixing the two approaches across one product creates hesitation. In settings screens, state labels often read better. In toolbars, action labels usually scan faster.
Implementation needs the same clarity. A toggle is not just a styled button that changes color after click. It needs the correct semantics so assistive technology can announce whether it is pressed, selected, or checked, depending on the pattern. It also needs keyboard support, visible focus, and a hit area that holds up on touch screens. If engineering cannot expose state reliably, use a simpler control pattern.
A quick review checklist helps:
- Use toggles only for binary choices with immediate state feedback.
- Make on and off states distinct without relying on color alone.
- Keep the label logic consistent. Current state or next action.
- Expose state programmatically for screen readers and keyboard users.
- Use short motion to confirm change, and respect reduced-motion preferences.
One rule catches many weak designs early. If the team needs a tooltip to explain whether the toggle is active, the toggle needs to be redesigned.
7. Split Button
A split button is efficient when one option is common and the alternatives are related.
Think of actions like “Export,” “Save,” or “New.” Most users want the default option fast. Some need a variation such as format choice, template selection, or alternate destination. A split button combines both behaviors in a compact control: one side performs the default action immediately, and the other opens a menu.
This pattern shows up often in productivity tools, CMS interfaces, and cloud dashboards because it balances speed with flexibility.
Why split buttons fail so often
The control only works when users can predict both halves. If the divider is unclear, people click the wrong side. If the dropdown options are not closely related to the main action, the whole thing feels arbitrary.
A split button should never combine unrelated intentions like “Publish” plus “Delete,” or “Run” plus “Settings.” The menu is for alternate versions of the same job.
A few practical rules help:
- Make the division obvious: The dropdown trigger needs a visible separator and chevron.
- Use a safe default: The main click should perform the most common, lowest-surprise option.
- Keep the menu short: Too many options turn the control into a hidden command center.
Better on desktop than mobile
On desktop, split buttons can be excellent for tools like Google Docs, Figma, AWS Console, or Office-style interfaces where repeated actions matter. On mobile, they are more fragile. The touch target for the dropdown side gets cramped, and hidden options are easier to miss.
If you need this pattern on mobile, consider replacing it with a primary button plus bottom sheet. That usually tests better than forcing two tiny adjacent targets into one compact control.
Microcopy matters here too. “Export” is clearer than “Download” if the menu includes multiple output formats. The main label should describe the parent action that unifies the options underneath it.
8. Loading Progress Button
Loading buttons do two jobs at once. They confirm the click happened, and they manage the wait.
Without that feedback, users click again, wonder whether the form froze, or abandon a payment flow because nothing appears to be happening. Good loading states reduce duplicate submissions and lower anxiety during asynchronous work.

Stripe-style payment buttons handle this well. The click produces an immediate state change, the control becomes temporarily unavailable, and the interface signals that processing is underway. That response feels small, but it carries a lot of trust.
What the state should communicate
A loading button should answer three questions quickly:
- Did my click register
- Can I click again
- What happens if this takes longer than expected
The default pattern is simple. Replace or accompany the label with a spinner, disable repeated activation, keep the button dimensions stable, and transition cleanly into success or error feedback.
Do not let the button collapse in width when the text disappears. Layout shifts make the UI feel unstable at exactly the wrong moment.
Here is a simple reference for the pattern in motion:
Trade-offs and edge cases
Spinners are useful for short waits. For longer operations like uploads, imports, or report generation, a progress bar or status message is better because users need more than “still working.” The longer the delay, the more the system should explain.
Teams also misuse disabled states here. A disabled button without visible reason feels broken. A loading state with a clear label like “Processing” or “Sending” feels intentional.
For accessibility, avoid motion-heavy animations and ensure the state change is announced meaningfully. For engineering, test the control under poor network conditions and API errors. Most loading buttons look fine on fast local builds and fail under real latency.
9. Segmented Button Button Group
Segmented buttons shine when users need to compare a small set of mutually exclusive options.
They work best for view switching, filters, sort modes, date ranges, and short local navigation. Instead of hiding choices in a dropdown, the UI keeps them visible so users can compare and switch with minimal effort.
List versus grid, monthly versus yearly, all versus unread. Those are strong segmented-button jobs because users benefit from seeing both the alternatives and the current selection at the same time.
The sweet spot is small and clear
This pattern works when the option set is tight. Once you cram in too many choices, the group becomes crowded, hard to scan, and awkward on mobile. In practice, two to four options is usually the comfortable range.
The visual work is straightforward but important:
- Highlight the selected option clearly: Use color, contrast, and surface change.
- Keep labels short: One or two words is ideal.
- Support keyboard movement: Arrow-key navigation makes the control much faster to use.
Why this pattern often beats a dropdown
A dropdown saves space but hides choice. A segmented group exposes choice. That matters when users switch frequently or need to understand the available modes before deciding.
Google search filters, LinkedIn feed filters, and many design-tool view switchers benefit from this because the options are few, familiar, and worth comparing in place.
One caution. The “two button problem” is especially common here. If there are only two segments and each uses a different arbitrary style, users may not know which one is active. The active state needs to be additive and obvious. Pressed appearance, contrast shift, fill treatment, or strong focus styling all help.
Segmented buttons are small controls, but they carry a lot of orientation value. Done well, they reduce cognitive overhead. Done poorly, they make every switch feel uncertain.
10. Ghost Outline Button
What should a button do when the action matters, but should not compete with the main CTA?
Use a ghost or outline button. It keeps secondary and tertiary actions available without pulling visual weight away from the primary path. In product work, that usually means actions like “Cancel,” “Learn more,” “View details,” or “Compare plans.”
This pattern earns its place in interfaces with dense action sets. Pricing tables, dashboard cards, table rows, settings screens, and empty states often need multiple buttons in close proximity. If every action is filled, hierarchy collapses and the screen starts to feel heavy. An outline treatment gives you another level in the action stack.
The trade-off is obvious. Lower visual weight can slide into low discoverability.
Best use cases
Ghost outline buttons work best when users should see the action, but should not feel pushed toward it. They are a strong fit for:
- Companion actions beside a primary button: “Cancel,” “Back,” “Save for later”
- Repeated components: cards, list rows, plan comparisons, account settings
- Content-led surfaces: marketing pages or help pages where filled buttons would interrupt reading rhythm
- Low-risk exploration actions: “Preview,” “Learn more,” “See details”
I avoid them for the single most important action on a page. If the business or user goal depends on that click, a ghost button usually under-signals priority.
What makes them succeed or fail
Outline buttons fail in predictable ways during implementation, not concepting. The border is too light. The label color is too close to the background. Hover only changes opacity by a tiny amount. Focus is missing. On image backgrounds or tinted cards, the button almost disappears.
That is why this component needs a full state model, not just a default screenshot.
Use this checklist:
- Default state: Border and label must remain visible against every approved background
- Hover state: Add a clear surface shift, border change, or text-color change
- Pressed state: Reduce ambiguity with a stronger fill or inset effect
- Focus state: Use a visible focus ring that does not rely on border color alone
- Disabled state: Lower emphasis without making the label unreadable
- Touch target: Keep the hit area large enough on mobile, even if the visual style is light
Microcopy guidance
Ghost buttons benefit from specific labels. Weak microcopy makes a low-emphasis control feel even less actionable.
Prefer:
- “View invoice”
- “Compare plans”
- “Edit profile”
- “Cancel”
Avoid vague labels like:
- “More”
- “Details”
- “Continue” when it is not the primary path
Short labels work best, but clarity beats brevity. If the action needs two words to remove doubt, use two words.
Implementation notes for design and development
Design teams should define where ghost buttons are allowed in the hierarchy. Development teams should build them with background-aware tokens, especially if the same component appears on white, tinted, and dark surfaces. A single border color rarely works everywhere.
On mobile, be careful with stacked button layouts. If a filled primary button sits above a ghost cancel action, spacing and alignment need to make the relationship obvious. Too little separation can make the ghost button look disabled. Too much separation can make it feel unrelated.
Ghost buttons are simple on the surface. In production, they require disciplined contrast, state styling, and copy choices to stay useful.
Comparison of 10 Button Types
| Button Type | 🔄 Implementation Complexity | ⚡ Resource Requirements | ⭐ Expected Outcomes | 📊 Ideal Use Cases | 💡 Key Advantages |
|---|---|---|---|---|---|
| Primary Action Button | Low, straightforward styling & placement 🔄 | Low ⚡, CSS, analytics, A/B tests | High ⭐, boosts conversions & flow | CTAs on landing, checkout, forms | Clear focus, measurable uplift |
| Secondary Action Button | Low, simple styling, pairing rules 🔄 | Low ⚡, CSS, positioning | Moderate ⭐, supports user choices | Modals, forms, alternative flows | Preserves hierarchy, reduces anxiety |
| Danger / Destructive Button | Medium, confirmations & safeguards 🔄 | Medium ⚡, dialogs, undo, a11y checks | High ⭐, prevents costly mistakes | Deletes, account closure, irreversible ops | Signals risk, reduces accidental actions |
| Floating Action Button (FAB) | Medium, floating behavior, responsiveness 🔄 | Medium ⚡, elevation, animations, mobile tweaks | High ⭐ (mobile), highly discoverable | Mobile compose/add actions, primary app tasks | Persistent visibility, strong affordance |
| Icon Button | Low, icon library + labels/tooltips 🔄 | Low ⚡, icons, aria-labels, tooltips | Moderate ⭐, space-efficient, quick access | Toolbars, compact UIs, mobile nav | Language-independent, compact UI |
| Toggle Button | Low, binary state handling & a11y 🔄 | Low ⚡, state management, simple animation | Moderate ⭐, clear state control | Settings, feature switches, filters | Immediate feedback, intuitive switch metaphor |
| Split Button | Medium, dual targets, dropdown integration 🔄 | Medium ⚡, dropdown logic, touch targets | Moderate ⭐, space-saving with options | Productivity tools, export/save variations | Combines primary action with alternatives |
| Loading / Progress Button | Medium, async states & animations 🔄 | Medium-High ⚡, loaders, timeouts, smooth animation | High ⭐, improves perceived performance | Forms, uploads, payments, network ops | Prevents duplicates, communicates progress |
| Segmented Button (Button Group) | Low, grouped states & keyboard nav 🔄 | Low ⚡, CSS, state sync | Moderate ⭐, fast comparison & switching | Filters, view toggles, short option sets | All options visible, quick switching |
| Ghost / Outline Button | Low, border/text styling 🔄 | Low ⚡, simple CSS | Low-Moderate ⭐, low visual prominence | Secondary actions, minimalist UIs, cards | Minimal aesthetic, pairs well with primary |
Choosing the Right Button, Every Time
Which button belongs here, and what job is it doing?
That question resolves many button debates faster than any style guide. Teams usually get into trouble when they choose a pattern based on aesthetics, convention, or stakeholder preference instead of task priority. A secondary action gets styled too prominently because nobody wants to downplay it. An icon-only control saves space in the mockup, then creates hesitation in usability testing. A loading state gets skipped until duplicate submissions show up in production.
The reliable way to choose is to evaluate each button against three factors: importance, risk, and frequency. Importance tells you whether the action deserves primary treatment. Risk tells you whether the action needs stronger copy, confirmation, or visual warning. Frequency tells you whether the control should stay visible, become compact, or move into a faster pattern such as a FAB or segmented group. That framework works on web forms, mobile task flows, admin panels, and data-heavy product surfaces because it ties visual style to user intent.
The next layer is implementation discipline.
A button pattern is only successful if design and development interpret it the same way. “Primary” cannot mean blue in Figma and “first button in the DOM” in code. “Destructive” cannot rely on color alone if the action also needs explicit labels, a confirmation step, or undo support. “Disabled” cannot become a dead end when the better solution is to explain why the action is unavailable and what the user needs to fix first.
Accessibility needs to be decided at pattern level, not patched screen by screen. For practical reviews, I use a short checklist: the button has a clear text label or accessible name, the focus state is obvious, contrast holds up in all states, the touch target is large enough for mobile, keyboard behavior matches the control type, and state changes are announced clearly when needed. That is where button decisions move from visual design into product quality.
Microcopy often determines whether a button feels clear or risky. “Submit” is technically acceptable and frequently unhelpful. “Create account,” “Save changes,” “Delete file,” and “Send invoice” set better expectations because they tell users what happens next. For destructive actions, direct labels reduce mistakes. For loading states, short status text such as “Saving…” or “Processing payment…” helps users understand that the system is working and reduces repeat taps.
Teams also need to account for input methods beyond a simple click or tap. According to an analysis by CodeTheorem, interface patterns are being shaped by broader changes in mobile interaction models, including voice-driven behavior and multimodal inputs. The practical takeaway is straightforward. Labels, state handling, and fallback behavior matter more when the user may trigger an action through assistive tech, keyboard navigation, touch, or voice, not just a visible button on screen.
Good button choices rarely look flashy. They look obvious. One strong primary action, one clearly subordinate alternative, explicit destructive language, and feedback that appears at the right moment will outperform trend-driven styling in almost every product environment.
That is the standard to aim for. A button should signal priority, explain consequence, and respond clearly after interaction. If it does those three things well, the interface feels easier to use because the decision-making burden stays low for the user.
UIUXDesigning.com publishes practical guidance for designers, product teams, and developers who need more than pattern-library definitions. Explore UIUXDesigning.com for actionable articles on UI systems, accessibility, product workflows, mobile UX, and the design decisions that hold up in real web and app projects.

















