forms.html 47 KB
Newer Older
Mark Otto's avatar
Mark Otto committed
1
2
3
4
5
<div class="bs-docs-section">
  <h1 id="forms" class="page-header">Forms</h1>

  <h2 id="forms-example">Basic example</h2>
  <p>Individual form controls automatically receive some global styling. All textual <code>&lt;input&gt;</code>, <code>&lt;textarea&gt;</code>, and <code>&lt;select&gt;</code> elements with <code>.form-control</code> are set to <code>width: 100%;</code> by default. Wrap labels and controls in <code>.form-group</code> for optimum spacing.</p>
6
  <div class="bs-example" data-example-id="basic-forms">
7
    <form>
Mark Otto's avatar
Mark Otto committed
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
      <div class="form-group">
        <label for="exampleInputEmail1">Email address</label>
        <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
      </div>
      <div class="form-group">
        <label for="exampleInputPassword1">Password</label>
        <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
      </div>
      <div class="form-group">
        <label for="exampleInputFile">File input</label>
        <input type="file" id="exampleInputFile">
        <p class="help-block">Example block-level help text here.</p>
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox"> Check me out
        </label>
      </div>
      <button type="submit" class="btn btn-default">Submit</button>
    </form>
  </div><!-- /example -->
{% highlight html %}
30
<form>
Mark Otto's avatar
Mark Otto committed
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter email">
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
  </div>
  <div class="form-group">
    <label for="exampleInputFile">File input</label>
    <input type="file" id="exampleInputFile">
    <p class="help-block">Example block-level help text here.</p>
  </div>
  <div class="checkbox">
    <label>
      <input type="checkbox"> Check me out
    </label>
  </div>
  <button type="submit" class="btn btn-default">Submit</button>
</form>
{% endhighlight %}
Chris Rebert's avatar
Chris Rebert committed
52
  <div class="bs-callout bs-callout-warning" id="callout-formgroup-inputgroup">
53
54
55
    <h4>Don't mix form groups with input groups</h4>
    <p>Do not mix form groups directly with <a href="/components/#input-groups">input groups</a>. Instead, nest the input group inside of the form group.</p>
  </div>
Mark Otto's avatar
Mark Otto committed
56
57
58


  <h2 id="forms-inline">Inline form</h2>
59
  <p>Add <code>.form-inline</code> to your form (which doesn't have to be a <code>&lt;form&gt;</code>) for left-aligned and inline-block controls. <strong>This only applies to forms within viewports that are at least 768px wide.</strong></p>
Chris Rebert's avatar
Chris Rebert committed
60
  <div class="bs-callout bs-callout-danger" id="callout-inline-form-width">
61
    <h4>May require custom widths</h4>
62
    <p>Inputs and selects have <code>width: 100%;</code> applied by default in Bootstrap. Within inline forms, we reset that to <code>width: auto;</code> so multiple controls can reside on the same line. Depending on your layout, additional custom widths may be required.</p>
Mark Otto's avatar
Mark Otto committed
63
  </div>
Chris Rebert's avatar
Chris Rebert committed
64
  <div class="bs-callout bs-callout-warning" id="callout-inline-form-labels">
Mark Otto's avatar
Mark Otto committed
65
    <h4>Always add labels</h4>
66
    <p>Screen readers will have trouble with your forms if you don't include a label for every input. For these inline forms, you can hide the labels using the <code>.sr-only</code> class. There are further alternative methods of providing a label for assistive technologies, such as the <code>aria-label</code>, <code>aria-labelledby</code> or <code>title</code> attribute. If none of these is present, screen readers may resort to using the <code>placeholder</code> attribute, if present, but note that use of <code>placeholder</code> as a replacement for other labelling methods is not advised.</p>
Mark Otto's avatar
Mark Otto committed
67
  </div>
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95

  <div class="bs-example" data-example-id="simple-form-inline">
    <form class="form-inline">
      <div class="form-group">
        <label for="exampleInputName2">Name</label>
        <input type="text" class="form-control" id="exampleInputName2" placeholder="Jane Doe">
      </div>
      <div class="form-group">
        <label for="exampleInputEmail2">Email</label>
        <input type="email" class="form-control" id="exampleInputEmail2" placeholder="jane.doe@example.com">
      </div>
      <button type="submit" class="btn btn-default">Send invitation</button>
    </form>
  </div><!-- /example -->
{% highlight html %}
<form class="form-inline">
  <div class="form-group">
    <label for="exampleInputName2">Name</label>
    <input type="text" class="form-control" id="exampleInputName2" placeholder="Jane Doe">
  </div>
  <div class="form-group">
    <label for="exampleInputEmail2">Email</label>
    <input type="email" class="form-control" id="exampleInputEmail2" placeholder="jane.doe@example.com">
  </div>
  <button type="submit" class="btn btn-default">Send invitation</button>
</form>
{% endhighlight %}

96
  <div class="bs-example" data-example-id="simple-form-inline">
97
    <form class="form-inline">
Mark Otto's avatar
Mark Otto committed
98
      <div class="form-group">
99
100
        <label class="sr-only" for="exampleInputEmail3">Email address</label>
        <input type="email" class="form-control" id="exampleInputEmail3" placeholder="Enter email">
Mark Otto's avatar
Mark Otto committed
101
102
      </div>
      <div class="form-group">
103
104
        <label class="sr-only" for="exampleInputPassword3">Password</label>
        <input type="password" class="form-control" id="exampleInputPassword3" placeholder="Password">
Mark Otto's avatar
Mark Otto committed
105
106
107
108
109
110
111
112
113
114
      </div>
      <div class="checkbox">
        <label>
          <input type="checkbox"> Remember me
        </label>
      </div>
      <button type="submit" class="btn btn-default">Sign in</button>
    </form>
  </div><!-- /example -->
{% highlight html %}
115
<form class="form-inline">
Mark Otto's avatar
Mark Otto committed
116
  <div class="form-group">
117
118
    <label class="sr-only" for="exampleInputEmail3">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail3" placeholder="Enter email">
Chris Rebert's avatar
Chris Rebert committed
119
  </div>
Mark Otto's avatar
Mark Otto committed
120
  <div class="form-group">
121
122
    <label class="sr-only" for="exampleInputPassword3">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword3" placeholder="Password">
Mark Otto's avatar
Mark Otto committed
123
124
125
126
127
128
129
130
131
132
  </div>
  <div class="checkbox">
    <label>
      <input type="checkbox"> Remember me
    </label>
  </div>
  <button type="submit" class="btn btn-default">Sign in</button>
</form>
{% endhighlight %}

133
  <div class="bs-example" data-example-id="form-inline-with-input-group">
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
    <form class="form-inline">
      <div class="form-group">
        <label class="sr-only" for="exampleInputAmount">Amount (in dollars)</label>
        <div class="input-group">
          <div class="input-group-addon">$</div>
          <input type="text" class="form-control" id="exampleInputAmount" placeholder="Amount">
          <div class="input-group-addon">.00</div>
        </div>
      </div>
      <button type="submit" class="btn btn-primary">Transfer cash</button>
    </form>
  </div><!-- /example -->
{% highlight html %}
<form class="form-inline">
  <div class="form-group">
    <label class="sr-only" for="exampleInputAmount">Amount (in dollars)</label>
    <div class="input-group">
      <div class="input-group-addon">$</div>
      <input type="text" class="form-control" id="exampleInputAmount" placeholder="Amount">
      <div class="input-group-addon">.00</div>
    </div>
  </div>
  <button type="submit" class="btn btn-primary">Transfer cash</button>
</form>
{% endhighlight %}
Mark Otto's avatar
Mark Otto committed
159
160

  <h2 id="forms-horizontal">Horizontal form</h2>
161
  <p>Use Bootstrap's predefined grid classes to align labels and groups of form controls in a horizontal layout by adding <code>.form-horizontal</code> to the form (which doesn't have to be a <code>&lt;form&gt;</code>). Doing so changes <code>.form-group</code>s to behave as grid rows, so no need for <code>.row</code>.</p>
