Button Buttons allow users to perform an action or to navigate to another page.
They have multiple styles for various needs, and are ideal for calling attention to
where a user needs to do something in order to move forward in a flow.
< Button variant = "cta" > Test< / Button >
Buttons can have a label, and icon, or both. An icon is provided by passing an icon component to the icon
prop.
A visible label can be provided by passing children.
< Button variant = "primary" > Label only< / Button >
< Button variant = "primary" icon = { < Bell / > } > Icon + Label< / Button >
< Button variant = "primary" icon = { < Bell / > } aria-label = "Icon only" / >
If no visible label is provided (e.g. an icon only button),
an alternative text label must be provided to identify the control for accessibility. This should be added using
the aria-label
prop.
In order to internationalize a button, a localized string should be passed to the children
or aria-label
prop.
Buttons support user interactions via mouse, keyboard, and touch. You can handle all of these via the onPress
prop.
The following example uses an onPress
handler to update a counter stored in React state.
function Example ( ) {
let [ count, setCount] = React . useState ( 0 ) ;
return (
< Button variant = "primary" onPress = { ( ) => setCount ( c => c + 1 ) } > { count} Dogs< / Button >
) ;
}
Name Type Default Description icon
ReactElement
— An icon to display in the button variant
'cta'
| 'overBackground'
| 'primary'
| 'secondary'
| 'negative'
— The [visual style](https://spectrum.adobe.com/page/button/#Options) of the button. isQuiet
boolean
— Whether the button should be displayed with a quiet style isDisabled
boolean
— Whether the button is disabled elementType
string | JSXElementConstructor < any >
"button"
The HTML element or React element used to render the button, e.g. "div", "a", or `RouterLink` children
ReactNode
— The content to display in the button href
string
— A URL to link to if elementType="a" target
string
— The target window for the link UNSAFE_className
string
— UNSAFE_style
CSSProperties
— autoFocus
boolean
—
EventsName Type Default Description onPress
( e : ) => void
— Called when the mouse or touch is released onPressStart
( e : ) => void
— onPressEnd
( e : ) => void
— onPressChange
( isPressed : boolean ) => void
— onHover
( e : ) => void
— onHoverEnd
( e : ) => void
— onHoverChange
( isHovering : boolean ) => void
— onFocus
( e : ) => void
— onBlur
( e : ) => void
— onFocusChange
( isFocused : boolean ) => void
— onKeyDown
( e : ) => void
— onKeyUp
( e : ) => void
—
LayoutName Type Default Description flex
string | number | boolean
— flexGrow
number
— flexShrink
number
— alignSelf
'auto'
| 'normal'
| 'start'
| 'end'
| 'flex-start'
| 'flex-end'
| 'self-start'
| 'self-end'
| 'center'
| 'stretch'
— justifySelf
'auto'
| 'normal'
| 'start'
| 'end'
| 'flex-start'
| 'flex-end'
| 'self-start'
| 'self-end'
| 'center'
| 'left'
| 'right'
| 'stretch'
— flexOrder
number
— gridArea
string
— gridColumn
string
— gridRow
string
— gridColumnStart
string
— gridColumnEnd
string
— gridRowStart
string
— gridRowEnd
string
— slot
string
—
SpacingName Type Default Description margin
— marginTop
— marginLeft
— marginRight
— marginBottom
— marginStart
— marginEnd
— marginX
— marginY
—
SizingName Type Default Description width
— minWidth
— maxWidth
— height
— minHeight
— maxHeight
—
PositioningName Type Default Description position
'static'
| 'relative'
| 'absolute'
| 'fixed'
| 'sticky'
— top
— bottom
— left
— right
— start
— end
— zIndex
number
— isHidden
boolean
—
AccessibilityName Type Default Description role
string
— id
string
— tabIndex
number
— aria-label
string
— Defines a string value that labels the current element. aria-labelledby
string
— Identifies the element (or elements) that labels the current element. aria-describedby
string
— Identifies the element (or elements) that describes the object. aria-controls
string
— Identifies the element (or elements) whose contents or presence are controlled by the current element. aria-owns
string
— Identifies an element (or elements) in order to define a visual, functional, or contextual parent/child relationship
between DOM elements where the DOM hierarchy cannot be used to represent the relationship. aria-hidden
boolean | 'false' | 'true'
— Indicates that the element is perceivable but disabled, so it is not editable or otherwise operable.
'size-0'
| 'size-10'
| 'size-25'
| 'size-40'
| 'size-50'
| 'size-65'
| 'size-75'
| 'size-85'
| 'size-100'
| 'size-115'
| 'size-125'
| 'size-130'
| 'size-150'
| 'size-160'
| 'size-175'
| 'size-200'
| 'size-225'
| 'size-250'
| 'size-300'
| 'size-350'
| 'size-400'
| 'size-450'
| 'size-500'
| 'size-550'
| 'size-600'
| 'size-675'
| 'size-700'
| 'size-800'
| 'size-900'
| 'size-1000'
| 'size-1200'
| 'size-1250'
| 'size-1600'
| 'size-1700'
| 'size-2000'
| 'size-2400'
| 'size-3000'
| 'size-3400'
| 'size-3600'
| 'size-4600'
| 'size-5000'
| 'size-6000'
| 'static-size-0'
| 'static-size-10'
| 'static-size-25'
| 'static-size-50'
| 'static-size-40'
| 'static-size-65'
| 'static-size-100'
| 'static-size-115'
| 'static-size-125'
| 'static-size-150'
| 'static-size-175'
| 'static-size-200'
| 'static-size-225'
| 'static-size-250'
| 'static-size-300'
| 'static-size-400'
| 'static-size-450'
| 'static-size-500'
| 'static-size-550'
| 'static-size-600'
| 'static-size-700'
| 'static-size-800'
| 'static-size-900'
| 'static-size-1000'
| 'static-size-1200'
| 'static-size-1700'
| 'static-size-2400'
| 'static-size-2600'
| 'static-size-3400'
| 'static-size-3600'
| 'static-size-4600'
| 'static-size-5000'
| 'static-size-6000'
| 'single-line-height'
| 'single-line-width'
| string
| number
'mouse'
| 'pen'
| 'touch'
| 'keyboard'
Name Type Description type
'hoverstart' | 'hoverend' | 'hover'
pointerType
'mouse' | 'touch' | 'pen'
target
HTMLElement
ReactFocusEvent < any > & { stopPropagation : ( ) => void ,
continuePropagation : ( ) => void
}
ReactKeyboardEvent < any > & { stopPropagation : ( ) => void ,
continuePropagation : ( ) => void
}
< Button variant = "cta" > Test< / Button >
< Button variant = "primary" > Test< / Button >
< Button variant = "primary" isQuiet > Test< / Button >
< Button variant = "secondary" > Test< / Button >
< Button variant = "secondary" isQuiet > Test< / Button >
< div style = { { backgroundColor : 'rgb(15, 121, 125)' , padding : '15px 20px' } } >
< Button variant = "overBackground" > Test< / Button >
< Button variant = "overBackground" isQuiet > Test< / Button >
< / div >
< Button variant = "negative" > Test< / Button >
< Button variant = "negative" isQuiet > Test< / Button >