---
title: React Button Component
name: Buttons
description: React button component for actions in tables, forms, cards, and more. CoreUI for React.js provides various styles, states, and size. Ready to use and easy to customize.
menu: Components
route: /components/buttons
other_frameworks: button
---

import { CButton } from '@coreui/react/src/index'

## How to use React Button Component.

CoreUI includes a bunch of predefined buttons components, each serving its own semantic purpose. React buttons show what action will happen when the user clicks or touches it. CoreUI buttons are used to initialize operations, both in the background or foreground of an experience.

```jsx preview
<CButton color="primary">Primary</CButton>
<CButton color="secondary">Secondary</CButton>
<CButton color="success">Success</CButton>
<CButton color="danger">Danger</CButton>
<CButton color="warning">Warning</CButton>
<CButton color="info">Info</CButton>
<CButton color="light">Light</CButton>
<CButton color="dark">Dark</CButton>
<CButton color="link">Link</CButton>
```

<Callout color="info" title="Conveying meaning to assistive technologies">
  Using color to add meaning only provides a visual indication, which will not be conveyed to
  users of assistive technologies – such as screen readers. Ensure that information denoted by the
  color is either obvious from the content itself (e.g. the visible text), or is included through
  alternative means, such as additional text hidden with the `.visually-hidden` class.
</Callout>

## Disable text wrapping

If you don't want the react button text to wrap, you can add the `.text-nowrap` className to the `<CButton>`. In Sass, you can set `$btn-white-space: nowrap` to disable text wrapping for each button.

## Button components

The `<CButton>` component are designed for `<button>` , `<a>` or `<input>` elements (though some browsers may apply a slightly different rendering).

If you're using `<CButton>` component as `<a>` elements that are used to trigger functionality ex. collapsing content, these links should be given a `role="button"` to adequately communicate their meaning to assistive technologies such as screen readers.

```jsx preview
<CButton as="a" color="primary" href="#" role="button">Link</CButton>
<CButton type="submit" color="primary">Button</CButton>
<CButton as="input" type="button" color="primary" value="Input"/>
<CButton as="input" type="submit" color="primary" value="Submit"/>
<CButton as="input" type="reset" color="primary" value="Reset"/>
```

## Outline buttons

If you need a button, but without the strong background colors. Set `variant="outline"` prop to remove all background colors.

```jsx preview
<CButton color="primary" variant="outline">Primary</CButton>
<CButton color="secondary" variant="outline">Secondary</CButton>
<CButton color="success" variant="outline">Success</CButton>
<CButton color="danger" variant="outline">Danger</CButton>
<CButton color="warning" variant="outline">Warning</CButton>
<CButton color="info" variant="outline">Info</CButton>
<CButton color="light" variant="outline">Light</CButton>
<CButton color="dark" variant="outline">Dark</CButton>
```

## Ghost buttons

If you need a ghost variant of react button, set `variant="ghost"` prop to remove all background colors.

```jsx preview
<CButton color="primary" variant="ghost">Primary</CButton>
<CButton color="secondary" variant="ghost">Secondary</CButton>
<CButton color="success" variant="ghost">Success</CButton>
<CButton color="danger" variant="ghost">Danger</CButton>
<CButton color="warning" variant="ghost">Warning</CButton>
<CButton color="info" variant="ghost">Info</CButton>
<CButton color="light" variant="ghost">Light</CButton>
<CButton color="dark" variant="ghost">Dark</CButton>
```

<Callout color="info">
  Some of the button styles use a relatively light foreground color, and should only be used on a
  dark background in order to have sufficient contrast.
</Callout>

## Sizes

Larger or smaller react buttons? Add `size="lg"` or `size="sm"` for additional sizes.

```jsx preview
<CButton color="primary" size="lg">Large button</CButton>
<CButton color="secondary" size="lg">Large button</CButton>
```

```jsx preview
<CButton color="primary" size="sm">Small button</CButton>
<CButton color="secondary" size="sm">Small button</CButton>
```

## Shapes

### Pill buttons