162
  <div class="bs-example" data-example-id="simple-horizontal-form">
163
    <form class="form-horizontal">
Mark Otto's avatar
Mark Otto committed
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
      <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">Email</label>
        <div class="col-sm-10">
          <input type="email" class="form-control" id="inputEmail3" placeholder="Email">
        </div>
      </div>
      <div class="form-group">
        <label for="inputPassword3" class="col-sm-2 control-label">Password</label>
        <div class="col-sm-10">
          <input type="password" class="form-control" id="inputPassword3" placeholder="Password">
        </div>
      </div>
      <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
          <div class="checkbox">
            <label>
              <input type="checkbox"> Remember me
            </label>
          </div>
        </div>
      </div>
      <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
          <button type="submit" class="btn btn-default">Sign in</button>
        </div>
      </div>
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
193
<form class="form-horizontal">
Mark Otto's avatar
Mark Otto committed
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
  <div class="form-group">
    <label for="inputEmail3" class="col-sm-2 control-label">Email</label>
    <div class="col-sm-10">
      <input type="email" class="form-control" id="inputEmail3" placeholder="Email">
    </div>
  </div>
  <div class="form-group">
    <label for="inputPassword3" class="col-sm-2 control-label">Password</label>
    <div class="col-sm-10">
      <input type="password" class="form-control" id="inputPassword3" placeholder="Password">
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
      <div class="checkbox">
        <label>
          <input type="checkbox"> Remember me
        </label>
      </div>
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
      <button type="submit" class="btn btn-default">Sign in</button>
    </div>
  </div>
</form>
{% endhighlight %}


  <h2 id="forms-controls">Supported controls</h2>
  <p>Examples of standard form controls supported in an example form layout.</p>

  <h3>Inputs</h3>
  <p>Most common form control, text-based input fields. Includes support for all HTML5 types: <code>text</code>, <code>password</code>, <code>datetime</code>, <code>datetime-local</code>, <code>date</code>, <code>month</code>, <code>time</code>, <code>week</code>, <code>number</code>, <code>email</code>, <code>url</code>, <code>search</code>, <code>tel</code>, and <code>color</code>.</p>
Chris Rebert's avatar
Chris Rebert committed
229
  <div class="bs-callout bs-callout-danger" id="callout-input-needs-type">
Mark Otto's avatar
Mark Otto committed
230
231
232
    <h4>Type declaration required</h4>
    <p>Inputs will only be fully styled if their <code>type</code> is properly declared.</p>
  </div>
233
  <div class="bs-example" data-example-id="text-form-control">
234
    <form>
Mark Otto's avatar
Mark Otto committed
235
236
237
238
239
240
      <input type="text" class="form-control" placeholder="Text input">
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
<input type="text" class="form-control" placeholder="Text input">
{% endhighlight %}
Chris Rebert's avatar
Chris Rebert committed
241
  <div class="bs-callout bs-callout-info" id="callout-xref-input-group">
Mark Otto's avatar
Mark Otto committed
242
243
244
245
246
247
    <h4>Input groups</h4>
    <p>To add integrated text or buttons before and/or after any text-based <code>&lt;input&gt;</code>, <a href="../components/#input-groups">check out the input group component</a>.</p>
  </div>

  <h3>Textarea</h3>
  <p>Form control which supports multiple lines of text. Change <code>rows</code> attribute as necessary.</p>
248
  <div class="bs-example" data-example-id="textarea-form-control">
249
    <form>
250
      <textarea class="form-control" rows="3" placeholder="Textarea"></textarea>
Mark Otto's avatar
Mark Otto committed
251
252
253
254
255
256
257
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
<textarea class="form-control" rows="3"></textarea>
{% endhighlight %}

  <h3>Checkboxes and radios</h3>
Chris Rebert's avatar
Chris Rebert committed
258
259
  <p>Checkboxes are for selecting one or several options in a list, while radios are for selecting one option from many.</p>
  <p>A checkbox or radio with the <code>disabled</code> attribute will be styled appropriately. To have the <code>&lt;label&gt;</code> for the checkbox or radio also display a "not-allowed" cursor when the user hovers over the label, add the <code>.disabled</code> class to your <code>.radio</code>, <code>.radio-inline</code>, <code>.checkbox</code>, <code>.checkbox-inline</code>, or <code>&lt;fieldset&gt;</code>.</p>
