[skip ci] bs4 docs sync

This commit is contained in:
Kevin Ross 2016-07-26 10:32:37 -05:00
parent fbaec07922
commit 82e426917a
15 changed files with 854 additions and 157 deletions

View File

@ -4,6 +4,7 @@ module Jekyll
upstream_map = { upstream_map = {
"Bootstrap" => "https://github.com/twbs/bootstrap/issues/", "Bootstrap" => "https://github.com/twbs/bootstrap/issues/",
"Edge" => ["https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/", "Edge issue"], "Edge" => ["https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/", "Edge issue"],
"UserVoice" => ["https://wpdev.uservoice.com/forums/257854-microsoft-edge-developer/suggestions/", "Edge UserVoice idea"],
"Mozilla" => ["https://bugzilla.mozilla.org/show_bug.cgi?id=", "Mozilla bug"], "Mozilla" => ["https://bugzilla.mozilla.org/show_bug.cgi?id=", "Mozilla bug"],
"Chromium" => ["https://bugs.chromium.org/p/chromium/issues/detail?id=", "Chromium issue"], "Chromium" => ["https://bugs.chromium.org/p/chromium/issues/detail?id=", "Chromium issue"],
"WebKit" => ["https://bugs.webkit.org/show_bug.cgi?id=", "WebKit bug"], "WebKit" => ["https://bugs.webkit.org/show_bug.cgi?id=", "WebKit bug"],

View File

@ -27,14 +27,14 @@ module Jekyll
@options[key.to_sym] = value || true @options[key.to_sym] = value || true
end end
end end
@options[:linenos] = "inline" if @options.key?(:linenos) and @options[:linenos] == true @options[:linenos] = false
else else
raise SyntaxError.new <<-eos raise SyntaxError.new <<-eos
Syntax Error in tag 'highlight' while parsing the following markup: Syntax Error in tag 'example' while parsing the following markup:
#{markup} #{markup}
Valid syntax: highlight <lang> [linenos] Valid syntax: example <lang>
eos eos
end end
end end

View File

@ -2,7 +2,7 @@
// clipboard.js // clipboard.js
// //
// Flash-based `Copy` buttons for code snippets. // JS-based `Copy` buttons for code snippets.
.bd-clipboard { .bd-clipboard {
position: relative; position: relative;

View File

@ -130,6 +130,10 @@
position: static; position: static;
display: block; display: block;
} }
> .form-group:last-child {
margin-bottom: 0;
}
} }
.bd-example > .close { .bd-example > .close {

View File

@ -5,6 +5,9 @@
// //
.bd-navbar { .bd-navbar {
padding-right: 0;
padding-left: 0;
.navbar-nav { .navbar-nav {
.nav-link { .nav-link {
color: $bd-graphite-light; color: $bd-graphite-light;

View File

@ -38,6 +38,7 @@
margin-top: .25rem; margin-top: .25rem;
} }
.responsive-utilities-test .col-xs-6 { .responsive-utilities-test .col-xs-6 {
margin-top: .5rem;
margin-bottom: .5rem; margin-bottom: .5rem;
} }
.responsive-utilities-test span { .responsive-utilities-test span {

View File

@ -63,6 +63,8 @@ Cards support a wide variety of content, including images, text, list groups, li
</div> </div>
{% endexample %} {% endexample %}
Lists can be added to a card by adding a list group.
{% example html %} {% example html %}
<div class="card"> <div class="card">
<ul class="list-group list-group-flush"> <ul class="list-group list-group-flush">
@ -73,6 +75,8 @@ Cards support a wide variety of content, including images, text, list groups, li
</div> </div>
{% endexample %} {% endexample %}
`.card-img-top` places an image to the top of the card. With `.card-text`, text can be added to the card. Text within `.card-text` can also be styled with the standard HTML tags.
{% example html %} {% example html %}
<div class="card"> <div class="card">
<img class="card-img-top" data-src="holder.js/100px180/?text=Image cap" alt="Card image cap"> <img class="card-img-top" data-src="holder.js/100px180/?text=Image cap" alt="Card image cap">
@ -82,6 +86,8 @@ Cards support a wide variety of content, including images, text, list groups, li
</div> </div>
{% endexample %} {% endexample %}
Card titles are used by adding `.card-title` to a `<h*>` tag. In the same way, links are added and placed next to each other by adding `.card-link` to a `<a>` tag.
{% example html %} {% example html %}
<div class="card card-block"> <div class="card card-block">
<h4 class="card-title">Card title</h4> <h4 class="card-title">Card title</h4>
@ -91,6 +97,10 @@ Cards support a wide variety of content, including images, text, list groups, li
</div> </div>
{% endexample %} {% endexample %}
Subtitles are used by adding a `.card-subtitle` to an `<h*>` tag. If the `.card-title` and the `.card-subtitle` items are placed in a `.card-block` item, the card title and subtitle are aligned nicely.
The multiple content types can be easily combined to create the card you need. See below for an example.
{% example html %} {% example html %}
<div class="card"> <div class="card">
<div class="card-block"> <div class="card-block">
@ -182,6 +192,8 @@ Add an optional header and/or footer within a card.
</div> </div>
{% endexample %} {% endexample %}
Card headers can be styled by adding `.card-header` to `<h*>` elements.
{% example html %} {% example html %}
<div class="card"> <div class="card">
<h3 class="card-header">Featured</h3> <h3 class="card-header">Featured</h3>
@ -508,7 +520,9 @@ Only applies to small devices and above.
## Columns ## Columns
Cards can be organized into [Masonry](http://masonry.desandro.com)-like columns with just CSS by wrapping them in `.card-columns`. Only applies to small devices and above. Cards can be organized into [Masonry](http://masonry.desandro.com)-like columns with just CSS by wrapping them in `.card-columns`. Cards are ordered from top to bottom and left to right when wrapped in `.card-columns`.
Only applies to small devices and above.
**Heads up!** This is **not available in IE9 and below** as they have no support for the [`column-*` CSS properties](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_multi-column_layouts). **Heads up!** This is **not available in IE9 and below** as they have no support for the [`column-*` CSS properties](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_multi-column_layouts).
@ -574,3 +588,16 @@ Cards can be organized into [Masonry](http://masonry.desandro.com)-like columns
</div> </div>
</div> </div>
{% endexample %} {% endexample %}
Card columns can also be extended and customized with some additional code. Shown below is an extension of the `.card-columns` class using the same CSS we use—CSS columns— to generate a set of responsive tiers for changing the number of columns.
{% highlight scss %}
.card-columns {
@include media-breakpoint-only(lg) {
column-count: 4;
}
@include media-breakpoint-only(xl) {
column-count: 5;
}
}
{% endhighlight %}

View File

@ -170,9 +170,9 @@ Options can be passed via data attributes or JavaScript. For data attributes, ap
</tr> </tr>
<tr> <tr>
<td>pause</td> <td>pause</td>
<td>string</td> <td>string | null</td>
<td>"hover"</td> <td>"hover"</td>
<td>Pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave.</td> <td>If set to <code>"hover"</code>, pauses the cycling of the carousel on <code>mouseenter</code> and resumes the cycling of the carousel on <code>mouseleave</code>. If set to <code>null</code>, hovering over the carousel won't pause it.</td>
</tr> </tr>
<tr> <tr>
<td>wrap</td> <td>wrap</td>

View File

@ -16,7 +16,7 @@ See the <a href="/material-design/buttons">Material Design</a> section for more
The Bootstrap collapse plugin allows you to toggle content on your pages with a bit of JavaScript and some classes. Flexible plugin that utilizes a handful of classes (from the **required [transitions plugin]({{ site.baseurl }}/components/transitions/)**) for easy toggle behavior. The Bootstrap collapse plugin allows you to toggle content on your pages with a few classes thanks to some helpful JavaScript.
## Contents ## Contents

View File

@ -23,16 +23,20 @@ Dropdowns are toggleable, contextual overlays for displaying lists of links and
* Will be replaced with the ToC, excluding the "Contents" header * Will be replaced with the ToC, excluding the "Contents" header
{:toc} {:toc}
## Example ## Examples
Wrap the dropdown's trigger and the dropdown menu within `.dropdown`, or another element that declares `position: relative;`. Then, add the menu's HTML. Wrap the dropdown's toggle (your button or link) and the dropdown menu within `.dropdown`, or another element that declares `position: relative;`. Dropdowns can be triggered from `<a>` or `<button>` elements to better fit your potential needs.
### Single button dropdowns
Any single `.btn` can be turned into a dropdown toggle with some markup changes. Here's how you can put them to work with either `<button>` elements:
{% example html %} {% example html %}
<div class="dropdown open"> <div class="dropdown open">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown Dropdown button
</button> </button>
<div class="dropdown-menu" aria-labelledby="dropdownMenu1"> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="#">Action</a> <a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a> <a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a> <a class="dropdown-item" href="#">Something else here</a>
@ -40,9 +44,378 @@ Wrap the dropdown's trigger and the dropdown menu within `.dropdown`, or another
</div> </div>
{% endexample %} {% endexample %}
### Button elements And with `<a>` elements:
You can optionally use `<button>` elements in your dropdowns instead of `<a>`s. {% example html %}
<div class="dropdown open">
<a class="btn btn-secondary dropdown-toggle" href="http://example.com" id="dropdownMenuLink" data-target="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown link
</a>
<div class="dropdown-menu" aria-labelledby="dropdownMenuLink">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
{% endexample %}
The best part is you can do this with any button variant, too:
<div class="bd-example">
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Default</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Primary</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Success</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Info</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-warning dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Warning</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Danger</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
</div>
{% highlight html %}
<!-- Example single danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Action
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
{% endhighlight %}
### Split button dropdowns
Similarly, create split button dropdowns with virtually the same markup as single button dropdowns, but with the addition of `.dropdown-toggle-split` for proper spacing around the dropdown caret.
We use this extra class to reduce the horizontal `padding` on either side of the caret by 25% and remove the `margin-left` that's added for regular button dropdowns. Those extra changes keep the caret centered in the split button and provide a more appropriately sized hit area next to the main button.
<div class="bd-example">
<div class="btn-group">
<button type="button" class="btn btn-secondary">Default</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
</div>
{% highlight html %}
<!-- Example split danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger">Action</button>
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
{% endhighlight %}
## Sizing
Button dropdowns work with buttons of all sizes, including default and split dropdown buttons.
<div class="bd-example">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Large button
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-lg btn-secondary">Large split button</button>
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
</div><!-- /btn-toolbar -->
<div class="btn-toolbar" role="toolbar">
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Small button
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
<div class="btn-group">
<button type="button" class="btn btn-sm btn-secondary">Small split button</button>
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div><!-- /btn-group -->
</div><!-- /btn-toolbar -->
</div><!-- /example -->
{% highlight html %}
<!-- Large button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Large button
</button>
<div class="dropdown-menu">
...
</div>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Large button
</button>
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
...
</div>
</div>
<!-- Small button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Small button
</button>
<div class="dropdown-menu">
...
</div>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Small button
</button>
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
...
</div>
</div>
{% endhighlight %}
## Dropup variation
Trigger dropdown menus above elements by adding `.dropup` to the parent element.
<div class="bd-example">
<div class="btn-toolbar" role="toolbar">
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropup
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary">
Split dropup
</button>
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
</div>
</div>
{% highlight html %}
<!-- Default dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary">Dropup</button>
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary">
Split dropup
</button>
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
{% endhighlight %}
## Menu items
Historically dropdown menu contents *had* to be links, but that's no longer the case with v4. Now you can optionally use `<button>` elements in your dropdowns instead of just `<a>`s.
{% example html %} {% example html %}
<div class="dropdown open"> <div class="dropdown open">
@ -57,7 +430,7 @@ You can optionally use `<button>` elements in your dropdowns instead of `<a>`s.
</div> </div>
{% endexample %} {% endexample %}
## Alignment ## Menu alignment
By default, a dropdown menu is automatically positioned 100% from the top and along the left side of its parent. Add `.dropdown-menu-right` to a `.dropdown-menu` to right align the dropdown menu. By default, a dropdown menu is automatically positioned 100% from the top and along the left side of its parent. Add `.dropdown-menu-right` to a `.dropdown-menu` to right align the dropdown menu.

View File

@ -34,7 +34,7 @@ Remember, since Bootstrap utilizes the HTML5 doctype, **all inputs must have a `
<div class="form-group"> <div class="form-group">
<label for="exampleInputEmail1">Email address</label> <label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email"> <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
<small id="emailHelp" class="text-muted">We'll never share your email with anyone else.</small> <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="exampleInputPassword1">Password</label> <label for="exampleInputPassword1">Password</label>
@ -67,7 +67,7 @@ Remember, since Bootstrap utilizes the HTML5 doctype, **all inputs must have a `
<div class="form-group"> <div class="form-group">
<label for="exampleInputFile">File input</label> <label for="exampleInputFile">File input</label>
<input type="file" class="form-control-file" id="exampleInputFile" aria-describedby="fileHelp"> <input type="file" class="form-control-file" id="exampleInputFile" aria-describedby="fileHelp">
<small id="fileHelp" class="text-muted">This is some placeholder block-level help text for the above input. It's a bit lighter and easily wraps to a new line.</small> <small id="fileHelp" class="form-text text-muted">This is some placeholder block-level help text for the above input. It's a bit lighter and easily wraps to a new line.</small>
</div> </div>
<fieldset class="form-group"> <fieldset class="form-group">
<legend>Radio buttons</legend> <legend>Radio buttons</legend>
@ -184,79 +184,79 @@ Here are examples of `.form-control` applied to each textual HTML5 `<input>` `ty
{% example html %} {% example html %}
<div class="form-group row"> <div class="form-group row">
<label for="example-text-input" class="col-xs-2 form-control-label">Text</label> <label for="example-text-input" class="col-xs-2 col-form-label">Text</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="text" value="Artisanal kale" id="example-text-input"> <input class="form-control" type="text" value="Artisanal kale" id="example-text-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-search-input" class="col-xs-2 form-control-label">Search</label> <label for="example-search-input" class="col-xs-2 col-form-label">Search</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="search" value="How do I shoot web" id="example-search-input"> <input class="form-control" type="search" value="How do I shoot web" id="example-search-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-email-input" class="col-xs-2 form-control-label">Email</label> <label for="example-email-input" class="col-xs-2 col-form-label">Email</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="email" value="bootstrap@example.com" id="example-email-input"> <input class="form-control" type="email" value="bootstrap@example.com" id="example-email-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-url-input" class="col-xs-2 form-control-label">URL</label> <label for="example-url-input" class="col-xs-2 col-form-label">URL</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="url" value="http://getbootstrap.com" id="example-url-input"> <input class="form-control" type="url" value="http://getbootstrap.com" id="example-url-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-tel-input" class="col-xs-2 form-control-label">Telephone</label> <label for="example-tel-input" class="col-xs-2 col-form-label">Telephone</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="tel" value="1-(555)-555-5555" id="example-tel-input"> <input class="form-control" type="tel" value="1-(555)-555-5555" id="example-tel-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-password-input" class="col-xs-2 form-control-label">Password</label> <label for="example-password-input" class="col-xs-2 col-form-label">Password</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="password" value="hunter2" id="example-password-input"> <input class="form-control" type="password" value="hunter2" id="example-password-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-number-input" class="col-xs-2 form-control-label">Number</label> <label for="example-number-input" class="col-xs-2 col-form-label">Number</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="number" value="42" id="example-number-input"> <input class="form-control" type="number" value="42" id="example-number-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-datetime-local-input" class="col-xs-2 form-control-label">Date and time</label> <label for="example-datetime-local-input" class="col-xs-2 col-form-label">Date and time</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="datetime-local" value="2011-08-19T13:45:00" id="example-datetime-local-input"> <input class="form-control" type="datetime-local" value="2011-08-19T13:45:00" id="example-datetime-local-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-date-input" class="col-xs-2 form-control-label">Date</label> <label for="example-date-input" class="col-xs-2 col-form-label">Date</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="date" value="2011-08-19" id="example-date-input"> <input class="form-control" type="date" value="2011-08-19" id="example-date-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-month-input" class="col-xs-2 form-control-label">Month</label> <label for="example-month-input" class="col-xs-2 col-form-label">Month</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="month" value="2011-08" id="example-month-input"> <input class="form-control" type="month" value="2011-08" id="example-month-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-week-input" class="col-xs-2 form-control-label">Week</label> <label for="example-week-input" class="col-xs-2 col-form-label">Week</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="week" value="2011-W33" id="example-week-input"> <input class="form-control" type="week" value="2011-W33" id="example-week-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-time-input" class="col-xs-2 form-control-label">Time</label> <label for="example-time-input" class="col-xs-2 col-form-label">Time</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="time" value="13:45:00" id="example-time-input"> <input class="form-control" type="time" value="13:45:00" id="example-time-input">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="example-color-input" class="col-xs-2 form-control-label">Color</label> <label for="example-color-input" class="col-xs-2 col-form-label">Color</label>
<div class="col-xs-10"> <div class="col-xs-10">
<input class="form-control" type="color" value="#563d7c" id="example-color-input"> <input class="form-control" type="color" value="#563d7c" id="example-color-input">
</div> </div>
@ -322,9 +322,9 @@ Because of this, you may need to manually address the width and alignment of ind
<label class="sr-only" for="exampleInputPassword3">Password</label> <label class="sr-only" for="exampleInputPassword3">Password</label>
<input type="password" class="form-control" id="exampleInputPassword3" placeholder="Password"> <input type="password" class="form-control" id="exampleInputPassword3" placeholder="Password">
</div> </div>
<div class="checkbox"> <div class="form-check">
<label> <label class="form-check-label">
<input type="checkbox"> Remember me <input class="form-check-input" type="checkbox"> Remember me
</label> </label>
</div> </div>
<button type="submit" class="btn btn-primary">Sign in</button> <button type="submit" class="btn btn-primary">Sign in</button>
@ -352,102 +352,130 @@ Because of this, you may need to manually address the width and alignment of ind
### Using the Grid ### Using the Grid
For more structured form layouts, you can utilize Bootstrap's predefined grid classes (or mixins) to create horizontal forms. Add the `.row` class to form groups and use the `.col-*-*` classes to specify the width of your labels and controls. For more structured form layouts that are also responsive, you can utilize Bootstrap's [predefined grid classes](/layout/grid/#predefined-classes) or [mixins](/layout/grid/#sass-mixins) to create horizontal forms. Add the `.row` class to form groups and use the `.col-*-*` classes to specify the width of your labels and controls.
Be sure to add `.form-control-label` to your `<label>`s as well so they're vertically centered with their associated form controls. For `<legend>` elements, you can use `.form-control-legend` to make them appear similar to regular `<label>` elements. Be sure to add `.col-form-label` to your `<label>`s as well so they're vertically centered with their associated form controls. For `<legend>` elements, you can use `.col-form-legend` to make them appear similar to regular `<label>` elements.
{% example html %} {% example html %}
<div class="container">
<form> <form>
<div class="form-group row"> <div class="form-group row">
<label for="inputEmail3" class="col-sm-2 form-control-label">Email</label> <label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10"> <div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email"> <input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="inputPassword3" class="col-sm-2 form-control-label">Password</label> <label for="inputPassword3" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10"> <div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3" placeholder="Password"> <input type="password" class="form-control" id="inputPassword3" placeholder="Password">
</div> </div>
</div> </div>
<fieldset class="form-group row"> <fieldset class="form-group row">
<legend class="col-sm-2 form-control-legend">Radios</legend> <legend class="col-form-legend col-sm-2">Radios</legend>
<div class="col-sm-10"> <div class="col-sm-10">
<div class="radio"> <div class="form-check">
<label> <label class="form-check-label">
<input type="radio" name="gridRadios" id="gridRadios1" value="option1" checked> <input class="form-check-input" type="radio" name="gridRadios" id="gridRadios1" value="option1" checked>
Option one is this and that&mdash;be sure to include why it's great Option one is this and that&mdash;be sure to include why it's great
</label> </label>
</div> </div>
<div class="radio"> <div class="form-check">
<label> <label class="form-check-label">
<input type="radio" name="gridRadios" id="gridRadios2" value="option2"> <input class="form-check-input" type="radio" name="gridRadios" id="gridRadios2" value="option2">
Option two can be something else and selecting it will deselect option one Option two can be something else and selecting it will deselect option one
</label> </label>
</div> </div>
<div class="radio disabled"> <div class="form-check disabled">
<label> <label class="form-check-label">
<input type="radio" name="gridRadios" id="gridRadios3" value="option3" disabled> <input class="form-check-input" type="radio" name="gridRadios" id="gridRadios3" value="option3" disabled>
Option three is disabled Option three is disabled
</label> </label>
</div> </div>
</div> </div>
</fieldset> </fieldset>
<fieldset class="form-group row"> <div class="form-group row">
<legend class="col-sm-2 form-control-legend">Checkbox</legend> <label class="col-sm-2">Checkbox</label>
<div class="col-sm-10"> <div class="col-sm-10">
<div class="checkbox"> <div class="form-check">
<label> <label class="form-check-label">
<input type="checkbox"> Check me out <input class="form-check-input" type="checkbox"> Check me out
</label> </label>
</div> </div>
</div> </div>
</fieldset> </div>
<div class="form-group row"> <div class="form-group row">
<div class="col-sm-offset-2 col-sm-10"> <div class="offset-sm-2 col-sm-10">
<button type="submit" class="btn btn-secondary">Sign in</button> <button type="submit" class="btn btn-primary">Sign in</button>
</div> </div>
</div> </div>
</form> </form>
</div>
{% endexample %} {% endexample %}
Grid-based form layouts also support large and small inputs.
{% example html %}
<div class="container">
<form>
<div class="form-group row">
<label for="lgFormGroupInput" class="col-sm-2 col-form-label col-form-label-lg">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-lg" id="lgFormGroupInput" placeholder="you@example.com">
</div>
</div>
<div class="form-group row">
<label for="smFormGroupInput" class="col-sm-2 col-form-label col-form-label-sm">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-sm" id="smFormGroupInput" placeholder="you@example.com">
</div>
</div>
</form>
</div>
{% endexample %}
## Checkboxes and radios ## Checkboxes and radios
Checkboxes are for selecting one or several options in a list, while radios are for selecting one option from many. Default checkboxes and radios are improved upon with the help of `.form-check`, **a single class for both input types that improves the layout and behavior of their HTML elements**. Checkboxes are for selecting one or several options in a list, while radios are for selecting one option from many.
Disabled checkboxes and radios are supported, but to provide a "not-allowed" cursor on hover of the parent `<label>`, you'll need to add the <code>.disabled</code> class to the parent `.radio`, `.radio-inline`, `.checkbox`, or `.checkbox-inline`. Disabled checkboxes and radios are supported, but to provide a `not-allowed` cursor on hover of the parent `<label>`, you'll need to add the `.disabled` class to the parent `.form-check`. The disabled class will also lighten the text color to help indicate the input's state.
### Default (stacked) ### Default (stacked)
By default, any number of checkboxes and radios that are immediate sibling will be vertically stacked and appropriately spaced with `.form-check`.
{% example html %} {% example html %}
<div class="checkbox"> <div class="form-check">
<label> <label class="form-check-label">
<input type="checkbox" value=""> <input class="form-check-input" type="checkbox" value="">
Option one is this and that&mdash;be sure to include why it's great Option one is this and that&mdash;be sure to include why it's great
</label> </label>
</div> </div>
<div class="checkbox disabled"> <div class="form-check disabled">
<label> <label class="form-check-label">
<input type="checkbox" value="" disabled> <input class="form-check-input" type="checkbox" value="" disabled>
Option two is disabled Option two is disabled
</label> </label>
</div> </div>
{% endexample %}
<div class="radio"> {% example html %}
<label> <div class="form-check">
<input type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked> <label class="form-check-label">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked>
Option one is this and that&mdash;be sure to include why it's great Option one is this and that&mdash;be sure to include why it's great
</label> </label>
</div> </div>
<div class="radio"> <div class="form-check">
<label> <label class="form-check-label">
<input type="radio" name="exampleRadios" id="exampleRadios2" value="option2"> <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios2" value="option2">
Option two can be something else and selecting it will deselect option one Option two can be something else and selecting it will deselect option one
</label> </label>
</div> </div>
<div class="radio disabled"> <div class="form-check disabled">
<label> <label class="form-check-label">
<input type="radio" name="exampleRadios" id="exampleRadios3" value="option3" disabled> <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios3" value="option3" disabled>
Option three is disabled Option three is disabled
</label> </label>
</div> </div>
@ -455,29 +483,29 @@ Disabled checkboxes and radios are supported, but to provide a "not-allowed" cur
### Inline ### Inline
Use the `.checkbox-inline` or `.radio-inline` classes on a series of checkboxes or radios for controls that appear on the same line. Groups of checkboxes or radios that appear on the same horizontal row are similar to their stacked counterparts, but require different HTML and a single class. To switch from stacked to inline, drop the surrounding `<div>`, add `.form-check-inline` to the `<label>`, and keep the `.form-check-input` on the `<input>`.
{% example html %} {% example html %}
<label class="checkbox-inline"> <label class="form-check-inline">
<input type="checkbox" id="inlineCheckbox1" value="option1"> 1 <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1"> 1
</label> </label>
<label class="checkbox-inline"> <label class="form-check-inline">
<input type="checkbox" id="inlineCheckbox2" value="option2"> 2 <input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2"> 2
</label> </label>
<label class="checkbox-inline"> <label class="form-check-inline">
<input type="checkbox" id="inlineCheckbox3" value="option3"> 3 <input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="option3"> 3
</label> </label>
{% endexample %} {% endexample %}
{% example html %} {% example html %}
<label class="radio-inline"> <label class="form-check-inline">
<input type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1"> 1 <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1"> 1
</label> </label>
<label class="radio-inline"> <label class="form-check-inline">
<input type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2"> 2 <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2"> 2
</label> </label>
<label class="radio-inline"> <label class="form-check-inline">
<input type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3"> 3 <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3"> 3
</label> </label>
{% endexample %} {% endexample %}
@ -486,14 +514,14 @@ Use the `.checkbox-inline` or `.radio-inline` classes on a series of checkboxes
Should you have no text within the `<label>`, the input is positioned as you'd expect. **Currently only works on non-inline checkboxes and radios.** Remember to still provide some form of label for assistive technologies (for instance, using `aria-label`). Should you have no text within the `<label>`, the input is positioned as you'd expect. **Currently only works on non-inline checkboxes and radios.** Remember to still provide some form of label for assistive technologies (for instance, using `aria-label`).
{% example html %} {% example html %}
<div class="checkbox"> <div class="form-check">
<label> <label class="form-check-label">
<input type="checkbox" id="blankCheckbox" value="option1" aria-label="..."> <input class="form-check-input" type="checkbox" id="blankCheckbox" value="option1" aria-label="...">
</label> </label>
</div> </div>
<div class="radio"> <div class="form-check">
<label> <label class="form-check-label">
<input type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="..."> <input class="form-check-input" type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="...">
</label> </label>
</div> </div>
{% endexample %} {% endexample %}
@ -505,13 +533,13 @@ When you need to place plain text next to a form label within a form, use the `.
{% example html %} {% example html %}
<form> <form>
<div class="form-group row"> <div class="form-group row">
<label class="col-sm-2 form-control-label">Email</label> <label class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10"> <div class="col-sm-10">
<p class="form-control-static">email@example.com</p> <p class="form-control-static">email@example.com</p>
</div> </div>
</div> </div>
<div class="form-group row"> <div class="form-group row">
<label for="inputPassword" class="col-sm-2 form-control-label">Password</label> <label for="inputPassword" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10"> <div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword" placeholder="Password"> <input type="password" class="form-control" id="inputPassword" placeholder="Password">
</div> </div>
@ -597,9 +625,15 @@ Set heights using classes like `.form-control-lg`, and set widths using grid col
{% endexample %} {% endexample %}
{% example html %} {% example html %}
<select class="form-control form-control-lg"></select> <select class="form-control form-control-lg">
<select class="form-control"></select> <option>Large select</option>
<select class="form-control form-control-sm"></select> </select>
<select class="form-control">
<option>Default select</option>
</select>
<select class="form-control form-control-sm">
<option>Small select</option>
</select>
{% endexample %} {% endexample %}
## Column sizing ## Column sizing
@ -622,7 +656,7 @@ Wrap inputs in grid columns, or any custom parent element, to easily enforce des
## Help text ## Help text
No official help text classes exist in Bootstrap 4 (previously we had `.help-block` in v3), but thanks to our utility classes like `.text-muted`, you can create much more flexible help text as you need it. Block-level help text in forms can be created using `.form-text` (previously known as `.help-block` in v3). Inline help text can be flexibly implemented using any inline HTML element and utility classes like `.text-muted`.
{% callout warning %} {% callout warning %}
#### Associating help text with form controls #### Associating help text with form controls
@ -630,6 +664,20 @@ No official help text classes exist in Bootstrap 4 (previously we had `.help-blo
Help text should be explicitly associated with the form control it relates to using the `aria-describedby` attribute. This will ensure that assistive technologies such as screen readers will announce this help text when the user focuses or enters the control. Help text should be explicitly associated with the form control it relates to using the `aria-describedby` attribute. This will ensure that assistive technologies such as screen readers will announce this help text when the user focuses or enters the control.
{% endcallout %} {% endcallout %}
### Block level
Block help text—for below inputs or for longer lines of help text—can be easily achieved with `.form-text`. This class includes `display: block` and adds some top margin for easy spacing from the inputs above.
{% example html %}
<label for="inputPassword5">Password</label>
<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
<p id="passwordHelpBlock" class="form-text text-muted">
Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
</p>
{% endexample %}
### Inline
Inline text can use any typical inline HTML element (be it a `<small>`, `<span>`, or something else). Inline text can use any typical inline HTML element (be it a `<small>`, `<span>`, or something else).
{% example html %} {% example html %}
@ -644,25 +692,24 @@ Inline text can use any typical inline HTML element (be it a `<small>`, `<span>`
</form> </form>
{% endexample %} {% endexample %}
Block help text—for below inputs or for longer lines of help text—can be easily achieved with a `<p>`.
{% example html %}
<label for="inputPassword5">Password</label>
<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
<p id="passwordHelpBlock" class="text-muted">
Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters or emoji.
</p>
{% endexample %}
## Validation ## Validation
Bootstrap includes validation styles for danger, warning, and success states on form controls. Bootstrap includes validation styles for danger, warning, and success states on form controls. Here's a rundown of how they work:
- To use, add `.has-warning`, `.has-danger`, or `.has-success` to the parent element. Any `.form-control-label`, `.form-control`, and `.text-help` within that element will receive the validation styles. - To use, add `.has-warning`, `.has-danger`, or `.has-success` to the parent element. Any `.col-form-label`, `.form-control`, or custom form element will receive the validation styles.
- Contextual validation text, in addition to your usual form field help text, can be added with the use of `.form-control-feedback`. This text will adapt to the parent `.has-*` class. By default it only includes a bit of `margin` for spacing and a modified `color` for each state.
- Validation icons are `url()`s configured via Sass variables that are applied to `background-image` declarations for each state. - Validation icons are `url()`s configured via Sass variables that are applied to `background-image` declarations for each state.
- You may use your own base64 PNGs or SVGs by updating the Sass variables and recompiling. - You may use your own base64 PNGs or SVGs by updating the Sass variables and recompiling.
- Icons can also be disabled entirely by setting the variables to `none` or commenting out the source Sass. - Icons can also be disabled entirely by setting the variables to `none` or commenting out the source Sass.
Generally speaking, you'll want to use a particular state for specific types of feedback:
- **Danger** is great for when there's a blocking or required field. A user *must* fill in this field properly to submit the form.
- **Warning** works well for input values that are in progress, like password strength, or soft validation before a user attempts to submit a form.
- And lastly, **success** is ideal for situations when you have per-field validation throughout a form and want to encourage a user through the rest of the fields.
Here are some examples of the aforementioned classes in action.
{% comment %} {% comment %}
{% callout warning %} {% callout warning %}
#### Conveying validation state to assistive technologies and colorblind users #### Conveying validation state to assistive technologies and colorblind users
@ -675,18 +722,26 @@ Ensure that an alternative indication of state is also provided. For instance, y
{% example html %} {% example html %}
<div class="form-group has-success"> <div class="form-group has-success">
<label class="form-control-label" for="inputSuccess1">Input with success</label> <label class="col-form-label" for="inputSuccess1">Input with success</label>
<input type="text" class="form-control form-control-success" id="inputSuccess1"> <input type="text" class="form-control form-control-success" id="inputSuccess1">
<div class="form-control-feedback">Success! You've done it.</div>
<small class="form-text text-muted">Example help text that remains unchanged.</small>
</div> </div>
<div class="form-group has-warning"> <div class="form-group has-warning">
<label class="form-control-label" for="inputWarning1">Input with warning</label> <label class="col-form-label" for="inputWarning1">Input with warning</label>
<input type="text" class="form-control form-control-warning" id="inputWarning1"> <input type="text" class="form-control form-control-warning" id="inputWarning1">
<div class="form-control-feedback">Shucks, check the formatting of that and try again.</div>
<small class="form-text text-muted">Example help text that remains unchanged.</small>
</div> </div>
<div class="form-group has-danger"> <div class="form-group has-danger">
<label class="form-control-label" for="inputDanger1">Input with danger</label> <label class="col-form-label" for="inputDanger1">Input with danger</label>
<input type="text" class="form-control form-control-danger" id="inputDanger1"> <input type="text" class="form-control form-control-danger" id="inputDanger1">
<div class="form-control-feedback">Shit, that username's taken. Try another?</div>
<small class="form-text text-muted">Example help text that remains unchanged.</small>
</div> </div>
{% endexample %}
{% example html %}
<div class="checkbox has-success"> <div class="checkbox has-success">
<label> <label>
<input type="checkbox" id="checkboxSuccess" value="option1"> <input type="checkbox" id="checkboxSuccess" value="option1">

View File

@ -492,10 +492,6 @@ Bootstrap's modal class exposes a few events for hooking into modal functionalit
<td>hidden.bs.modal</td> <td>hidden.bs.modal</td>
<td>This event is fired when the modal has finished being hidden from the user (will wait for CSS transitions to complete).</td> <td>This event is fired when the modal has finished being hidden from the user (will wait for CSS transitions to complete).</td>
</tr> </tr>
<tr>
<td>loaded.bs.modal</td>
<td>This event is fired when the modal has loaded content using the <code>remote</code> option.</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>

View File

@ -40,7 +40,7 @@ Here are our guidelines and reasons for choosing what to override in Reboot:
The `<html>` and `<body>` elements are updated to provide better page-wide defaults. More specifically: The `<html>` and `<body>` elements are updated to provide better page-wide defaults. More specifically:
- The `box-sizing` is globally set on every element—including `*:before` and `*:after`, to `border-box`. This ensures that the declared width of element is never exceeded due to padding or border. - The `box-sizing` is globally set on every element—including `*:before` and `*:after`, to `border-box`. This ensures that the declared width of element is never exceeded due to padding or border.
- A base `font-size: 16px` is declared on the `<html>` and `font-size: 1rem` on the `<body>` for easy responsive type-scaling via media queryies. - A base `font-size: 16px` is declared on the `<html>` and `font-size: 1rem` on the `<body>` for easy responsive type-scaling via media queries.
- The `<body>` also sets a global `font-family` and `line-height`. This is inherited later by some form elements to prevent font inconsistencies. - The `<body>` also sets a global `font-family` and `line-height`. This is inherited later by some form elements to prevent font inconsistencies.
- For safety, the `<body>` has a declared `background-color`, defaulting to `#fff`. - For safety, the `<body>` has a declared `background-color`, defaulting to `#fff`.
@ -160,7 +160,7 @@ The `<pre>` element is reset to remove its `margin-top` and use `rem` units for
## Tables ## Tables
Tables are slightly adjusted to style `<caption>`s and ensure consistent `text-align` throughout. Additional changes for borders, padding, and more come with [the `.table` class]({{ site.baseurl }}/content/tables/). Tables are slightly adjusted to style `<caption>`s, collapse borders, and ensure consistent `text-align` throughout. Additional changes for borders, padding, and more come with [the `.table` class]({{ site.baseurl }}/content/tables/).
<div class="bd-example"> <div class="bd-example">
<table> <table>

View File

@ -16,14 +16,16 @@ See the <a href="/material-design/buttons">Material Design</a> section for more
Due to the widespread use of tables across third-party widgets like calendars and date pickers, we've designed our tables to be **opt-in**. Just add the base class `.table` to any `<table>`. Due to the widespread use of tables across third-party widgets like calendars and date pickers, we've designed our tables to be **opt-in**. Just add the base class `.table` to any `<table>`, then extend with custom styles or our various included modifier classes.
## Contents ## Contents
* Will be replaced with the ToC, excluding the "Contents" header * Will be replaced with the ToC, excluding the "Contents" header
{:toc} {:toc}
## Basic example ## Examples
Using the most basic table markup, here's how `.table`-based tables look in Bootstrap.
{% example html %} {% example html %}
<table class="table"> <table class="table">
@ -58,7 +60,7 @@ Due to the widespread use of tables across third-party widgets like calendars an
</table> </table>
{% endexample %} {% endexample %}
## Inverse table You can also invert the colors—with light text on dark backgrounds—with `.table-inverse`.
{% example html %} {% example html %}
<table class="table table-inverse"> <table class="table table-inverse">
@ -95,7 +97,7 @@ Due to the widespread use of tables across third-party widgets like calendars an
## Table head options ## Table head options
Use one of two modifier classes to make `<thead>`s appear light or dark gray. Similar to default and inverse tables, use one of two modifier classes to make `<thead>`s appear light or dark gray.
{% example html %} {% example html %}
<table class="table"> <table class="table">
@ -198,6 +200,39 @@ Use `.table-striped` to add zebra-striping to any table row within the `<tbody>`
</table> </table>
{% endexample %} {% endexample %}
{% example html %}
<table class="table table-striped table-inverse">
<thead>
<tr>
<th>#</th>
<th>First Name</th>
<th>Last Name</th>
<th>Username</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
{% endexample %}
## Bordered table ## Bordered table
Add `.table-bordered` for borders on all sides of the table and cells. Add `.table-bordered` for borders on all sides of the table and cells.
@ -240,6 +275,44 @@ Add `.table-bordered` for borders on all sides of the table and cells.
</table> </table>
{% endexample %} {% endexample %}
{% example html %}
<table class="table table-bordered table-inverse">
<thead>
<tr>
<th>#</th>
<th>First Name</th>
<th>Last Name</th>
<th>Username</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Mark</td>
<td>Otto</td>
<td>@TwBootstrap</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">4</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
{% endexample %}
## Hoverable rows ## Hoverable rows
Add `.table-hover` to enable a hover state on table rows within a `<tbody>`. Add `.table-hover` to enable a hover state on table rows within a `<tbody>`.
@ -276,6 +349,38 @@ Add `.table-hover` to enable a hover state on table rows within a `<tbody>`.
</table> </table>
{% endexample %} {% endexample %}
{% example html %}
<table class="table table-hover table-inverse">
<thead>
<tr>
<th>#</th>
<th>First Name</th>
<th>Last Name</th>
<th>Username</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
{% endexample %}
## Small table ## Small table
Add `.table-sm` to make tables more compact by cutting cell padding in half. Add `.table-sm` to make tables more compact by cutting cell padding in half.
@ -312,6 +417,38 @@ Add `.table-sm` to make tables more compact by cutting cell padding in half.
</table> </table>
{% endexample %} {% endexample %}
{% example html %}
<table class="table table-sm table-inverse">
<thead>
<tr>
<th>#</th>
<th>First Name</th>
<th>Last Name</th>
<th>Username</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
{% endexample %}
## Contextual classes ## Contextual classes
Use contextual classes to color table rows or individual cells. Use contextual classes to color table rows or individual cells.
@ -432,9 +569,6 @@ Use contextual classes to color table rows or individual cells.
</table> </table>
</div> </div>
{% capture callout-include %}{% include callout-warning-color-assistive-technologies.md %}{% endcapture %}
{{ callout-include | markdownify }}
{% highlight html %} {% highlight html %}
<!-- On rows --> <!-- On rows -->
<tr class="table-active">...</tr> <tr class="table-active">...</tr>
@ -453,6 +587,98 @@ Use contextual classes to color table rows or individual cells.
</tr> </tr>
{% endhighlight %} {% endhighlight %}
Regular table background variants are not available with the inverse table, however, you may use [text or background utilities](/components/utilities/#contextual-colors-and-backgrounds) to achieve similar styles.
<div class="bd-example">
<table class="table table-inverse">
<thead>
<tr>
<th>#</th>
<th>Column heading</th>
<th>Column heading</th>
<th>Column heading</th>
</tr>
</thead>
<tbody>
<tr class="bg-primary">
<th scope="row">1</th>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr class="bg-success">
<th scope="row">3</th>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr>
<th scope="row">4</th>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr class="bg-info">
<th scope="row">5</th>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr>
<th scope="row">6</th>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr class="bg-warning">
<th scope="row">7</th>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr>
<th scope="row">8</th>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
<tr class="bg-danger">
<th scope="row">9</th>
<td>Column content</td>
<td>Column content</td>
<td>Column content</td>
</tr>
</tbody>
</table>
</div>
{% highlight html %}
<!-- On rows -->
<tr class="bg-primary">...</tr>
<tr class="bg-success">...</tr>
<tr class="bg-warning">...</tr>
<tr class="bg-danger">...</tr>
<tr class="bg-info">...</tr>
<!-- On cells (`td` or `th`) -->
<tr>
<td class="bg-primary">...</td>
<td class="bg-success">...</td>
<td class="bg-warning">...</td>
<td class="bg-danger">...</td>
<td class="bg-info">...</td>
</tr>
{% endhighlight %}
{% capture callout-include %}{% include callout-warning-color-assistive-technologies.md %}{% endcapture %}
{{ callout-include | markdownify }}
## Responsive tables ## Responsive tables
Create responsive tables by wrapping any `.table` in `.table-responsive` to make them scroll horizontally on small devices (under 768px). When viewing on anything larger than 768px wide, you will not see any difference in these tables. Create responsive tables by wrapping any `.table` in `.table-responsive` to make them scroll horizontally on small devices (under 768px). When viewing on anything larger than 768px wide, you will not see any difference in these tables.

View File

@ -36,7 +36,7 @@ These styles can be found within `_reboot.scss`, and the global variables are de
## Headings ## Headings
All HTML headings, `<h1>` through `<h6>`, are available. `.h1` through `.h6` classes are also available, for when you want to match the font styling of a heading but still want your text to be displayed inline. All HTML headings, `<h1>` through `<h6>`, are available.
<div class="bd-example bd-example-type"> <div class="bd-example bd-example-type">
<table class="table"> <table class="table">
@ -78,6 +78,17 @@ All HTML headings, `<h1>` through `<h6>`, are available. `.h1` through `.h6` cla
<h6>h6. Bootstrap heading</h6> <h6>h6. Bootstrap heading</h6>
{% endhighlight %} {% endhighlight %}
`.h1` through `.h6` classes are also available, for when you want to match the font styling of a heading but cannot use the associated HTML element.
{% example html %}
<p class="h1">h1. Bootstrap heading</p>
<p class="h2">h2. Bootstrap heading</p>
<p class="h3">h3. Bootstrap heading</p>
<p class="h4">h4. Bootstrap heading</p>
<p class="h5">h5. Bootstrap heading</p>
<p class="h6">h6. Bootstrap heading</p>
{% endexample %}
### Customizing headings ### Customizing headings
Use the included utility classes to recreate the small secondary heading text from Bootstrap 3. Use the included utility classes to recreate the small secondary heading text from Bootstrap 3.