buttons.md 8.51 KB
Newer Older
Mark Otto's avatar
Mark Otto committed
1
---
Mark Otto's avatar
Mark Otto committed
2
layout: docs
Mark Otto's avatar
Mark Otto committed
3
title: Buttons
Mark Otto's avatar
Mark Otto committed
4
description: Use Bootstrap's custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.
5
group: components
6
redirect_from: "/components/"
Mark Otto's avatar
Mark Otto committed
7
---
Mark Otto's avatar
Mark Otto committed
8

Mark Otto's avatar
Mark Otto committed
9
Use Bootstrap's custom button styles for actions in forms, dialogs, and more. Includes support for a handful of contextual variations, sizes, states, and more.
10

Mark Otto's avatar
Mark Otto committed
11
12
13
14
15
## Contents

* Will be replaced with the ToC, excluding the "Contents" header
{:toc}

16
17
18
## Examples

Bootstrap includes six predefined button styles, each serving its own semantic purpose.
Mark Otto's avatar
Mark Otto committed
19
20

{% example html %}
Mark Otto's avatar
Mark Otto committed
21
22
23
<!-- Provides extra visual weight and identifies the primary action in a set of buttons -->
<button type="button" class="btn btn-primary">Primary</button>

24
25
26
<!-- Secondary, outline button -->
<button type="button" class="btn btn-secondary">Secondary</button>

Mark Otto's avatar
Mark Otto committed
27
28
29
<!-- Indicates a successful or positive action -->
<button type="button" class="btn btn-success">Success</button>

30
31
32
<!-- Contextual button for informational alert messages -->
<button type="button" class="btn btn-info">Info</button>

Mark Otto's avatar
Mark Otto committed
33
34
35
36
37
38
39
40
<!-- Indicates caution should be taken with this action -->
<button type="button" class="btn btn-warning">Warning</button>

<!-- Indicates a dangerous or potentially negative action -->
<button type="button" class="btn btn-danger">Danger</button>

<!-- Deemphasize a button by making it look like a link while maintaining button behavior -->
<button type="button" class="btn btn-link">Link</button>
Mark Otto's avatar
Mark Otto committed
41
42
{% endexample %}

43
44
{% capture callout-include %}{% include callout-warning-color-assistive-technologies.md %}{% endcapture %}
{{ callout-include | markdownify }}
Mark Otto's avatar
Mark Otto committed
45
46
47

## Button tags

Mark Otto's avatar
Mark Otto committed
48
The `.btn` classes are designed to be used with the `<button>` element. However, you can also use these classes on `<a>` or `<input>` elements (though some browsers may apply a slightly different rendering).
49

Mark Otto's avatar
Mark Otto committed
50
When using button classes on `<a>` 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.
Mark Otto's avatar
Mark Otto committed
51
52

{% example html %}
Mark Otto's avatar
Mark Otto committed
53
54
55
56
<a class="btn btn-primary" href="#" role="button">Link</a>
<button class="btn btn-primary" type="submit">Button</button>
<input class="btn btn-primary" type="button" value="Input">
<input class="btn btn-primary" type="submit" value="Submit">
57
<input class="btn btn-primary" type="reset" value="Reset">
Mark Otto's avatar
Mark Otto committed
58
59
{% endexample %}

Mark Otto's avatar
Mark Otto committed
60
61
## Outline buttons

62
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.
Mark Otto's avatar
Mark Otto committed
63
64

{% example html %}
65
66
67
68
69
70
<button type="button" class="btn btn-outline-primary">Primary</button>
<button type="button" class="btn btn-outline-secondary">Secondary</button>
<button type="button" class="btn btn-outline-success">Success</button>
<button type="button" class="btn btn-outline-info">Info</button>
<button type="button" class="btn btn-outline-warning">Warning</button>
<button type="button" class="btn btn-outline-danger">Danger</button>
Mark Otto's avatar
Mark Otto committed
71
72
73
{% endexample %}


Mark Otto's avatar
Mark Otto committed
74
75
## Sizes

76
Fancy larger or smaller buttons? Add `.btn-lg` or `.btn-sm` for additional sizes.
Mark Otto's avatar
Mark Otto committed
77
78
79
80
81
82
83
84
85
86
87
88
89
90

{% example html %}
<button type="button" class="btn btn-primary btn-lg">Large button</button>
<button type="button" class="btn btn-secondary btn-lg">Large button</button>
{% endexample %}

{% example html %}
<button type="button" class="btn btn-primary btn-sm">Small button</button>
<button type="button" class="btn btn-secondary btn-sm">Small button</button>
{% endexample %}

Create block level buttons—those that span the full width of a parent—by adding `.btn-block`.