Mark Otto's avatar
Mark Otto committed
260
  <h4>Default (stacked)</h4>
261
  <div class="bs-example" data-example-id="block-checkboxes-radios">
262
    <form>
Mark Otto's avatar
Mark Otto committed
263
264
265
266
267
268
      <div class="checkbox">
        <label>
          <input type="checkbox" value="">
          Option one is this and that&mdash;be sure to include why it's great
        </label>
      </div>
Chris Rebert's avatar
Chris Rebert committed
269
270
271
272
273
274
      <div class="checkbox disabled">
        <label>
          <input type="checkbox" value="" disabled>
          Option two is disabled
        </label>
      </div>
Mark Otto's avatar
Mark Otto committed
275
276
277
278
279
280
281
282
283
284
285
286
287
      <br>
      <div class="radio">
        <label>
          <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
          Option one is this and that&mdash;be sure to include why it's great
        </label>
      </div>
      <div class="radio">
        <label>
          <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2">
          Option two can be something else and selecting it will deselect option one
        </label>
      </div>
Chris Rebert's avatar
Chris Rebert committed
288
289
290
291
292
293
      <div class="radio disabled">
        <label>
          <input type="radio" name="optionsRadios" id="optionsRadios3" value="option3" disabled>
          Option three is disabled
        </label>
      </div>
Mark Otto's avatar
Mark Otto committed
294
295
296
297
298
299
300
301
302
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
<div class="checkbox">
  <label>
    <input type="checkbox" value="">
    Option one is this and that&mdash;be sure to include why it's great
  </label>
</div>
Chris Rebert's avatar
Chris Rebert committed
303
304
305
306
307
308
<div class="checkbox disabled">
  <label>
    <input type="checkbox" value="" disabled>
    Option two is disabled
  </label>
</div>
Mark Otto's avatar
Mark Otto committed
309
310
311
312
313
314
315
316
317
318
319
320
321

<div class="radio">
  <label>
    <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
    Option one is this and that&mdash;be sure to include why it's great
  </label>
</div>
<div class="radio">
  <label>
    <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2">
    Option two can be something else and selecting it will deselect option one
  </label>
</div>
Chris Rebert's avatar
Chris Rebert committed
322
323
324
325
326
327
<div class="radio disabled">
  <label>
    <input type="radio" name="optionsRadios" id="optionsRadios3" value="option3" disabled>
    Option three is disabled
  </label>
</div>
Mark Otto's avatar
Mark Otto committed
328
329
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
330
  <h4>Inline checkboxes and radios</h4>
Mark Otto's avatar
Mark Otto committed
331
  <p>Use the <code>.checkbox-inline</code> or <code>.radio-inline</code> classes on a series of checkboxes or radios for controls that appear on the same line.</p>
332
  <div class="bs-example" data-example-id="inline-checkboxes-radios">
333
    <form>
Mark Otto's avatar
Mark Otto committed
334
335
336
337
338
339
340
341
342
343
      <label class="checkbox-inline">
        <input type="checkbox" id="inlineCheckbox1" value="option1"> 1
      </label>
      <label class="checkbox-inline">
        <input type="checkbox" id="inlineCheckbox2" value="option2"> 2
      </label>
      <label class="checkbox-inline">
        <input type="checkbox" id="inlineCheckbox3" value="option3"> 3
      </label>
    </form>
Mark Otto's avatar
Mark Otto committed
344
    <br>
345
    <form>
Mark Otto's avatar
Mark Otto committed
346
347
348
349
350
351
352
353
354
355
      <label class="radio-inline">
        <input type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1"> 1
      </label>
      <label class="radio-inline">
        <input type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2"> 2
      </label>
      <label class="radio-inline">
        <input type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3"> 3
      </label>
    </form>
Mark Otto's avatar
Mark Otto committed
356
357
358
359
360
361
362
363
364
365
366
  </div><!-- /.bs-example -->
{% highlight html %}
<label class="checkbox-inline">
  <input type="checkbox" id="inlineCheckbox1" value="option1"> 1
</label>
<label class="checkbox-inline">
  <input type="checkbox" id="inlineCheckbox2" value="option2"> 2
</label>
<label class="checkbox-inline">
  <input type="checkbox" id="inlineCheckbox3" value="option3"> 3
</label>
Mark Otto's avatar
Mark Otto committed
367
368
369
370
371
372
373
374
375
376

<label class="radio-inline">
  <input type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1"> 1
</label>
<label class="radio-inline">
  <input type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2"> 2
</label>
<label class="radio-inline">
  <input type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3"> 3
</label>
377
378
{% endhighlight %}

379
380
  <h4>Checkboxes and radios without label text</h4>
  <p>Should you have no text within the <code>&lt;label&gt;</code>, the input is positioned as you'd expect. <strong>Currently only works on non-inline checkboxes and radios.</strong> Remember to still provide some form of label for assistive technologies (for instance, using <code>aria-label</code>).</p>
381
  <div class="bs-example" data-example-id="checkboxes-radios-without-labels">
382
    <form>
383
384
      <div class="checkbox">
        <label>
385
          <input type="checkbox" id="blankCheckbox" value="option1" aria-label="Checkbox without label text">
386
387
388
389
        </label>
      </div>
      <div class="radio">
        <label>
390
          <input type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="Radio button without label text">
391
392
393
394
395
396
397
        </label>
      </div>
    </form>
  </div>
{% highlight html %}
<div class="checkbox">
  <label>
398
    <input type="checkbox" id="blankCheckbox" value="option1" aria-label="...">
399
400
401
402
  </label>
</div>
<div class="radio">
  <label>
403
    <input type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="...">
404
405
  </label>
</div>
Mark Otto's avatar
Mark Otto committed
406
407
408
{% endhighlight %}

  <h3>Selects</h3>
409
  <p>Note that many native select menus—namely in Safari and Chrome—have rounded corners that cannot be modified via <code>border-radius</code> properties.</p>
