Button
Use buttons when users need a clear primary or secondary action such as submit, continue, or download.
Live demo
Buttons signal actions: something will happen when people activate the control. Use them to make primary and secondary tasks obvious on pages, cards, heroes, and in overlays. People should always understand what happens next from the label and the visual weight of the control.
On many pages, controls that look like buttons are implemented as styled links when the action is really navigation to another URL. Native button behaviour still applies where the platform uses real buttons for submit, search, tabs, or accordions. The important distinction for authors and designers is outcome: navigation versus an action on the current screen (see Links and buttons below).
Behaviour
Primary actions should stand out; secondary and tertiary actions should look quieter so people can choose quickly without competing noise. Focus must stay visible for keyboard users on every style.
Controls that navigate should behave like links (including predictable destination, open-in-new-tab only when clearly intended). Controls that submit or toggle something on the spot should behave like buttons. Do not mix these meanings with misleading labels.
Anatomy
- Label: the words (or accessible name) that describe the action.
- Surface: solid, outline, or minimal text treatment that shows emphasis.
- Optional icon when the pattern calls for a quick visual cue.

Replace with primary, secondary, and ghost examples.
Content guidelines
- Use verb-first labels: Apply, Download, Register, Sign in.
- Use sentence case unless the label is a proper name.
- Match the destination or outcome: the label should fit what people see or experience after they activate the control.
- If the visible label is short, add a clearer accessible name only when screen reader users would lack context (see Accessibility).
Links and buttons
We sometimes style an anchor like a button so it matches the rest of the UI. It still navigates like a link. A real button is for actions on the current page (submit a form, open a panel, run a control). If the only job is to go somewhere else, a text link or standard link styling may be clearer than a loud button.
When to use
- Calls to action on pages, cards, heroes, and modals when the task is clear.
- Form submission, search, or continue steps when emphasis should match task priority.
When not to use
- Long lists of navigation destinations; use Link or link lists so the page does not look like a wall of buttons.
- When a quiet text link is enough for secondary navigation.
Best practices
Do
Use one primary call to action to help orient users to the main action.
Don't
Use one primary call to action to help orient users to the main action.
Do
- Aim for one primary button per screen or modal when possible.
- Group related actions; separate unrelated actions with spacing or layout.
- Give external or unfamiliar destinations clear visible text; add extra context in an accessible name only when the visible label cannot stand alone.
- On narrow screens, stack actions instead of squeezing many buttons in one row.
Don't
- Use a button look for pure in-page navigation when a link is more honest.
- Choose style based only on label length; match importance of the task.
- Place more than three competing actions in a tight row on simple flows without testing mobile.
Related
| Resource | |
|---|---|
| Link | Text or inline navigation without button emphasis. |
| Form controls | Broader form patterns that include buttons. |
- Primary: solid brand fill; one per surface in most layouts.
- Secondary: outline or alternate fill for the next most important actions.
- Tertiary: ghost or text style for low-emphasis actions.
- Sizing: default and large variants where the design system allows.
- Focus: keep Concordia focus outlines on keyboard focus; do not remove outlines without an accessible replacement.
Placement: combine styles on one screen to guide attention, but keep one strongest emphasis.
CRXDE Lite query
Use this query in CRXDE Lite to find instances of this component.
/jcr:root/content//*[@sling:resourceType = 'concordia/components/button/button.html']Implementation
| Item | Location |
|---|---|
| HTL | apps/concordia/components/button/button.html |
| Model | org/concordia/wcms/core/models/ButtonModel.java |
| Clientlib | apps.concordia.button (included from HTL) |
The component renders anchor elements with classes from the model (btn, btn-primary, btn-secondary, btn-ghost, and similar), optional inline colour for custom fills, and optional aria-label. The label can include HTML where the dialog allows. Centered alignment maps to wrapper classes.
| Emphasis | Typical class | Use |
|---|---|---|
| High | btn-primary | One primary action per view. |
| Medium | btn-secondary or filled variants | Secondary tasks. |
| Low | btn-ghost, btn-link | Tertiary actions. |
Prefer the authoring dialog over hard-coding class names.