```jsx preview
<CButton color="primary" shape="rounded-pill">Primary</CButton>
<CButton color="secondary" shape="rounded-pill">Secondary</CButton>
<CButton color="success" shape="rounded-pill">Success</CButton>
<CButton color="danger" shape="rounded-pill">Danger</CButton>
<CButton color="warning" shape="rounded-pill">Warning</CButton>
<CButton color="info" shape="rounded-pill">Info</CButton>
<CButton color="light" shape="rounded-pill">Light</CButton>
<CButton color="dark" shape="rounded-pill">Dark</CButton>
<CButton color="link" shape="rounded-pill">Link</CButton>
```

### Square buttons

```jsx preview
<CButton color="primary" shape="rounded-0">Primary</CButton>
<CButton color="secondary" shape="rounded-0">Secondary</CButton>
<CButton color="success" shape="rounded-0">Success</CButton>
<CButton color="danger" shape="rounded-0">Danger</CButton>
<CButton color="warning" shape="rounded-0">Warning</CButton>
<CButton color="info" shape="rounded-0">Info</CButton>
<CButton color="light" shape="rounded-0">Light</CButton>
<CButton color="dark" shape="rounded-0">Dark</CButton>
<CButton color="link" shape="rounded-0">Link</CButton>
```

## Disabled state

Add the `disabled` boolean prop to any `<CButton>` component to make buttons look inactive. Disabled button has `pointer-events: none` applied to, disabling hover and active states from triggering.

```jsx preview
<CButton color="primary" size="lg" disabled>Primary button</CButton>
<CButton color="secondary" size="lg" disabled>Button</CButton>
```

Disabled buttons using the `<a>` component act a little different:

`<a>`s don't support the `disabled` attribute, so CoreUI has to add `.disabled` className to make buttons look inactive. CoreUI also has to add to the disabled button component `aria-disabled="true"` attribute to show the state of the component to assistive technologies.

```jsx preview
<CButton as="a" href="#" color="primary" size="lg" disabled>Primary link</CButton>
<CButton as="a" href="#" color="secondary" size="lg" disabled>Link</CButton>
```

The `.disabled` class uses `pointer-events: none` to try to disable the link functionality of `<a>`s, but that CSS property is not yet standardized. Besides, even in browsers that do support `pointer-events: none`, keyboard navigation remains unaffected, meaning that sighted keyboard users and users of assistive technologies will still be able to activate these links. So to be safe, we automatically add a `tabindex="-1"` attribute on disabled links (to prevent them from receiving keyboard focus) and use custom JavaScript to disable their functionality.

## Block buttons

Create buttons that span the full width of a parent—by using utilities.

```jsx preview
<div className="d-grid gap-2">
  <CButton color="primary">Button</CButton>
  <CButton color="primary">Button</CButton>
</div>
```

Here we create a responsive variation, starting with vertically stacked buttons until the `md` breakpoint, where `.d-md-block` replaces the `.d-grid` class, thus nullifying the `gap-2` utility. Resize your browser to see them change.

```jsx preview
<div className="d-grid gap-2 d-md-block">
  <CButton color="primary">Button</CButton>
  <CButton color="primary">Button</CButton>
</div>
```

You can adjust the width of your block buttons with grid column width classes. For example, for a half-width "block button", use `.col-6`. Center it horizontally with `.mx-auto`, too.

```jsx preview
<div className="d-grid gap-2 col-6 mx-auto">
  <CButton color="primary">Button</CButton>
  <CButton color="primary">Button</CButton>
</div>
```

Additional utilities can be used to adjust the alignment of buttons when horizontal. Here we've taken our previous responsive example and added some flex utilities and a margin utility on the button to right align the buttons when they're no longer stacked.

```jsx preview
<div className="d-grid gap-2 d-md-flex justify-content-md-end">
  <CButton color="primary" className="me-md-2">Button</CButton>
  <CButton color="primary">Button</CButton>
</div>
```

## Customizing

### CSS variables

React buttons use local CSS variables on `.btn` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.

<ScssDocs file="_buttons.scss" capture="btn-css-vars"/>

#### How to use CSS variables

```jsx
const vars = { 
  '--my-css-var': 10,
  '--my-another-css-var': "red" 
}
return <CButton style={vars}>...</CButton>
```

### SASS variables

<ScssDocs file="_variables.scss" capture="btn-variables"/>

## API

### CButton

`markdown:CButton.api.mdx`