410
  <div class="bs-example" data-example-ids="select-form-control">
411
    <form>
Mark Otto's avatar
Mark Otto committed
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
      <select class="form-control">
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
        <option>5</option>
      </select>
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
<select class="form-control">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
  <option>5</option>
</select>
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
{% endhighlight %}

  <p>For <code>&lt;select&gt;</code> controls with the <code>multiple</code> attribute, multiple options are shown by default.</p>

  <div class="bs-example" data-example-ids="select-multiple-form-control">
    <form>
      <select multiple class="form-control">
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
        <option>5</option>
      </select>
    </form>
  </div><!-- /.bs-example -->
Mark Otto's avatar
Mark Otto committed
444

445
{% highlight html %}
Mark Otto's avatar
Mark Otto committed
446
447
448
449
450
451
452
453
454
455
456
<select multiple class="form-control">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
  <option>5</option>
</select>
{% endhighlight %}


  <h2 id="forms-controls-static">Static control</h2>
457
  <p>When you need to place plain text next to a form label within a form, use the <code>.form-control-static</code> class on a <code>&lt;p&gt;</code>.</p>
458
  <div class="bs-example" data-example-id="horizontal-static-form-control">
459
    <form class="form-horizontal">
Mark Otto's avatar
Mark Otto committed
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
      <div class="form-group">
        <label class="col-sm-2 control-label">Email</label>
        <div class="col-sm-10">
          <p class="form-control-static">email@example.com</p>
        </div>
      </div>
      <div class="form-group">
        <label for="inputPassword" class="col-sm-2 control-label">Password</label>
        <div class="col-sm-10">
          <input type="password" class="form-control" id="inputPassword" placeholder="Password">
        </div>
      </div>
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
475
<form class="form-horizontal">
Mark Otto's avatar
Mark Otto committed
476
477
478
479
480
481
482
483
484
485
486
487
488
  <div class="form-group">
    <label class="col-sm-2 control-label">Email</label>
    <div class="col-sm-10">
      <p class="form-control-static">email@example.com</p>
    </div>
  </div>
  <div class="form-group">
    <label for="inputPassword" class="col-sm-2 control-label">Password</label>
    <div class="col-sm-10">
      <input type="password" class="form-control" id="inputPassword" placeholder="Password">
    </div>
  </div>
</form>
489
{% endhighlight %}
490
  <div class="bs-example" data-example-id="inline-static-form-control">
491
    <form class="form-inline">
492
493
494
495
496
497
498
499
500
501
502
503
      <div class="form-group">
        <label class="sr-only">Email</label>
        <p class="form-control-static">email@example.com</p>
      </div>
      <div class="form-group">
        <label for="inputPassword2" class="sr-only">Password</label>
        <input type="password" class="form-control" id="inputPassword2" placeholder="Password">
      </div>
      <button type="submit" class="btn btn-default">Confirm identity</button>
    </form>
  </div>
{% highlight html %}
504
<form class="form-inline">
505
506
507
508
509
510
511
512
513
514
  <div class="form-group">
    <label class="sr-only">Email</label>
    <p class="form-control-static">email@example.com</p>
  </div>
  <div class="form-group">
    <label for="inputPassword2" class="sr-only">Password</label>
    <input type="password" class="form-control" id="inputPassword2" placeholder="Password">
  </div>
  <button type="submit" class="btn btn-default">Confirm identity</button>
</form>
Mark Otto's avatar
Mark Otto committed
515
516
{% endhighlight %}

517
  <h2 id="forms-control-focus">Focus state</h2>
Mark Otto's avatar
Mark Otto committed
518
519
  <p>We remove the default <code>outline</code> styles on some form controls and apply a <code>box-shadow</code> in its place for <code>:focus</code>.</p>
  <div class="bs-example">
520
    <form>
Mark Otto's avatar
Mark Otto committed
521
522
523
      <input class="form-control" id="focusedInput" type="text" value="Demonstrative focus state">
    </form>
  </div>
Chris Rebert's avatar
Chris Rebert committed
524
  <div class="bs-callout bs-callout-info" id="callout-focus-demo">
Mark Otto's avatar
Mark Otto committed
525
526
527
528
529
    <h4>Demo <code>:focus</code> state</h4>
    <p>The above example input uses custom styles in our documentation to demonstrate the <code>:focus</code> state on a <code>.form-control</code>.</p>
  </div>


530
  <h2 id="forms-control-disabled">Disabled state</h2>
531
  <p>Add the <code>disabled</code> boolean attribute on an input to prevent user interactions. Disabled inputs appear lighter and add a <code>not-allowed</code> cursor.</p>
532
  <div class="bs-example" data-example-id="text-form-control-disabled">
533
    <form>
Mark Otto's avatar
Mark Otto committed
534
535
536
537
538
539
540
541
542
543
      <input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here…" disabled>
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
<input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here..." disabled>
{% endhighlight %}

  <h3 id="forms-disabled-fieldsets">Disabled fieldsets</h3>
  <p>Add the <code>disabled</code> attribute to a <code>&lt;fieldset&gt;</code> to disable all the controls within the <code>&lt;fieldset&gt;</code> at once.</p>

Chris Rebert's avatar
Chris Rebert committed
544
  <div class="bs-callout bs-callout-warning" id="callout-fieldset-disabled-pointer-events">
Mark Otto's avatar
Mark Otto committed
545
    <h4>Caveat about link functionality of <code>&lt;a&gt;</code></h4>
546
    <p>By default, browsers will treat all native form controls (<code>&lt;input&gt;</code>, <code>&lt;select&gt;</code> and <code>&lt;button&gt;</code> elements) inside a <code>&lt;fieldset disabled&gt;</code> as disabled, preventing both keyboard and mouse interactions on them. However, if your form also includes <code>&lt;a ... class="btn btn-*"&gt;</code> elements, these will only be given a style of <code>pointer-events: none</code>. As noted in the section about <a href="#buttons-disabled">disabled state for buttons</a> (and specifically in the sub-section for anchor elements), this CSS property is not yet standardized and isn't fully supported in Opera 18 and below, or in Internet Explorer 11, and won't prevent keyboard users from being able to focus or activate these links. So to be safe, use custom JavaScript to disable such links.</p>