{% example html %}
Mark Otto's avatar
Mark Otto committed
91
<button type="button" class="btn btn-primary btn-lg btn-block">Block level button</button>
Mark Otto's avatar
Mark Otto committed
92
<button type="button" class="btn btn-secondary btn-lg btn-block">Block level button</button>
Mark Otto's avatar
Mark Otto committed
93
94
95
96
{% endexample %}

## Active state

Mark Otto's avatar
Mark Otto committed
97
Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active. **There's no need to add a class to `<button>`s as they use a pseudo-class**. However, you can still force the same active appearance with `.active` (and include the <code>aria-pressed="true"</code> attribute) should you need to replicate the state programmatically.
Mark Otto's avatar
Mark Otto committed
98
99

{% example html %}
100
101
<a href="#" class="btn btn-primary btn-lg active" role="button" aria-pressed="true">Primary link</a>
<a href="#" class="btn btn-secondary btn-lg active" role="button" aria-pressed="true">Link</a>
Mark Otto's avatar
Mark Otto committed
102
103
104
105
{% endexample %}

## Disabled state

Mark Otto's avatar
Mark Otto committed
106
107
108
109
110
Make buttons look inactive by adding the `disabled` boolean attribute to any `<button>` element.

{% callout info %}
**Heads up!** IE9 and below render disabled buttons with gray, shadowed text that we can't override.
{% endcallout %}
Mark Otto's avatar
Mark Otto committed
111
112
113
114
115
116

{% example html %}
<button type="button" class="btn btn-lg btn-primary" disabled>Primary button</button>
<button type="button" class="btn btn-secondary btn-lg" disabled>Button</button>
{% endexample %}

117
118
119
Disabled buttons using the `<a>` element behave a bit different:

- `<a>`s don't support the `disabled` attribute, so you must add the `.disabled` class to make it visually appear disabled.
120
- 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.
121
- Disabled buttons should include the `aria-disabled="true"` attribute to indicate the state of the element to assistive technologies.
Mark Otto's avatar
Mark Otto committed
122
123

{% example html %}
124
125
<a href="#" class="btn btn-primary btn-lg disabled" role="button" aria-disabled="true">Primary link</a>
<a href="#" class="btn btn-secondary btn-lg disabled" role="button" aria-disabled="true">Link</a>
Mark Otto's avatar
Mark Otto committed
126
127
{% endexample %}

128
129
130
{% callout warning %}
#### Link functionality caveat

131
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. 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.
132
{% endcallout %}
Mark Otto's avatar
Mark Otto committed
133

Mark Otto's avatar
Mark Otto committed
134
## Button plugin
135
136
137

Do more with buttons. Control button states or create groups of buttons for more components like toolbars.

Mark Otto's avatar
Mark Otto committed
138
### Toggle states
139
140
141
142
143
144
145
146
147

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 `<button>`.

{% example html %}
<button type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false" autocomplete="off">
  Single toggle
</button>
{% endexample %}

Mark Otto's avatar
Mark Otto committed
148
### Checkbox and radio buttons
149
150
151
152
153
154
155
156

Bootstrap's `.button` styles can be applied to other elements, such as `<label>`s, to provide checkbox or radio style button toggling. Add `data-toggle="buttons"` to a `.btn-group` containing those modified buttons to enable toggling in their respective styles.

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 `<input type="reset">` or by manually applying the input's `checked` property—you'll need to toggle `.active` on the `<label>` manually.

Note that pre-checked buttons require you to manually add the `.active` class to the input's `<label>`.

{% example html %}
Mark Otto's avatar
Mark Otto committed
157
158
159
160
161
162
163
164
165
166
<div class="btn-group" data-toggle="buttons">
  <label class="btn btn-primary active">
    <input type="checkbox" checked autocomplete="off"> Checkbox 1 (pre-checked)
  </label>
  <label class="btn btn-primary">
    <input type="checkbox" autocomplete="off"> Checkbox 2
  </label>
  <label class="btn btn-primary">
    <input type="checkbox" autocomplete="off"> Checkbox 3
  </label>
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
</div>
{% endexample %}

{% example html %}
<div class="btn-group" data-toggle="buttons">
  <label class="btn btn-primary active">
    <input type="radio" name="options" id="option1" autocomplete="off" checked> Radio 1 (preselected)
  </label>
  <label class="btn btn-primary">
    <input type="radio" name="options" id="option2" autocomplete="off"> Radio 2
  </label>
  <label class="btn btn-primary">
    <input type="radio" name="options" id="option3" autocomplete="off"> Radio 3
  </label>
</div>
{% endexample %}

### Methods

Mark Otto's avatar
Mark Otto committed
186
187
188
| Method | Description |
| --- | --- |
| `$().button('toggle')` |Toggles push state. Gives the button the appearance that it has been activated.  |