Pressable

A pressable is a primitive for building custom buttons.

Usage

Use pressable to make custom-styled buttons and other pressable elements. Pressable works similarly to an HTML <button>, but with Atlassian focus styles, analytics events, and styling APIs built in.

For example, you could use pressable to make a colored square button that opens a color picker, or a basic card that shows more details when selected.

Parts

Pressable anatomy

  1. Pressable area: For accessibility this should be a minimum of 24 by 24 pixels, unless exempt from Target Size (Minimum) (Level AA), (opens new window).
  2. Focus ring: This is included in pressable and appears on keyboard focus.
  3. Accessible label: Pressable should always include a clear label for accessibility. Use this to communicate the action that occurs when the button is pressed.

Use existing buttons and other components whenever possible

Only use pressable when existing components such as buttons or menus can't be customized to fit your case.

Using existing components with safe customizations is usually faster and keeps Atlassian UI more visually consistent as things change.

A set of custom buttons built with pressable that are not possible using existing design system components

Do

Use pressable to create buttons when there isn't an existing design system component to achieve your use case.

A custom button build with Pressable that looks similar to Button, an existing design system component

Don’t

Don't use pressable to redesign elements that already exists in the Atlassian design system, such as buttons. This can cause visual and behavioral inconsistency in apps.

Accessibility

Use clear labels for assistive technology

Pressable elements should always announce what action will happen once pressed, especially for elements with no visible label, such as icon buttons.

Pressable labels

Use the visually hidden component to provide an accessible label. This will render hidden text inside the button, which is preferable over the aria-label attribute because not all screen readers translate this between languages.

Also consider a tooltip to provide sighted users with the same information.

Focus ring behavior

Pressable buttons are available in focus order, and include a visual ring to clarify what is in focus by default. Adding additional focus styles is unnecessary.

Avoid disabling buttons

Disabled buttons can cause accessibility problems. Avoid disabling buttons and follow our disabled button and tooltip guidance.

Best practices

Make it clear what can be pressed

Custom buttons should look interactive. Make sure clickable elements are clearly identifiable through styles, surrounding context, labels, and other cues.

Apply motion to Pressable

Pressable has no motion by default because it can be used to build a variety of button-like interactive elements.

If a custom control looks and acts like a button, apply button motion tokens to background-color changes:

  • Use motion.button.hovered for the default and hover transition.
  • Use motion.button.pressed for the pressed state.
  • Apply these tokens only to background-color transitions.

If it does not look and act like a button, use the appropriate semantic motion tokens where available. If no semantic motion token exists, build custom motion using base tokens. For example, as a card looks and behaves differently to a button and has no semantic motion token, build custom motion using base tokens.

Use the ADS Button component whenever it supports the customisation you need. It includes button motion by default.

Apply motion to Pressable list items

Pressable has no motion by default. If a custom control looks and acts like a list item, apply list-item motion tokens to the properties that change between interaction states.

List-item motion is intended for series of interactive items placed close together, such as side-navigation links and menu items. Because users may move across these items quickly, use short, snappy transitions to keep the interface responsive.

  • Use motion.listitem.hovered for normal and hover states (50ms).
  • Use motion.listitem.pressed for the pressed (:active) state (100ms).
  • Use motion.listitem.selected for the selected (data-selected) state (100ms).
  • Use motion.listitem.hovered for selected hover and motion.listitem.pressed for selected active.

Choose the motion family based on how the custom control looks and acts: use button motion for buttons, list-item motion for list items, and base motion tokens when neither semantic category applies. Do not animate focus indicators; focus feedback should appear immediately.

Use pressable for on-page actions, not navigation

Pressable is meant for on-page actions such as opening modals or submitting forms. If you're making something that navigates to a new page, use a component that renders a semantically correct HTML <a> element such as:

  • The link component for standard text links.
  • The anchor primitive to create custom links.

Also, don't add underlines to a pressable. This makes the button appear to be a link, which can be confusing for users who assume they can perform actions specific to links, such as opening links in new windows.

Content guidelines

Use sentence case capitalization

Use sentence case capitalization, only capitalizing the first letter of the label and any proper nouns. Other forms of capitalization should be only applied through styling with text-transform.

Make it clear what pressing the button does

Make sure labels are concise, active, and clear about what pressing the button does.

For example, Change issue color to yellow instead of yellow.

Follow other label and UI content guidance

Follow label and content guidelines for buttons. Review the general UI text guidance for specific questions.

Was this page helpful?
We use this feedback to improve our documentation.
© 2026 AtlassianTrademark, (opens new window)Privacy, (opens new window)License