Mark Otto's avatar
Mark Otto committed
547
548
  </div>

Chris Rebert's avatar
Chris Rebert committed
549
  <div class="bs-callout bs-callout-danger" id="callout-fieldset-disabled-ie">
Mark Otto's avatar
Mark Otto committed
550
    <h4>Cross-browser compatibility</h4>
551
    <p>While Bootstrap will apply these styles in all browsers, Internet Explorer 11 and below don't fully support the <code>disabled</code> attribute on a <code>&lt;fieldset&gt;</code>. Use custom JavaScript to disable the fieldset in these browsers.</p>
Mark Otto's avatar
Mark Otto committed
552
553
  </div>

554
  <div class="bs-example" data-example-id="disabled-fieldset">
555
    <form>
Mark Otto's avatar
Mark Otto committed
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
      <fieldset disabled>
        <div class="form-group">
          <label for="disabledTextInput">Disabled input</label>
          <input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
        </div>
        <div class="form-group">
          <label for="disabledSelect">Disabled select menu</label>
          <select id="disabledSelect" class="form-control">
            <option>Disabled select</option>
          </select>
        </div>
        <div class="checkbox">
          <label>
            <input type="checkbox"> Can't check this
          </label>
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
      </fieldset>
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
577
<form>
Mark Otto's avatar
Mark Otto committed
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
  <fieldset disabled>
    <div class="form-group">
      <label for="disabledTextInput">Disabled input</label>
      <input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
    </div>
    <div class="form-group">
      <label for="disabledSelect">Disabled select menu</label>
      <select id="disabledSelect" class="form-control">
        <option>Disabled select</option>
      </select>
    </div>
    <div class="checkbox">
      <label>
        <input type="checkbox"> Can't check this
      </label>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
  </fieldset>
</form>
{% endhighlight %}


600
  <h2 id="forms-control-readonly">Readonly state</h2>
601
  <p>Add the <code>readonly</code> boolean attribute on an input to prevent modification of the input's value. Read-only inputs appear lighter (just like disabled inputs), but retain the standard cursor.</p>
602
  <div class="bs-example" data-example-id="readonly-text-form-control">
603
    <form>
Mark Otto's avatar
Mark Otto committed
604
605
606
607
608
609
610
611
612
613
614
      <input class="form-control" type="text" placeholder="Readonly input here…" readonly>
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
<input class="form-control" type="text" placeholder="Readonly input here…" readonly>
{% endhighlight %}


  <h2 id="forms-control-validation">Validation states</h2>
  <p>Bootstrap includes validation styles for error, warning, and success states on form controls. To use, add <code>.has-warning</code>, <code>.has-error</code>, or <code>.has-success</code> to the parent element. Any <code>.control-label</code>, <code>.form-control</code>, and <code>.help-block</code> within that element will receive the validation styles.</p>

Chris Rebert's avatar
Chris Rebert committed
615
  <div class="bs-callout bs-callout-warning" id="callout-form-validation-state-accessibility">
616
617
618
619
620
    <h4>Conveying validation state to assistive technologies</h4>
    <p>Using these validation styles to denote the state of a form control only provides a visual indication, which will not be conveyed to users of assistive technologies – such as screen readers.</p>
    <p>Ensure that an alternative indication of state is also provided. For instance, you can include a hint about state in the form control's <code>&lt;label&gt;</code> text itself (as is the case in the following code example), or associate an additional element with textual information about the validation state with the form control using <code>aria-describedby</code> (see the example in the following section). In the case of an error, you could also use the <code>aria-invalid="true"</code> attribute on the form control.</p>
  </div>

621
  <div class="bs-example" data-example-id="form-validation-states">
622
    <form>
Mark Otto's avatar
Mark Otto committed
623
624
625
626
627
628
629
630
631
632
633
634
      <div class="form-group has-success">
        <label class="control-label" for="inputSuccess1">Input with success</label>
        <input type="text" class="form-control" id="inputSuccess1">
      </div>
      <div class="form-group has-warning">
        <label class="control-label" for="inputWarning1">Input with warning</label>
        <input type="text" class="form-control" id="inputWarning1">
      </div>
      <div class="form-group has-error">
        <label class="control-label" for="inputError1">Input with error</label>
        <input type="text" class="form-control" id="inputError1">
      </div>
Mark Otto's avatar
Mark Otto committed
635
636
637
      <div class="has-success">
        <div class="checkbox">
          <label>
Mark Otto's avatar
Mark Otto committed
638
            <input type="checkbox" id="checkboxSuccess" value="option1">
Mark Otto's avatar
Mark Otto committed
639
            Checkbox with success
640
641
642
          </label>
        </div>
      </div>
Mark Otto's avatar
Mark Otto committed
643
644
      <div class="has-warning">
        <div class="checkbox">
645
          <label>
Mark Otto's avatar
Mark Otto committed
646
            <input type="checkbox" id="checkboxWarning" value="option1">
Mark Otto's avatar
Mark Otto committed
647
            Checkbox with warning
648
649
          </label>
        </div>
Mark Otto's avatar
Mark Otto committed
650
651
652
      </div>
      <div class="has-error">
        <div class="checkbox">
653
          <label>
Mark Otto's avatar
Mark Otto committed
654
655
            <input type="checkbox" id="checkboxError" value="option1">
            Checkbox with error
656
657
658
          </label>
        </div>
      </div>
Mark Otto's avatar
Mark Otto committed
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
<div class="form-group has-success">
  <label class="control-label" for="inputSuccess1">Input with success</label>
  <input type="text" class="form-control" id="inputSuccess1">
</div>
<div class="form-group has-warning">
  <label class="control-label" for="inputWarning1">Input with warning</label>
  <input type="text" class="form-control" id="inputWarning1">
</div>
<div class="form-group has-error">
  <label class="control-label" for="inputError1">Input with error</label>
  <input type="text" class="form-control" id="inputError1">
