React button components with WCAG 2 AA contrast ratio tested colors, light and dark theme options. Flexible & easily customized.
Uses a theme based on System UI Theme Specification & can be overriden by passing in your own theme as a prop.
If you are using emotion, styles can also be overriden via composition.
Install.
npm i -S @cyberhippo/react-styled-buttons
Import the Button component into your app:
import { Button } from '@cyberhippo/react-styled-buttons';
Add Button to your render function.
<Button>Click Me!</Button>
Explore all the button themes, styles and sizes in the Storybook.
These are the available props for the button component.
Allows you to overwrite the element - by default it is rendered as a button element. This is useful if you need to use a routing Link component
<Button as={Link} to="/about">
About
</Button>
Any html attribute can be passed as a prop and will be set as an attribute to the element.
<Button tabindex="-1">
About
</Button>
<Button
onClick={() => {
/* your click handler */
}}
onMouseUp={() => {
/* your mouse up handler */
}}
>
Button variant - this will assign different theme styles for each variant. Options: primary(default), secondary, accent1, accent2, accent3, accent4, muted, highlight, gray.
<Button variant="secondary">
About
</Button>
Three sizes: large(default), medium, small.
<Button size="small">
About
</Button>
Mode: light or dark.
<Button mode="dark">
About
</Button>
Sets button to disabled.
<Button disabled>
About
</Button>
Disables button animation on hover & click.
<Button disableAnimation>
About
</Button>
Disable color transforms on hover & click.
<Button disableColorTransforms>
About
</Button>
The Button component uses a theme preset to set styles. Override the theme by passing a theme object, this will be merged with the Button's theme. Pass in the same properties as the inner theme.
<Button
mode={mode}
theme={{
colors: {
background: "#f8f0fc",
primary: "#862E9C",
modes: {
dark: {
background: "#333",
primary: "#e599f7"
}
}
},
shadows: {
default: "0 .5rem 1rem rebeccapurple"
}
}}
>
Custom theme button
</Button>
If you are using emotion, you can merge your own styles with existing styles (composition) by passing in a css prop.
<Button
css={css`
background: red;
&:hover {
background: green;
}
`}
>
About
</Button>