---
layout: docs
title: Buttons
description: Use Bootstrap's custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.
group: components
toc: true
---
## Examples
Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.
{% capture example %}
{% for color in site.data.theme-colors %}
{{ color.name | capitalize }} {% endfor %}
Link
{% endcapture %}
{% include example.html content=example %}
{% include callout-warning-color-assistive-technologies.md %}
## Disable text wrapping
If you don't want the button text to wrap, you can add the `.text-nowrap` class to the button. In Sass, you can set `$btn-white-space: nowrap` to disable text wrapping for each button.
## Button tags
The `.btn` classes are designed to be used with the `` element. However, you can also use these classes on `` or ` ` elements (though some browsers may apply a slightly different rendering).
When using button classes on ` ` elements that are used to trigger in-page functionality (like collapsing content), rather than linking to new pages or sections within the current page, these links should be given a `role="button"` to appropriately convey their purpose to assistive technologies such as screen readers.
{% capture example %}
Link
Button
{% endcapture %}
{% include example.html content=example %}
## Outline buttons
In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the `.btn-outline-*` ones to remove all background images and colors on any button.
{% capture example %}
{% for color in site.data.theme-colors %}
{{ color.name | capitalize }} {% endfor %}
{% endcapture %}
{% include example.html content=example %}
## Sizes
Fancy larger or smaller buttons? Add `.btn-lg` or `.btn-sm` for additional sizes.
{% capture example %}
Large button
Large button
{% endcapture %}
{% include example.html content=example %}
{% capture example %}
Small button
Small button
{% endcapture %}
{% include example.html content=example %}
Create block level buttons—those that span the full width of a parent—by adding `.btn-block`.
{% capture example %}
Block level button
Block level button
{% endcapture %}
{% include example.html content=example %}
## Active state
Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active. **There's no need to add a class to ``s as they use a pseudo-class**. However, you can still force the same active appearance with `.active` (and include the aria-pressed="true"
attribute) should you need to replicate the state programmatically.
{% capture example %}
Primary link
Link
{% endcapture %}
{% include example.html content=example %}
## Disabled state
Make buttons look inactive by adding the `disabled` boolean attribute to any `` element.
{% capture example %}
Primary button
Button
{% endcapture %}
{% include example.html content=example %}
Disabled buttons using the `` element behave a bit different:
- ` `s don't support the `disabled` attribute, so you must add the `.disabled` class to make it visually appear disabled.
- Some future-friendly styles are included to disable all `pointer-events` on anchor buttons. In browsers which support that property, you won't see the disabled cursor at all.
- Disabled buttons should include the `aria-disabled="true"` attribute to indicate the state of the element to assistive technologies.
{% capture example %}
Primary link
Link
{% endcapture %}
{% include example.html content=example %}
{% capture callout %}
##### Link functionality caveat
The `.disabled` class uses `pointer-events: none` to try to disable the link functionality of ``s, but that CSS property is not yet standardized. In addition, 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, add a `tabindex="-1"` attribute on these links (to prevent them from receiving keyboard focus) and use custom JavaScript to disable their functionality.
{% endcapture %}
{% include callout.html content=callout type="warning" %}
## Button plugin
Do more with buttons. Control button states or create groups of buttons for more components like toolbars.
### Toggle states
Add `data-toggle="button"` to toggle a button's `active` state. If you're pre-toggling a button, you must manually add the `.active` class **and** `aria-pressed="true"` to the ``.
{% capture example %}
Single toggle
{% endcapture %}
{% include example.html content=example %}
### Checkbox and radio buttons
Bootstrap's `.button` styles can be applied to other elements, such as ``s, to provide checkbox or radio style button toggling. Add `data-toggle="buttons"` to a `.btn-group` containing those modified buttons to enable their toggling behavior via JavaScript and add `.btn-group-toggle` to style the ` `s within your buttons. **Note that you can create single input-powered buttons or groups of them.**
The checked state for these buttons is **only updated via `click` event** on the button. If you use another method to update the input—e.g., with ` ` or by manually applying the input's `checked` property—you'll need to toggle `.active` on the `` manually.
Note that pre-checked buttons require you to manually add the `.active` class to the input's ``.
{% capture example %}
Checked
{% endcapture %}
{% include example.html content=example %}
{% capture example %}
Active
Radio
Radio
{% endcapture %}
{% include example.html content=example %}
### Methods
| Method | Description |
| --- | --- |
| `$().button('toggle')` | Toggles push state. Gives the button the appearance that it has been activated. |
| `$().button('dispose')` | Destroys an element's button. |