</div>
Mark Otto's avatar
Mark Otto committed
674
675
676
<div class="has-success">
  <div class="checkbox">
    <label>
Mark Otto's avatar
Mark Otto committed
677
      <input type="checkbox" id="checkboxSuccess" value="option1">
Mark Otto's avatar
Mark Otto committed
678
      Checkbox with success
679
680
681
    </label>
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
682
683
<div class="has-warning">
  <div class="checkbox">
684
    <label>
Mark Otto's avatar
Mark Otto committed
685
      <input type="checkbox" id="checkboxWarning" value="option1">
Mark Otto's avatar
Mark Otto committed
686
      Checkbox with warning
687
688
    </label>
  </div>
Mark Otto's avatar
Mark Otto committed
689
690
691
</div>
<div class="has-error">
  <div class="checkbox">
692
    <label>
Mark Otto's avatar
Mark Otto committed
693
694
      <input type="checkbox" id="checkboxError" value="option1">
      Checkbox with error
695
696
697
    </label>
  </div>
</div>
Mark Otto's avatar
Mark Otto committed
698
699
700
701
{% endhighlight %}

  <h3>With optional icons</h3>
  <p>You can also add optional feedback icons with the addition of <code>.has-feedback</code> and the right icon.</p>
702
  <p><strong class="text-danger">Feedback icons only work with textual <code>&lt;input class="form-control"&gt;</code> elements.</strong></p>
Chris Rebert's avatar
Chris Rebert committed
703
  <div class="bs-callout bs-callout-warning" id="callout-has-feedback-icon-positioning">
Mark Otto's avatar
Mark Otto committed
704
    <h4>Icons, labels, and input groups</h4>
705
    <p>Manual positioning of feedback icons is required for inputs without a label and for <a href="../components#input-groups">input groups</a> with an add-on on the right. You are strongly encouraged to provide labels for all inputs for accessibility reasons. If you wish to prevent labels from being displayed, hide them with the <code>.sr-only</code> class. If you must do without labels, adjust the <code>top</code> value of the feedback icon. For input groups, adjust the <code>right</code> value to an appropriate pixel value depending on the width of your addon.</p>
Mark Otto's avatar
Mark Otto committed
706
  </div>
Chris Rebert's avatar
Chris Rebert committed
707
  <div class="bs-callout bs-callout-warning" id="callout-has-feedback-icon-accessibility">
708
    <h4>Conveying the icon's meaning to assistive technologies</h4>
709
710
    <p>To ensure that assistive technologies – such as screen readers – correctly convey the meaning of an icon, additional hidden text should be included with the <code>.sr-only</code> class and explicitly associated with the form control it relates to using <code>aria-describedby</code>. Alternatively, ensure that the meaning (for instance, the fact that there is a warning for a particular text entry field) is conveyed in some other form, such as changing the text of the actual <code>&lt;label&gt;</code> associated with the form control.</p>
    <p>Although the following examples already mention the validation state of their respective form controls in the <code>&lt;label&gt;</code> text itself, the above technique (using <code>.sr-only</code> text and <code>aria-describedby</code>) has been included for illustrative purposes.</p>
711
  </div>
712
  <div class="bs-example" data-example-id="form-validation-states-with-icons">
713
    <form>
Mark Otto's avatar
Mark Otto committed
714
715
      <div class="form-group has-success has-feedback">
        <label class="control-label" for="inputSuccess2">Input with success</label>
716
717
718
        <input type="text" class="form-control" id="inputSuccess2" aria-describedby="inputSuccess2Status">
        <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
        <span id="inputSuccess2Status" class="sr-only">(success)</span>
Mark Otto's avatar
Mark Otto committed
719
720
721
      </div>
      <div class="form-group has-warning has-feedback">
        <label class="control-label" for="inputWarning2">Input with warning</label>
722
723
724
        <input type="text" class="form-control" id="inputWarning2" aria-describedby="inputWarning2Status">
        <span class="glyphicon glyphicon-warning-sign form-control-feedback" aria-hidden="true"></span>
        <span id="inputWarning2Status" class="sr-only">(warning)</span>
Mark Otto's avatar
Mark Otto committed
725
726
727
      </div>
      <div class="form-group has-error has-feedback">
        <label class="control-label" for="inputError2">Input with error</label>
728
729
730
        <input type="text" class="form-control" id="inputError2" aria-describedby="inputError2Status">
        <span class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
        <span id="inputError2Status" class="sr-only">(error)</span>
Mark Otto's avatar
Mark Otto committed
731
      </div>
732
733
734
735
736
737
738
739
740
      <div class="form-group has-success has-feedback">
        <label class="control-label" for="inputGroupSuccess1">Input group with success</label>
        <div class="input-group">
          <span class="input-group-addon">@</span>
          <input type="text" class="form-control" id="inputGroupSuccess1" aria-describedby="inputGroupSuccess1Status">
        </div>
        <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
        <span id="inputGroupSuccess1Status" class="sr-only">(success)</span>
      </div>
Mark Otto's avatar
Mark Otto committed
741
742
743
744
745
    </form>
  </div>
{% highlight html %}
<div class="form-group has-success has-feedback">
  <label class="control-label" for="inputSuccess2">Input with success</label>
746
747
748
  <input type="text" class="form-control" id="inputSuccess2" aria-describedby="inputSuccess2Status">
  <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
  <span id="inputSuccess2Status" class="sr-only">(success)</span>
Mark Otto's avatar
Mark Otto committed
749
750
751
</div>
<div class="form-group has-warning has-feedback">
  <label class="control-label" for="inputWarning2">Input with warning</label>
752
753
754
  <input type="text" class="form-control" id="inputWarning2" aria-describedby="inputWarning2Status">
  <span class="glyphicon glyphicon-warning-sign form-control-feedback" aria-hidden="true"></span>
  <span id="inputWarning2Status" class="sr-only">(warning)</span>
Mark Otto's avatar
Mark Otto committed
755
756
757
</div>
<div class="form-group has-error has-feedback">
  <label class="control-label" for="inputError2">Input with error</label>
758
759
760
  <input type="text" class="form-control" id="inputError2" aria-describedby="inputError2Status">
  <span class="glyphicon glyphicon-remove form-control-feedback" aria-hidden="true"></span>
  <span id="inputError2Status" class="sr-only">(error)</span>
Mark Otto's avatar
Mark Otto committed
761
</div>
762
763
764
765
766
767
768
769
770
<div class="form-group has-success has-feedback">
  <label class="control-label" for="inputGroupSuccess1">Input group with success</label>
  <div class="input-group">
    <span class="input-group-addon">@</span>
    <input type="text" class="form-control" id="inputGroupSuccess1" aria-describedby="inputGroupSuccess1Status">
  </div>
  <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
  <span id="inputGroupSuccess1Status" class="sr-only">(success)</span>
</div>
Mark Otto's avatar
Mark Otto committed
771
772
{% endhighlight %}

773
  <h4>Optional icons in horizontal and inline forms</h4>
774
  <div class="bs-example" data-example-id="horizontal-form-validation-state-with-icon">
775
    <form class="form-horizontal">
Mark Otto's avatar
Mark Otto committed
776
777
778
      <div class="form-group has-success has-feedback">
        <label class="control-label col-sm-3" for="inputSuccess3">Input with success</label>
        <div class="col-sm-9">
779
780
781
          <input type="text" class="form-control" id="inputSuccess3" aria-describedby="inputSuccess3Status">
          <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
          <span id="inputSuccess3Status" class="sr-only">(success)</span>
Mark Otto's avatar
Mark Otto committed
782
783
        </div>
      </div>
784
785
786
787
788
789
790
791
792
793
794
      <div class="form-group has-success has-feedback">
        <label class="control-label col-sm-3" for="inputGroupSuccess2">Input group with success</label>
        <div class="col-sm-9">
          <div class="input-group">
            <span class="input-group-addon">@</span>
            <input type="text" class="form-control" id="inputGroupSuccess2" aria-describedby="inputGroupSuccess2Status">
          </div>
          <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
          <span id="inputGroupSuccess2Status" class="sr-only">(success)</span>
        </div>
      </div>
Mark Otto's avatar
Mark Otto committed
795
796
797
    </form>
  </div>
{% highlight html %}
798
<form class="form-horizontal">
Mark Otto's avatar
Mark Otto committed
799
800
801
  <div class="form-group has-success has-feedback">
    <label class="control-label col-sm-3" for="inputSuccess3">Input with success</label>
    <div class="col-sm-9">
802
803
804
      <input type="text" class="form-control" id="inputSuccess3" aria-describedby="inputSuccess3Status">
      <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
      <span id="inputSuccess3Status" class="sr-only">(success)</span>
Mark Otto's avatar
Mark Otto committed
805
806
    </div>
  </div>
807
808
809
810
811
812
813
814
815
816
817
  <div class="form-group has-success has-feedback">
    <label class="control-label col-sm-3" for="inputGroupSuccess2">Input group with success</label>
    <div class="col-sm-9">
      <div class="input-group">
        <span class="input-group-addon">@</span>
        <input type="text" class="form-control" id="inputGroupSuccess2" aria-describedby="inputGroupSuccess2Status">
      </div>
      <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
      <span id="inputGroupSuccess2Status" class="sr-only">(success)</span>
    </div>
  </div>
Mark Otto's avatar
Mark Otto committed
818
819
820
</form>
{% endhighlight %}

821
  <div class="bs-example" data-example-id="inline-form-validation-state-with-icon">
822
    <form class="form-inline">
Mark Otto's avatar
Mark Otto committed
823
824
      <div class="form-group has-success has-feedback">
        <label class="control-label" for="inputSuccess4">Input with success</label>
825
826
827
        <input type="text" class="form-control" id="inputSuccess4" aria-describedby="inputSuccess4Status">
        <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
        <span id="inputSuccess4Status" class="sr-only">(success)</span>
Mark Otto's avatar
Mark Otto committed
828
829
      </div>
    </form>
830
831
832
833
834
835
836
837
838
839
840
841
    <br>
    <form class="form-inline">
      <div class="form-group has-success has-feedback">
        <label class="control-label" for="inputGroupSuccess3">Input group with success</label>
        <div class="input-group">
          <span class="input-group-addon">@</span>
          <input type="text" class="form-control" id="inputGroupSuccess3" aria-describedby="inputGroupSuccess3Status">
        </div>
        <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
        <span id="inputGroupSuccess3Status" class="sr-only">(success)</span>
      </div>
    </form>
Mark Otto's avatar
Mark Otto committed
842
843
  </div>
{% highlight html %}
844
<form class="form-inline">
Mark Otto's avatar
Mark Otto committed
845
846
  <div class="form-group has-success has-feedback">
    <label class="control-label" for="inputSuccess4">Input with success</label>
847
848
849
    <input type="text" class="form-control" id="inputSuccess4" aria-describedby="inputSuccess4Status">
    <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
    <span id="inputSuccess4Status" class="sr-only">(success)</span>
Mark Otto's avatar
Mark Otto committed
850
851
  </div>
</form>
852
853
854
855
856
857
858
859
860
861
862
<form class="form-inline">
  <div class="form-group has-success has-feedback">
    <label class="control-label" for="inputGroupSuccess3">Input group with success</label>
    <div class="input-group">
      <span class="input-group-addon">@</span>
      <input type="text" class="form-control" id="inputGroupSuccess3" aria-describedby="inputGroupSuccess3Status">
    </div>
    <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
    <span id="inputGroupSuccess3Status" class="sr-only">(success)</span>
  </div>
</form>
Mark Otto's avatar
Mark Otto committed
863
864
{% endhighlight %}

865
  <h4>Optional icons with hidden <code>.sr-only</code> labels</h4>
866
  <p>If you use the <code>.sr-only</code> class to hide a form control's <code>&lt;label&gt;</code> (rather than using other labelling options, such as the <code>aria-label</code> attribute), Bootstrap will automatically adjust the position of the icon once it's been added.</p>
867
  <div class="bs-example" data-example-id="form-validation-state-with-icon-without-label">
868
869
    <div class="form-group has-success has-feedback">
      <label class="control-label sr-only" for="inputSuccess5">Hidden label</label>
870
871
872
      <input type="text" class="form-control" id="inputSuccess5" aria-describedby="inputSuccess5Status">
      <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
      <span id="inputSuccess5Status" class="sr-only">(success)</span>
873
    </div>
874
875
876
877
878
879
880
881
882
    <div class="form-group has-success has-feedback">
      <label class="control-label sr-only" for="inputGroupSuccess4">Input group with success</label>
      <div class="input-group">
        <span class="input-group-addon">@</span>
        <input type="text" class="form-control" id="inputGroupSuccess4" aria-describedby="inputGroupSuccess4Status">
      </div>
      <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
      <span id="inputGroupSuccess4Status" class="sr-only">(success)</span>
    </div>
883
884
885
886
  </div>
{% highlight html %}
<div class="form-group has-success has-feedback">
  <label class="control-label sr-only" for="inputSuccess5">Hidden label</label>
887
888
889
  <input type="text" class="form-control" id="inputSuccess5" aria-describedby="inputSuccess5Status">
  <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
  <span id="inputSuccess5Status" class="sr-only">(success)</span>
890
</div>
891
892
893
894
895
896
897
898
899
<div class="form-group has-success has-feedback">
  <label class="control-label sr-only" for="inputGroupSuccess4">Input group with success</label>
  <div class="input-group">
    <span class="input-group-addon">@</span>
    <input type="text" class="form-control" id="inputGroupSuccess4" aria-describedby="inputGroupSuccess4Status">
  </div>
  <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
  <span id="inputGroupSuccess4Status" class="sr-only">(success)</span>
</div>
900
901
{% endhighlight %}

Mark Otto's avatar
Mark Otto committed
902
903
904
905
906
907

  <h2 id="forms-control-sizes">Control sizing</h2>
  <p>Set heights using classes like <code>.input-lg</code>, and set widths using grid column classes like <code>.col-lg-*</code>.</p>

  <h3>Height sizing</h3>
  <p>Create taller or shorter form controls that match button sizes.</p>
908
  <div class="bs-example bs-example-control-sizing" data-example-id="form-control-height-sizes">
909
    <form>
Mark Otto's avatar
Mark Otto committed
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
      <div class="controls">
        <input class="form-control input-lg" type="text" placeholder=".input-lg">
        <input type="text" class="form-control" placeholder="Default input">
        <input class="form-control input-sm" type="text" placeholder=".input-sm">

        <select class="form-control input-lg">
          <option value="">.input-lg</option>
        </select>
        <select class="form-control">
          <option value="">Default select</option>
        </select>
        <select class="form-control input-sm">
          <option value="">.input-sm</option>
        </select>
      </div>
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
<input class="form-control input-lg" type="text" placeholder=".input-lg">
<input class="form-control" type="text" placeholder="Default input">
<input class="form-control input-sm" type="text" placeholder=".input-sm">

<select class="form-control input-lg">...</select>
<select class="form-control">...</select>
<select class="form-control input-sm">...</select>
{% endhighlight %}

937
938
  <h3>Horizontal form group sizes</h3>
  <p>Quickly size labels and form controls within <code>.form-horizontal</code> by adding <code>.form-group-lg</code> or <code>.form-group-sm</code>.</p>
939
  <div class="bs-example" data-example-id="form-group-height-sizes">
940
    <form class="form-horizontal">
941
942
943
      <div class="form-group form-group-lg">
        <label class="col-sm-2 control-label" for="formGroupInputLarge">Large label</label>
        <div class="col-sm-10">
Mark Otto's avatar
Mark Otto committed
944
          <input class="form-control" type="text" id="formGroupInputLarge" placeholder="Large input">
945
946
947
948
949
        </div>
      </div>
      <div class="form-group form-group-sm">
        <label class="col-sm-2 control-label" for="formGroupInputSmall">Small label</label>
        <div class="col-sm-10">
Mark Otto's avatar
Mark Otto committed
950
          <input class="form-control" type="text" id="formGroupInputSmall" placeholder="Small input">
951
952
953
954
955
        </div>
      </div>
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
956
<form class="form-horizontal">
957
958
959
  <div class="form-group form-group-lg">
    <label class="col-sm-2 control-label" for="formGroupInputLarge">Large label</label>
    <div class="col-sm-10">
Mark Otto's avatar
Mark Otto committed
960
      <input class="form-control" type="text" id="formGroupInputLarge" placeholder="Large input">
961
962
963
964
965
    </div>
  </div>
  <div class="form-group form-group-sm">
    <label class="col-sm-2 control-label" for="formGroupInputSmall">Small label</label>
    <div class="col-sm-10">
Mark Otto's avatar
Mark Otto committed
966
      <input class="form-control" type="text" id="formGroupInputSmall" placeholder="Small input">
967
968
969
970
971
972
    </div>
  </div>
</form>
{% endhighlight %}


Mark Otto's avatar
Mark Otto committed
973
974
  <h3>Column sizing</h3>
  <p>Wrap inputs in grid columns, or any custom parent element, to easily enforce desired widths.</p>
975
  <div class="bs-example" data-example-id="form-control-column-sizing">
976
    <form>
Mark Otto's avatar
Mark Otto committed
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
      <div class="row">
        <div class="col-xs-2">
          <input type="text" class="form-control" placeholder=".col-xs-2">
        </div>
        <div class="col-xs-3">
          <input type="text" class="form-control" placeholder=".col-xs-3">
        </div>
        <div class="col-xs-4">
          <input type="text" class="form-control" placeholder=".col-xs-4">
        </div>
      </div>
    </form>
  </div><!-- /.bs-example -->
{% highlight html %}
<div class="row">
  <div class="col-xs-2">
    <input type="text" class="form-control" placeholder=".col-xs-2">
  </div>
  <div class="col-xs-3">
    <input type="text" class="form-control" placeholder=".col-xs-3">
  </div>
  <div class="col-xs-4">
    <input type="text" class="form-control" placeholder=".col-xs-4">
  </div>
For faster browsing, not all history is shown. View entire blame