Commit 4c82dd36 authored by Mark Otto's avatar Mark Otto
Browse files

Refactor input groups

* Deprecate .input-append and .input-prepend
* Use new, single base class for component, .input-group
* Deprecate .addon for .input-group-addon
* For compatibility with all buttons, require .input-group-btn to wrap buttons and button dropdowns
* Still need to reimplement with segmented button dropdowns, but that's dependent on a refactor of those first
parent 6649918c
main cleanup-floating-forms cssvar-function dependabot/npm_and_yarn/stylelint-and-stylelint-config-twbs-bootstrap-15.3.0 extend-snippets feat/data-target floating-always-visible floating-labels-icons fod-main-banner form-controls-with-icons gh-pages gh-pages-530-alpha2 github/fork/719media/patch-13 github/fork/719media/patch-14 github/fork/719media/patch-9 github/fork/ChellyAhmed/fix-typo-reboot.md github/fork/ChellyAhmed/offcanvas-scroll-back github/fork/CtrlAltLilith/main github/fork/Elysiome/offcanvas-optional-window-resizing github/fork/JanSargsyan/main github/fork/LunicLynx/support-different-line-height-for-buttons github/fork/Psixodelik/main github/fork/Ronid1/ronid1/offcanvas_static_backdrop github/fork/RyanBerliner/tooltip-accessibility github/fork/SantiagoPVazquez/Feature-default-border-bottom-to-dropdown-item github/fork/Sir-Genius/utils github/fork/Sumit-Singh-8/main github/fork/Viktor-VERA2020/offcanvas-slide github/fork/Zivangu9/input-group-for-form-control-plaintext github/fork/alpadev/alpadev/call-dispose-on-component-reinstantiation github/fork/astagi/fix/tree-shake-modules github/fork/compnerd/dark-accordion-icon github/fork/derSascha/dropdown-dont-close-on-input-click github/fork/dev-ph1l/main github/fork/donquixote/issue-33861-utl-mixin github/fork/florianlacreuse/mixin-make-row-gutter-y github/fork/gregorw/main github/fork/iteggmbh/transitionend-dispose-race github/fork/jdelStrother/patch-1 github/fork/jonnysp/form-floating github/fork/jonnysp/independent-offcanvas github/fork/jonnysp/theme-dark-on-card-and-modal-fix github/fork/josefdlange/floating-label-placeholder-opacity github/fork/julien-deramond/enhance-change-version.js github/fork/julien-deramond/main-jd-fix-offset-content github/fork/julien-deramond/main-jd-issue-with-utitlies github/fork/julien-deramond/main-xmr-pa11y-ci-jd-add-hideElements github/fork/kyletsang/fix-tooltip-padding github/fork/lacutah/CheckboxCenteringDocumentation github/fork/lekoala/patch-3 github/fork/louismaximepiton/main-kld-lmp-collapse-proposal github/fork/louismaximepiton/main-lmp-card-inner-border-radius-fix github/fork/louismaximepiton/main-lmp-carousel-multiple-images github/fork/louismaximepiton/main-lmp-css-var-init github/fork/louismaximepiton/main-lmp-disabled-floating-label-fix github/fork/louismaximepiton/main-lmp-input-range-fix github/fork/louismaximepiton/main-lmp-shift-color github/fork/louismaximepiton/main-lmp-table-active-tr-fix github/fork/maciek-szn/switch github/fork/michael-roth/feature/19964-multiple-tab-targets github/fork/mistic100/dom-utils github/fork/nkdas91/accordion github/fork/nstungcom/fix-missing-modal-open-class github/fork/oraliahdz/animation-utilities github/fork/pine3ree/patch-7 github/fork/pouwerkerk/unindent-scss-docs-shortcode github/fork/smares/smares-no-scolling-on-modal-close github/fork/tgm-git/patch-1 gs-forms gs-toasts-with-animated-progress-bar gs/add-history-helper gs/change-version-dir-on-docs gs/data-must-set-onlu-one-instance gs/docs/fix-drop-down-error gs/event-handler-2 gs/make-docs-js-build gs/make-simple-attribute-toggler gs/popover-fix-doc gs/provide-steConfig-method gs/scrollspy-smoothscroll-option-use-browser-history gs/streamline-jqueryInterface gs/support-drop-down-in-navbar gs/test-js-generic-trigger gs/try-web-components gs/tweak-collapse-js-selector gs/use-event-handler-in-cocmponent gs/use-rollup-replace-for-version jo-docs-thanks-page jo-ssr-friendly logical-props-spacing-utils main-fod-disabled-form-check-label main-fod-nested-accordion main-fod-simpler-table-structure main-fod-table-separator main-fod-utilities-contrast main-jd-abbr-title main-jd-add-chips main-jd-add-doc-for-sass-custom-colors main-jd-add-enable-host-to-handle-web-components main-jd-browserstack-fine-tune main-jd-browserstack-updates main-jd-docs-consistent-usage-of-css-sections-step-2 main-jd-fix-docs-headers-in-white main-jd-fix-highlight-docs-border-radius main-jd-fix-placeholder-color-background-params-for-img-markup main-jd-glossary-experiment main-jd-postcss-drop-empty-css-vars main-jd-proto-doc-astro main-jd-skip-navigation-component main-jd-stackblitz-for-examples main-jd-upgrade-browserlistrc main-jd-use-host main-lmp-dark-theme-customization main-lmp-handle-scroll-target main-lmp-tab-fix main-mc-opensearch main-xmr-bundlewatch-action main-xmr-eslint-plugin-compat main-xmr-hugo-docs-vendor main-xmr-hugo-rm-ver main-xmr-linkinator-prod main-xmr-min-mangle main-xmr-pa11y-ci more-darkmode-examples nested-dropdowns patrickhlauke-issue37428 patrickhlauke-use-of-color-tweaks pr/34102 pr/37590 previous-next-docs-links sticky-thead utilities-functions-mixin v3-dev v4-dev v4-dev-dropdown-hide-method v530-dev v6-postcss-custom-media v6-spinner-dots v6/gs/use-floating-ui-in-place-of-popper xmr/dev xmr/docs-png xmr/docs-svgs xmr/hugo-reorg-files xmr/js-2 xmr/markdownlint xmr/prepare-530-alpha2 xmr/xo v5.3.0-alpha1 v5.2.3 v5.2.2 v5.2.1 v5.2.0 v5.2.0-beta1 v5.1.3 v5.1.2 v5.1.1 v5.1.0 v5.0.2 v5.0.1 v5.0.0 v5.0.0-beta3 v5.0.0-beta2 v5.0.0-beta1 v5.0.0-alpha3 v5.0.0-alpha2 v5.0.0-alpha1 v4.6.2 v4.6.1 v4.6.0 v4.5.3 v4.5.2 v4.5.1 v4.5.0 v4.4.1 v4.4.0 v4.3.1 v4.3.0 v4.2.1 v4.2.0 v4.1.3 v4.1.2 v4.1.1 v4.1.0 v4.0.0 v4.0.0-beta.3 v4.0.0-beta.2 v4.0.0-beta v4.0.0-alpha.6 v4.0.0-alpha.5 v4.0.0-alpha.4 v4.0.0-alpha.3 v4.0.0-alpha.2 v4.0.0-alpha v3.4.1 v3.4.0 v3.3.7 v3.3.6 v3.3.5 v3.3.4 v3.3.2 v3.3.1 v3.3.0 v3.2.0 v3.1.1 v3.1.0 v3.0.3 v3.0.2 v3.0.1 v3.0.0 v3.0.0-rc.2 v3.0.0-rc1
21 merge requests!7033Fix backdrop undefined bug in modal,!8635ignore Gruntfile.js in jekyll,!8339Fix broken links to navbar component in docs examples,!7329Fix for issue #7328,!7219Fix for mini typo mistake in css.html,!7674Clear float on all when navbar is collapsed - v3,!7344Fixed .spanX selector (*= instead of ^=),!7346Fix compilation error,!7775added some tests for tooltip title setter,!8157Close Me: Docs "Customize and Download" button fix,!7509Proposed fix for allowing Collapse events ('show'/'hide') to be cancelled,!7964commit fixes #7792,!8656Added rel="stylesheet" to CDN-Examples,!8527Inner properties move 1,!8245Interactive color picker - Closed: request against wrong branch,!7865Patch 2,!7651Drop the sizzle dependency to allow smaller builds targeting mobile devices,!6853typeahead: do not store item data in an attribute,!6666Patch 1,!65463.0.0 wip - fixed the issue in which the test pid isn't killed if a test fails,!6503control markup changes added
Showing with 393 additions and 786 deletions
+393 -786
...@@ -1340,63 +1340,38 @@ select:focus:invalid:focus { ...@@ -1340,63 +1340,38 @@ select:focus:invalid:focus {
vertical-align: middle; vertical-align: middle;
} }
.input-append, .input-group {
.input-prepend { display: table;
margin-bottom: 5px;
font-size: 0;
white-space: nowrap;
}
.input-append input,
.input-prepend input,
.input-append select,
.input-prepend select,
.input-append .uneditable-input,
.input-prepend .uneditable-input,
.input-append .dropdown-menu,
.input-prepend .dropdown-menu {
font-size: 14px;
} }
.input-append input, .input-group[class*="span"] {
.input-prepend input,
.input-append select,
.input-prepend select,
.input-append .uneditable-input,
.input-prepend .uneditable-input {
position: relative;
float: none; float: none;
margin: 0; padding: 0;
font-size: 14px;
vertical-align: top;
border-radius: 0 4px 4px 0;
} }
.input-append input:focus, .input-group input,
.input-prepend input:focus, .input-group select,
.input-append select:focus, .input-group .uneditable-input {
.input-prepend select:focus, width: 100%;
.input-append .uneditable-input:focus,
.input-prepend .uneditable-input:focus {
z-index: 2;
} }
.input-append input[class*="span"], .input-group-addon,
.input-prepend input[class*="span"], .input-group-btn,
.input-append select[class*="span"], .input-group input,
.input-prepend select[class*="span"], .input-group .uneditable-input {
.input-append .uneditable-input[class*="span"], display: table-cell;
.input-prepend .uneditable-input[class*="span"] {
margin: 0; margin: 0;
border-radius: 0;
} }
.input-append .add-on, .input-group-addon,
.input-prepend .add-on { .input-group-btn {
display: inline-block; width: 1%;
width: auto; vertical-align: middle;
height: 20px; }
min-width: 16px;
padding: 6px; .input-group-addon {
padding: 6px 8px;
font-size: 14px; font-size: 14px;
font-weight: normal; font-weight: normal;
line-height: 20px; line-height: 20px;
...@@ -1404,244 +1379,69 @@ select:focus:invalid:focus { ...@@ -1404,244 +1379,69 @@ select:focus:invalid:focus {
text-shadow: 0 1px 0 #fff; text-shadow: 0 1px 0 #fff;
background-color: #eeeeee; background-color: #eeeeee;
border: 1px solid #ccc; border: 1px solid #ccc;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
} }
.input-append .add-on, .input-group input:first-child,
.input-prepend .add-on, .input-group .uneditable-input:first-child,
.input-append .btn, .input-group-addon:first-child {
.input-prepend .btn, border-bottom-left-radius: 4px;
.input-append .btn-group > .dropdown-toggle, border-top-left-radius: 4px;
.input-prepend .btn-group > .dropdown-toggle {
vertical-align: top;
border-radius: 0;
}
.input-append .active,
.input-prepend .active {
background-color: #dff0d8;
border-color: #468847;
}
.input-prepend .add-on,
.input-prepend .btn {
margin-right: -1px;
}
.input-prepend .add-on:first-child,
.input-prepend .btn:first-child {
border-radius: 4px 0 0 4px;
}
.input-append input,
.input-append select,
.input-append .uneditable-input {
border-radius: 4px 0 0 4px;
}
.input-append input + .btn-group .btn,
.input-append select + .btn-group .btn,
.input-append .uneditable-input + .btn-group .btn,
.input-append input + .btn-group .btn:last-child,
.input-append select + .btn-group .btn:last-child,
.input-append .uneditable-input + .btn-group .btn:last-child {
border-radius: 0 4px 4px 0;
}
.input-append .add-on,
.input-append .btn,
.input-append .btn-group {
margin-left: -1px;
}
.input-append .add-on:last-child,
.input-append .btn:last-child,
.input-append .btn-group:last-child > .dropdown-toggle {
border-radius: 0 4px 4px 0;
}
.input-prepend.input-append input,
.input-prepend.input-append select,
.input-prepend.input-append .uneditable-input {
border-radius: 0;
}
.input-prepend.input-append input + .btn-group .btn,
.input-prepend.input-append select + .btn-group .btn,
.input-prepend.input-append .uneditable-input + .btn-group .btn {
border-radius: 0 4px 4px 0;
}
.input-prepend.input-append .add-on:first-child,
.input-prepend.input-append .btn:first-child {
margin-right: -1px;
border-radius: 4px 0 0 4px;
}
.input-prepend.input-append .add-on:last-child,
.input-prepend.input-append .btn:last-child {
margin-left: -1px;
border-radius: 0 4px 4px 0;
}
.input-prepend.input-append .btn-group:first-child {
margin-left: 0;
}
input.search-query {
padding-right: 14px;
padding-right: 4px \9;
padding-left: 14px;
padding-left: 4px \9;
/* IE8 doesn't have border radius, so don't indent the padding */
margin-bottom: 0;
border-radius: 20px;
}
/* Allow for input prepend/append in search forms */
.form-search .input-append .search-query,
.form-search .input-prepend .search-query {
border-radius: 0;
}
.form-search .input-append .search-query {
border-radius: 20px 0 0 20px;
}
.form-search .input-append .btn {
border-radius: 0 20px 20px 0;
}
.form-search .input-prepend .search-query {
border-radius: 0 20px 20px 0;
}
.form-search .input-prepend .btn {
border-radius: 20px 0 0 20px;
}
.form-search input,
.form-inline input,
.form-horizontal input,
.form-search textarea,
.form-inline textarea,
.form-horizontal textarea,
.form-search select,
.form-inline select,
.form-horizontal select,
.form-search .help-inline,
.form-inline .help-inline,
.form-horizontal .help-inline,
.form-search .uneditable-input,
.form-inline .uneditable-input,
.form-horizontal .uneditable-input,
.form-search .input-prepend,
.form-inline .input-prepend,
.form-horizontal .input-prepend,
.form-search .input-append,
.form-inline .input-append,
.form-horizontal .input-append {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.form-search .hide,
.form-inline .hide,
.form-horizontal .hide {
display: none;
} }
.form-search label, .input-group-addon:first-child {
.form-inline label, border-right: 0;
.form-search .btn-group,
.form-inline .btn-group {
display: inline-block;
} }
.form-search .input-append, .input-group input:last-child,
.form-inline .input-append, .input-group .uneditable-input:last-child,
.form-search .input-prepend, .input-group-addon:last-child {
.form-inline .input-prepend { border-top-right-radius: 4px;
margin-bottom: 0; border-bottom-right-radius: 4px;
} }
.form-search .radio, .input-group-addon:last-child {
.form-search .checkbox, border-left: 0;
.form-inline .radio,
.form-inline .checkbox {
display: inline-block;
padding-left: 0;
} }
.form-search .radio label, .input-group-btn,
.form-search .checkbox label, .input-group-btn .btn {
.form-inline .radio label, white-space: nowrap;
.form-inline .checkbox label {
margin-bottom: 0;
vertical-align: middle;
} }
.form-search .radio input[type="radio"], .input-group-btn > .btn {
.form-search .checkbox input[type="checkbox"],
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
float: left; float: left;
margin-right: 3px; border-radius: 0;
margin-left: 0;
}
.control-group {
margin-bottom: 10px;
}
legend + .control-group {
margin-top: 20px;
-webkit-margin-top-collapse: separate;
}
.form-horizontal .control-group {
margin-bottom: 20px;
}
.form-horizontal .control-group:before,
.form-horizontal .control-group:after {
display: table;
line-height: 0;
content: "";
} }
.form-horizontal .control-group:after { .input-group-btn > .btn + .btn {
clear: both; border-left: 0;
} }
.form-horizontal .control-label { .input-group-btn.btn-group {
float: left; display: table-cell;
width: 160px;
padding-top: 5px;
text-align: right;
} }
.form-horizontal .controls { .input-group-btn:first-child > .btn:last-child,
margin-left: 180px; .input-group-btn.btn-group:first-child > .btn {
border-right: 0;
} }
.form-horizontal .help-block { .input-group-btn:first-child > .btn:first-child,
margin-bottom: 0; .input-group-btn.btn-group:first-child > .btn {
border-radius: 4px 0 0 4px;
} }
.form-horizontal input + .help-block, .input-group-btn:last-child > .btn:first-child,
.form-horizontal select + .help-block, .input-group-btn.btn-group:last-child > .btn:first-child {
.form-horizontal textarea + .help-block, border-left: 0;
.form-horizontal .uneditable-input + .help-block,
.form-horizontal .input-prepend + .help-block,
.form-horizontal .input-append + .help-block {
margin-top: 10px;
} }
.form-horizontal .form-actions { .input-group-btn:last-child > .btn:last-child,
padding-left: 180px; .input-group-btn.btn-group:last-child > .btn {
border-radius: 0 4px 4px 0;
} }
table { table {
...@@ -2753,21 +2553,22 @@ button.close { ...@@ -2753,21 +2553,22 @@ button.close {
color: #333333; color: #333333;
text-align: center; text-align: center;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
white-space: nowrap;
vertical-align: middle; vertical-align: middle;
cursor: pointer; cursor: pointer;
background-color: #f5f5f5; background-color: #f0f0f0;
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); background-image: -moz-linear-gradient(top, #fafafa, #e1e1e1);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fafafa), to(#e1e1e1));
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); background-image: -webkit-linear-gradient(top, #fafafa, #e1e1e1);
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); background-image: -o-linear-gradient(top, #fafafa, #e1e1e1);
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); background-image: linear-gradient(to bottom, #fafafa, #e1e1e1);
background-repeat: repeat-x; background-repeat: repeat-x;
border: 1px solid #bbbbbb; border: 1px solid #bbbbbb;
border-color: #e6e6e6 #e6e6e6 #bfbfbf; border-color: #e1e1e1 #e1e1e1 #bababa;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
border-bottom-color: #a2a2a2; border-bottom-color: #a2a2a2;
border-radius: 4px; border-radius: 4px;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa', endColorstr='#ffe1e1e1', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
...@@ -2779,12 +2580,12 @@ button.close { ...@@ -2779,12 +2580,12 @@ button.close {
.btn.disabled, .btn.disabled,
.btn[disabled] { .btn[disabled] {
color: #333333; color: #333333;
background-color: #e6e6e6; background-color: #e1e1e1;
} }
.btn:active, .btn:active,
.btn.active { .btn.active {
background-color: #cccccc \9; background-color: #c7c7c7 \9;
} }
.btn:hover { .btn:hover {
...@@ -3205,7 +3006,7 @@ input[type="button"].btn-block { ...@@ -3205,7 +3006,7 @@ input[type="button"].btn-block {
} }
.btn-group.open .btn.dropdown-toggle { .btn-group.open .btn.dropdown-toggle {
background-color: #e6e6e6; background-color: #e1e1e1;
} }
.btn-group.open .btn-primary.dropdown-toggle { .btn-group.open .btn-primary.dropdown-toggle {
......
...@@ -1119,13 +1119,15 @@ For example, <code><section></code> should be wrapped as inlin ...@@ -1119,13 +1119,15 @@ For example, <code><section></code> should be wrapped as inlin
<label class="control-label" for="inputPassword">Password</label> <label class="control-label" for="inputPassword">Password</label>
<div class="controls"> <div class="controls">
<input type="password" id="inputPassword" placeholder="Password"> <input type="password" id="inputPassword" placeholder="Password">
<div class="checkbox">
<label>
<input type="checkbox"> Remember me
</label>
</div>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<label class="checkbox">
<input type="checkbox"> Remember me
</label>
<button type="submit" class="btn">Sign in</button> <button type="submit" class="btn">Sign in</button>
</div> </div>
</div> </div>
...@@ -1146,9 +1148,11 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1146,9 +1148,11 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
&lt;/div&gt; &lt;/div&gt;
&lt;div class="control-group"&gt; &lt;div class="control-group"&gt;
&lt;div class="controls"&gt; &lt;div class="controls"&gt;
&lt;label class="checkbox"&gt; &lt;div class="checkbox"&gt;
&lt;input type="checkbox"&gt; Remember me &lt;label&gt;
&lt;/label&gt; &lt;input type="checkbox"&gt; Remember me
&lt;/label&gt;
&lt;/div&gt;
&lt;button type="submit" class="btn"&gt;Sign in&lt;/button&gt; &lt;button type="submit" class="btn"&gt;Sign in&lt;/button&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
...@@ -1284,85 +1288,116 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1284,85 +1288,116 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
<h2 id="forms-extending">Extending form controls</h2> <h2 id="forms-extending">Extending form controls</h2>
<p>Adding on top of existing browser controls, Bootstrap includes other useful form components.</p> <p>Adding on top of existing browser controls, Bootstrap includes other useful form components.</p>
<h3>Prepended and appended inputs</h3> <h3>Input groups</h3>
<p>Add text or buttons before or after any text-based input. Do note that <code>select</code> elements are not supported here.</p> <p>Add text or buttons before, after, or on both sides of any text-based input. Use <code>.input-group</code> with a <code>.add-on</code> to prepend or append elements to an <code>&lt;input&gt;</code>.</p>
<p>Avoid using <code>&lt;select&gt;</code> elements here as they cannot be fully styled in WebKit browsers.</p>
<h4>Default options</h4>
<p>Wrap an <code>.add-on</code> and an <code>input</code> with one of two classes to prepend or append text to an input.</p>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-prepend"> <div class="input-group span9">
<span class="add-on">@</span> <span class="input-group-addon">@</span>
<input id="prependedInput" type="text" placeholder="Username"> <input type="text" placeholder="Username">
</div> </div>
<br> <br>
<div class="input-append"> <div class="input-group span6">
<input id="appendedInput" type="text"> <input type="text">
<span class="add-on">.00</span> <span class="input-group-addon">.00</span>
</div>
<br>
<div class="input-group span3">
<span class="input-group-addon">$</span>
<input type="text">
<span class="input-group-addon">.00</span>
</div> </div>
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;div class="input-prepend"&gt; &lt;div class="input-group span9"&gt;
&lt;span class="add-on"&gt;@&lt;/span&gt; &lt;span class="input-group-addon"&gt;@&lt;/span&gt;
&lt;input id="prependedInput" type="text" placeholder="Username"&gt; &lt;input type="text" placeholder="Username"&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;div class="input-append"&gt;
&lt;input id="appendedInput" type="text"&gt; &lt;div class="input-group span6"&gt;
&lt;span class="add-on"&gt;.00&lt;/span&gt; &lt;input type="text"&gt;
&lt;span class="input-group-addon"&gt;.00&lt;/span&gt;
&lt;/div&gt; &lt;/div&gt;
</pre>
<h4>Combined</h4> &lt;div class="input-group span3"&gt;
<p>Use both classes and two instances of <code>.add-on</code> to prepend and append an input.</p> &lt;span class="input-group-addon"&gt;$&lt;/span&gt;
<form class="bs-docs-example form-inline"> &lt;input type="text"&gt;
<div class="input-prepend input-append"> &lt;span class="input-group-addon"&gt;.00&lt;/span&gt;
<span class="add-on">$</span>
<input id="appendedPrependedInput" type="text">
<span class="add-on">.00</span>
</div>
</form>
<pre class="prettyprint linenums">
&lt;div class="input-prepend input-append"&gt;
&lt;span class="add-on"&gt;$&lt;/span&gt;
&lt;input id="appendedPrependedInput" type="text"&gt;
&lt;span class="add-on"&gt;.00&lt;/span&gt;
&lt;/div&gt; &lt;/div&gt;
</pre> </pre>
<h4>Buttons instead of text</h4> <h4>Buttons instead of text</h4>
<p>Instead of a <code>&lt;span&gt;</code> with text, use a <code>.btn</code> to attach a button (or two) to an input.</p> <p>Buttons in input groups are a bit different and require one extra level of nesting. Instead of <code>.input-group-addon</code>, you'll need to use <code>.input-group-btn</code> to wrap the buttons. This is required due to default browser styles that cannot be overridden.</p>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-append"> <div class="input-group span7">
<input class="span3" id="appendedInputButton" type="text"> <span class="input-group-btn">
<button class="btn" type="button">Go!</button> <button class="btn" type="button">Go!</button>
</span>
<input type="text">
</div>
<br>
<div class="input-group span7">
<input type="text">
<span class="input-group-btn">
<button class="btn" type="button">Go!</button>
</span>
</div> </div>
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;div class="input-append"&gt; &lt;div class="input-group span7"&gt;
&lt;input class="span3" id="appendedInputButton" type="text"&gt; &lt;span class="input-group-btn"&gt;
&lt;button class="btn" type="button"&gt;Go!&lt;/button&gt; &lt;button class="btn" type="button"&gt;Go!&lt;/button&gt;
&lt;/span&gt;
&lt;input type="text"&gt;
&lt;/div&gt;
&lt;div class="input-group span7"&gt;
&lt;input type="text"&gt;
&lt;span class="input-group-btn"&gt;
&lt;button class="btn" type="button"&gt;Go!&lt;/button&gt;
&lt;/span&gt;
&lt;/div&gt; &lt;/div&gt;
</pre> </pre>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-append"> <div class="input-group span7">
<input class="span3" id="appendedInputButtons" type="text"> <input type="text">
<button class="btn" type="button">Search</button> <span class="input-group-btn">
<button class="btn" type="button">Options</button> <button class="btn" type="button">Search</button>
<button class="btn" type="button">Options</button>
</span>
</div>
<br>
<div class="input-group span7">
<span class="input-group-btn">
<button class="btn" type="button">Search</button>
<button class="btn" type="button">Options</button>
</span>
<input type="text">
</div> </div>
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;div class="input-append"&gt; &lt;div class="input-group span7"&gt;
&lt;input class="span3" id="appendedInputButton" type="text"&gt; &lt;input type="text"&gt;
&lt;button class="btn" type="button"&gt;Search&lt;/button&gt; &lt;span class="input-group-btn"&gt;
&lt;button class="btn" type="button"&gt;Options&lt;/button&gt; &lt;button class="btn" type="button"&gt;Search&lt;/button&gt;
&lt;button class="btn" type="button"&gt;Options&lt;/button&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div class="input-group span7"&gt;
&lt;span class="input-group-btn"&gt;
&lt;button class="btn" type="button"&gt;Search&lt;/button&gt;
&lt;button class="btn" type="button"&gt;Options&lt;/button&gt;
&lt;/span&gt;
&lt;input type="text"&gt;
&lt;/div&gt; &lt;/div&gt;
</pre> </pre>
<h4>Button dropdowns</h4> <h4>Button dropdowns</h4>
<p></p> <p></p>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-append"> <div class="input-group span7">
<input class="span3" id="appendedDropdownButton" type="text"> <div class="input-group-btn btn-group">
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="#">Action</a></li> <li><a href="#">Action</a></li>
...@@ -1372,27 +1407,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1372,27 +1407,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
<li><a href="#">Separated link</a></li> <li><a href="#">Separated link</a></li>
</ul> </ul>
</div><!-- /btn-group --> </div><!-- /btn-group -->
</div><!-- /input-append --> <input type="text">
</form> </div><!-- /input-group -->
<pre class="prettyprint linenums"> <br>
&lt;div class="input-append"&gt; <div class="input-group span7">
&lt;input id="appendedInputButtons" type="text"&gt; <input type="text">
&lt;input class="span3" id="appendedDropdownButton" type="text"&gt; <div class="input-group-btn btn-group">
&lt;div class="btn-group"&gt;
&lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt;
Action
&lt;span class="caret"&gt;&lt;/span&gt;
&lt;/button&gt;
&lt;ul class="dropdown-menu"&gt;
...
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</pre>
<form class="bs-docs-example">
<div class="input-prepend">
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="#">Action</a></li> <li><a href="#">Action</a></li>
...@@ -1402,12 +1422,11 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1402,12 +1422,11 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
<li><a href="#">Separated link</a></li> <li><a href="#">Separated link</a></li>
</ul> </ul>
</div><!-- /btn-group --> </div><!-- /btn-group -->
<input class="span2" id="prependedDropdownButton" type="text"> </div><!-- /input-group -->
</div><!-- /input-prepend -->
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;div class="input-prepend"&gt; &lt;div class="input-group span7"&gt;
&lt;div class="btn-group"&gt; &lt;div class="input-group-btn btn-group"&gt;
&lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt; &lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt;
Action Action
&lt;span class="caret"&gt;&lt;/span&gt; &lt;span class="caret"&gt;&lt;/span&gt;
...@@ -1416,48 +1435,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1416,48 +1435,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
... ...
&lt;/ul&gt; &lt;/ul&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;input class="span2" id="prependedDropdownButton" type="text"&gt; &lt;input type="text"&gt;
&lt;/div&gt; &lt;/div&gt;
</pre>
<form class="bs-docs-example"> &lt;div class="input-group span7"&gt;
<div class="input-prepend input-append"> &lt;input type="text"&gt;
<div class="btn-group"> &lt;div class="input-group-btn btn-group"&gt;
<button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</div><!-- /btn-group -->
<input class="span2" id="appendedPrependedDropdownButton" type="text">
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</div><!-- /btn-group -->
</div><!-- /input-prepend input-append -->
</form>
<pre class="prettyprint linenums">
&lt;div class="input-prepend input-append"&gt;
&lt;div class="btn-group"&gt;
&lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt;
Action
&lt;span class="caret"&gt;&lt;/span&gt;
&lt;/button&gt;
&lt;ul class="dropdown-menu"&gt;
...
&lt;/ul&gt;
&lt;/div&gt;
&lt;input class="span2" id="appendedPrependedDropdownButton" type="text"&gt;
&lt;div class="btn-group"&gt;
&lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt; &lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt;
Action Action
&lt;span class="caret"&gt;&lt;/span&gt; &lt;span class="caret"&gt;&lt;/span&gt;
...@@ -1471,8 +1454,8 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1471,8 +1454,8 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
<h4>Segmented dropdown groups</h4> <h4>Segmented dropdown groups</h4>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-prepend"> <div class="input-group span7">
<div class="btn-group"> <div class="input-group-btn btn-group">
<button class="btn" tabindex="-1">Action</button> <button class="btn" tabindex="-1">Action</button>
<button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1">
<span class="caret"></span> <span class="caret"></span>
...@@ -1487,9 +1470,10 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1487,9 +1470,10 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
</div> </div>
<input type="text" class="span3"> <input type="text" class="span3">
</div> </div>
<div class="input-append">
<input type="text" class="span3"> <div class="input-group span7">
<div class="btn-group"> <input type="text">
<div class="input-group-btn btn-group">
<button class="btn" tabindex="-1">Action</button> <button class="btn" tabindex="-1">Action</button>
<button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1">
<span class="caret"></span> <span class="caret"></span>
...@@ -1505,16 +1489,14 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1505,16 +1489,14 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
</div> </div>
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;form&gt; &lt;div class="input-prepend"&gt;
&lt;div class="input-prepend"&gt; &lt;div class="btn-group"&gt;...&lt;/div&gt;
&lt;div class="btn-group"&gt;...&lt;/div&gt; &lt;input type="text" class="span3"&gt;
&lt;input type="text" class="span3"&gt; &lt;/div&gt;
&lt;/div&gt; &lt;div class="input-append"&gt;
&lt;div class="input-append"&gt; &lt;input type="text" class="span3"&gt;
&lt;input type="text" class="span3"&gt; &lt;div class="btn-group"&gt;...&lt;/div&gt;
&lt;div class="btn-group"&gt;...&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;/form&gt;
</pre> </pre>
<h4>Search form</h4> <h4>Search form</h4>
......
...@@ -1059,13 +1059,15 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1059,13 +1059,15 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
<label class="control-label" for="inputPassword">Password</label> <label class="control-label" for="inputPassword">Password</label>
<div class="controls"> <div class="controls">
<input type="password" id="inputPassword" placeholder="Password"> <input type="password" id="inputPassword" placeholder="Password">
<div class="checkbox">
<label>
<input type="checkbox"> Remember me
</label>
</div>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<label class="checkbox">
<input type="checkbox"> Remember me
</label>
<button type="submit" class="btn">Sign in</button> <button type="submit" class="btn">Sign in</button>
</div> </div>
</div> </div>
...@@ -1086,9 +1088,11 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1086,9 +1088,11 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
&lt;/div&gt; &lt;/div&gt;
&lt;div class="control-group"&gt; &lt;div class="control-group"&gt;
&lt;div class="controls"&gt; &lt;div class="controls"&gt;
&lt;label class="checkbox"&gt; &lt;div class="checkbox"&gt;
&lt;input type="checkbox"&gt; Remember me &lt;label&gt;
&lt;/label&gt; &lt;input type="checkbox"&gt; Remember me
&lt;/label&gt;
&lt;/div&gt;
&lt;button type="submit" class="btn"&gt;Sign in&lt;/button&gt; &lt;button type="submit" class="btn"&gt;Sign in&lt;/button&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt; &lt;/div&gt;
...@@ -1224,85 +1228,116 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1224,85 +1228,116 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
<h2 id="forms-extending">Extending form controls</h2> <h2 id="forms-extending">Extending form controls</h2>
<p>Adding on top of existing browser controls, Bootstrap includes other useful form components.</p> <p>Adding on top of existing browser controls, Bootstrap includes other useful form components.</p>
<h3>Prepended and appended inputs</h3> <h3>Input groups</h3>
<p>Add text or buttons before or after any text-based input. Do note that <code>select</code> elements are not supported here.</p> <p>Add text or buttons before, after, or on both sides of any text-based input. Use <code>.input-group</code> with a <code>.add-on</code> to prepend or append elements to an <code>&lt;input&gt;</code>.</p>
<p>Avoid using <code>&lt;select&gt;</code> elements here as they cannot be fully styled in WebKit browsers.</p>
<h4>Default options</h4>
<p>Wrap an <code>.add-on</code> and an <code>input</code> with one of two classes to prepend or append text to an input.</p>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-prepend"> <div class="input-group span9">
<span class="add-on">@</span> <span class="input-group-addon">@</span>
<input id="prependedInput" type="text" placeholder="Username"> <input type="text" placeholder="Username">
</div> </div>
<br> <br>
<div class="input-append"> <div class="input-group span6">
<input id="appendedInput" type="text"> <input type="text">
<span class="add-on">.00</span> <span class="input-group-addon">.00</span>
</div>
<br>
<div class="input-group span3">
<span class="input-group-addon">$</span>
<input type="text">
<span class="input-group-addon">.00</span>
</div> </div>
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;div class="input-prepend"&gt; &lt;div class="input-group span9"&gt;
&lt;span class="add-on"&gt;@&lt;/span&gt; &lt;span class="input-group-addon"&gt;@&lt;/span&gt;
&lt;input id="prependedInput" type="text" placeholder="Username"&gt; &lt;input type="text" placeholder="Username"&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;div class="input-append"&gt;
&lt;input id="appendedInput" type="text"&gt; &lt;div class="input-group span6"&gt;
&lt;span class="add-on"&gt;.00&lt;/span&gt; &lt;input type="text"&gt;
&lt;span class="input-group-addon"&gt;.00&lt;/span&gt;
&lt;/div&gt; &lt;/div&gt;
</pre>
<h4>Combined</h4> &lt;div class="input-group span3"&gt;
<p>Use both classes and two instances of <code>.add-on</code> to prepend and append an input.</p> &lt;span class="input-group-addon"&gt;$&lt;/span&gt;
<form class="bs-docs-example form-inline"> &lt;input type="text"&gt;
<div class="input-prepend input-append"> &lt;span class="input-group-addon"&gt;.00&lt;/span&gt;
<span class="add-on">$</span>
<input id="appendedPrependedInput" type="text">
<span class="add-on">.00</span>
</div>
</form>
<pre class="prettyprint linenums">
&lt;div class="input-prepend input-append"&gt;
&lt;span class="add-on"&gt;$&lt;/span&gt;
&lt;input id="appendedPrependedInput" type="text"&gt;
&lt;span class="add-on"&gt;.00&lt;/span&gt;
&lt;/div&gt; &lt;/div&gt;
</pre> </pre>
<h4>Buttons instead of text</h4> <h4>Buttons instead of text</h4>
<p>Instead of a <code>&lt;span&gt;</code> with text, use a <code>.btn</code> to attach a button (or two) to an input.</p> <p>Buttons in input groups are a bit different and require one extra level of nesting. Instead of <code>.input-group-addon</code>, you'll need to use <code>.input-group-btn</code> to wrap the buttons. This is required due to default browser styles that cannot be overridden.</p>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-append"> <div class="input-group span7">
<input class="span3" id="appendedInputButton" type="text"> <span class="input-group-btn">
<button class="btn" type="button">Go!</button> <button class="btn" type="button">Go!</button>
</span>
<input type="text">
</div>
<br>
<div class="input-group span7">
<input type="text">
<span class="input-group-btn">
<button class="btn" type="button">Go!</button>
</span>
</div> </div>
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;div class="input-append"&gt; &lt;div class="input-group span7"&gt;
&lt;input class="span3" id="appendedInputButton" type="text"&gt; &lt;span class="input-group-btn"&gt;
&lt;button class="btn" type="button"&gt;Go!&lt;/button&gt; &lt;button class="btn" type="button"&gt;Go!&lt;/button&gt;
&lt;/span&gt;
&lt;input type="text"&gt;
&lt;/div&gt;
&lt;div class="input-group span7"&gt;
&lt;input type="text"&gt;
&lt;span class="input-group-btn"&gt;
&lt;button class="btn" type="button"&gt;Go!&lt;/button&gt;
&lt;/span&gt;
&lt;/div&gt; &lt;/div&gt;
</pre> </pre>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-append"> <div class="input-group span7">
<input class="span3" id="appendedInputButtons" type="text"> <input type="text">
<button class="btn" type="button">Search</button> <span class="input-group-btn">
<button class="btn" type="button">Options</button> <button class="btn" type="button">Search</button>
<button class="btn" type="button">Options</button>
</span>
</div>
<br>
<div class="input-group span7">
<span class="input-group-btn">
<button class="btn" type="button">Search</button>
<button class="btn" type="button">Options</button>
</span>
<input type="text">
</div> </div>
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;div class="input-append"&gt; &lt;div class="input-group span7"&gt;
&lt;input class="span3" id="appendedInputButton" type="text"&gt; &lt;input type="text"&gt;
&lt;button class="btn" type="button"&gt;Search&lt;/button&gt; &lt;span class="input-group-btn"&gt;
&lt;button class="btn" type="button"&gt;Options&lt;/button&gt; &lt;button class="btn" type="button"&gt;Search&lt;/button&gt;
&lt;button class="btn" type="button"&gt;Options&lt;/button&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div class="input-group span7"&gt;
&lt;span class="input-group-btn"&gt;
&lt;button class="btn" type="button"&gt;Search&lt;/button&gt;
&lt;button class="btn" type="button"&gt;Options&lt;/button&gt;
&lt;/span&gt;
&lt;input type="text"&gt;
&lt;/div&gt; &lt;/div&gt;
</pre> </pre>
<h4>Button dropdowns</h4> <h4>Button dropdowns</h4>
<p></p> <p></p>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-append"> <div class="input-group span7">
<input class="span3" id="appendedDropdownButton" type="text"> <div class="input-group-btn btn-group">
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="#">Action</a></li> <li><a href="#">Action</a></li>
...@@ -1312,27 +1347,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1312,27 +1347,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
<li><a href="#">Separated link</a></li> <li><a href="#">Separated link</a></li>
</ul> </ul>
</div><!-- /btn-group --> </div><!-- /btn-group -->
</div><!-- /input-append --> <input type="text">
</form> </div><!-- /input-group -->
<pre class="prettyprint linenums"> <br>
&lt;div class="input-append"&gt; <div class="input-group span7">
&lt;input id="appendedInputButtons" type="text"&gt; <input type="text">
&lt;input class="span3" id="appendedDropdownButton" type="text"&gt; <div class="input-group-btn btn-group">
&lt;div class="btn-group"&gt;
&lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt;
Action
&lt;span class="caret"&gt;&lt;/span&gt;
&lt;/button&gt;
&lt;ul class="dropdown-menu"&gt;
...
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</pre>
<form class="bs-docs-example">
<div class="input-prepend">
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="#">Action</a></li> <li><a href="#">Action</a></li>
...@@ -1342,12 +1362,11 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1342,12 +1362,11 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
<li><a href="#">Separated link</a></li> <li><a href="#">Separated link</a></li>
</ul> </ul>
</div><!-- /btn-group --> </div><!-- /btn-group -->
<input class="span2" id="prependedDropdownButton" type="text"> </div><!-- /input-group -->
</div><!-- /input-prepend -->
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;div class="input-prepend"&gt; &lt;div class="input-group span7"&gt;
&lt;div class="btn-group"&gt; &lt;div class="input-group-btn btn-group"&gt;
&lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt; &lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt;
Action Action
&lt;span class="caret"&gt;&lt;/span&gt; &lt;span class="caret"&gt;&lt;/span&gt;
...@@ -1356,48 +1375,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1356,48 +1375,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
... ...
&lt;/ul&gt; &lt;/ul&gt;
&lt;/div&gt; &lt;/div&gt;
&lt;input class="span2" id="prependedDropdownButton" type="text"&gt; &lt;input type="text"&gt;
&lt;/div&gt; &lt;/div&gt;
</pre>
<form class="bs-docs-example"> &lt;div class="input-group span7"&gt;
<div class="input-prepend input-append"> &lt;input type="text"&gt;
<div class="btn-group"> &lt;div class="input-group-btn btn-group"&gt;
<button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</div><!-- /btn-group -->
<input class="span2" id="appendedPrependedDropdownButton" type="text">
<div class="btn-group">
<button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#">Action</a></li>
<li><a href="#">Another action</a></li>
<li><a href="#">Something else here</a></li>
<li class="divider"></li>
<li><a href="#">Separated link</a></li>
</ul>
</div><!-- /btn-group -->
</div><!-- /input-prepend input-append -->
</form>
<pre class="prettyprint linenums">
&lt;div class="input-prepend input-append"&gt;
&lt;div class="btn-group"&gt;
&lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt;
Action
&lt;span class="caret"&gt;&lt;/span&gt;
&lt;/button&gt;
&lt;ul class="dropdown-menu"&gt;
...
&lt;/ul&gt;
&lt;/div&gt;
&lt;input class="span2" id="appendedPrependedDropdownButton" type="text"&gt;
&lt;div class="btn-group"&gt;
&lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt; &lt;button class="btn dropdown-toggle" data-toggle="dropdown"&gt;
Action Action
&lt;span class="caret"&gt;&lt;/span&gt; &lt;span class="caret"&gt;&lt;/span&gt;
...@@ -1411,8 +1394,8 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1411,8 +1394,8 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
<h4>Segmented dropdown groups</h4> <h4>Segmented dropdown groups</h4>
<form class="bs-docs-example"> <form class="bs-docs-example">
<div class="input-prepend"> <div class="input-group span7">
<div class="btn-group"> <div class="input-group-btn btn-group">
<button class="btn" tabindex="-1">Action</button> <button class="btn" tabindex="-1">Action</button>
<button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1">
<span class="caret"></span> <span class="caret"></span>
...@@ -1427,9 +1410,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1427,9 +1410,12 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
</div> </div>
<input type="text" class="span3"> <input type="text" class="span3">
</div> </div>
<div class="input-append">
<input type="text" class="span3"> <br>
<div class="btn-group">
<div class="input-group span7">
<input type="text">
<div class="input-group-btn btn-group">
<button class="btn" tabindex="-1">Action</button> <button class="btn" tabindex="-1">Action</button>
<button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1">
<span class="caret"></span> <span class="caret"></span>
...@@ -1445,16 +1431,14 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin ...@@ -1445,16 +1431,14 @@ For example, &lt;code&gt;&lt;section&gt;&lt;/code&gt; should be wrapped as inlin
</div> </div>
</form> </form>
<pre class="prettyprint linenums"> <pre class="prettyprint linenums">
&lt;form&gt; &lt;div class="input-prepend"&gt;
&lt;div class="input-prepend"&gt; &lt;div class="btn-group"&gt;...&lt;/div&gt;
&lt;div class="btn-group"&gt;...&lt;/div&gt; &lt;input type="text" class="span3"&gt;
&lt;input type="text" class="span3"&gt; &lt;/div&gt;
&lt;/div&gt; &lt;div class="input-append"&gt;
&lt;div class="input-append"&gt; &lt;input type="text" class="span3"&gt;
&lt;input type="text" class="span3"&gt; &lt;div class="btn-group"&gt;...&lt;/div&gt;
&lt;div class="btn-group"&gt;...&lt;/div&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;/form&gt;
</pre> </pre>
<h4>Search form</h4> <h4>Search form</h4>
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
text-align: center; text-align: center;
vertical-align: middle; vertical-align: middle;
cursor: pointer; cursor: pointer;
white-space: nowrap;
.buttonBackground(@btn-background, @btn-background-highlight, @grayDark, 0 1px 1px rgba(255,255,255,.75)); .buttonBackground(@btn-background, @btn-background-highlight, @grayDark, 0 1px 1px rgba(255,255,255,.75));
border: 1px solid @btn-border; border: 1px solid @btn-border;
border-bottom-color: darken(@btn-border, 10%); border-bottom-color: darken(@btn-border, 10%);
......
...@@ -421,273 +421,112 @@ select:focus:invalid { ...@@ -421,273 +421,112 @@ select:focus:invalid {
// INPUT GROUPS
// ------------
// Allow us to put symbols and text within the input field for a cleaner look
.input-append,
.input-prepend {
margin-bottom: 5px;
font-size: 0; // white space collapse hack
white-space: nowrap; // Prevent span and input from separating
// Reset the white space collapse hack // Input groups
input, // --------------------------------------------------
select,
.uneditable-input,
.dropdown-menu {
font-size: @font-size-base;
}
input, // Base styles
select, // -------------------------
.uneditable-input { .input-group {
position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness display: table;
float: none; // Undo the float from grid sizing
margin: 0; // Prevent bottom margin from screwing up alignment in stacked forms
font-size: @font-size-base;
vertical-align: top;
border-radius: 0 @input-border-radius @input-border-radius 0;
// Make input on top when focused so blue border and shadow always show
&:focus {
z-index: 2;
}
}
input[class*="span"],
select[class*="span"],
.uneditable-input[class*="span"] {
margin: 0;
}
.add-on {
display: inline-block;
width: auto;
height: @line-height-base;
min-width: 16px;
padding: 6px;
font-size: @font-size-base;
font-weight: normal;
line-height: @line-height-base;
text-align: center;
text-shadow: 0 1px 0 #fff;
background-color: @grayLighter;
border: 1px solid #ccc;
}
.add-on,
.btn,
.btn-group > .dropdown-toggle {
vertical-align: top;
border-radius: 0;
}
.active {
background-color: @state-success-background;
border-color: @state-success-text;
}
}
.input-prepend { // Undo padding and float of grid classes
.add-on, &[class*="span"] {
.btn { float: none;
margin-right: -1px; padding: 0;
} }
.add-on:first-child,
.btn:first-child {
// FYI, `.btn:first-child` accounts for a button group that's prepended
border-radius: @input-border-radius 0 0 @input-border-radius;
}
}
.input-append {
input, input,
select, select,
.uneditable-input { .uneditable-input {
border-radius: @input-border-radius 0 0 @input-border-radius; width: 100%;
+ .btn-group .btn,
+ .btn-group .btn:last-child {
border-radius: 0 @input-border-radius @input-border-radius 0;
}
}
.add-on,
.btn,
.btn-group {
margin-left: -1px;
}
.add-on:last-child,
.btn:last-child,
.btn-group:last-child > .dropdown-toggle {
border-radius: 0 @input-border-radius @input-border-radius 0;
} }
} }
// Remove all border-radius for inputs with both prepend and append // Display as table-cell
.input-prepend.input-append { // -------------------------
input, .input-group-addon,
select, .input-group-btn,
.uneditable-input { .input-group input,
border-radius: 0; .input-group .uneditable-input {
+ .btn-group .btn { display: table-cell;
border-radius: 0 @input-border-radius @input-border-radius 0; margin: 0;
} border-radius: 0;
}
.add-on:first-child,
.btn:first-child {
margin-right: -1px;
border-radius: @input-border-radius 0 0 @input-border-radius;
}
.add-on:last-child,
.btn:last-child {
margin-left: -1px;
border-radius: 0 @input-border-radius @input-border-radius 0;
}
.btn-group:first-child {
margin-left: 0;
}
} }
// Addon and addon wrapper for buttons
.input-group-addon,
.input-group-btn {
width: 1%;
// SEARCH FORM vertical-align: middle; // Match the inputs
// -----------
input.search-query {
padding-right: 14px;
padding-right: 4px \9;
padding-left: 14px;
padding-left: 4px \9; /* IE8 doesn't have border radius, so don't indent the padding */
margin-bottom: 0; // Remove the default margin on all inputs
border-radius: @input-border-radius-search;
} }
/* Allow for input prepend/append in search forms */ // Text input groups
.form-search .input-append .search-query, // -------------------------
.form-search .input-prepend .search-query { .input-group-addon {
border-radius: 0; // Override due to specificity .box-sizing(border-box);
padding: 6px 8px;
font-size: @font-size-base;
font-weight: normal;
line-height: @line-height-base;
text-align: center;
text-shadow: 0 1px 0 #fff;
background-color: @grayLighter;
border: 1px solid #ccc;
} }
.form-search .input-append .search-query {
border-radius: @input-border-radius-search 0 0 @input-border-radius-search; // Reset rounded corners
.input-group input:first-child,
.input-group .uneditable-input:first-child,
.input-group-addon:first-child {
.border-left-radius(@border-radius-base);
} }
.form-search .input-append .btn { .input-group-addon:first-child {
border-radius: 0 @input-border-radius-search @input-border-radius-search 0; border-right: 0;
} }
.form-search .input-prepend .search-query { .input-group input:last-child,
border-radius: 0 @input-border-radius-search @input-border-radius-search 0; .input-group .uneditable-input:last-child,
.input-group-addon:last-child {
.border-right-radius(@border-radius-base);
} }
.form-search .input-prepend .btn { .input-group-addon:last-child {
border-radius: @input-border-radius-search 0 0 @input-border-radius-search; border-left: 0;
} }
// Button input groups
// -------------------------
.input-group-btn,
// HORIZONTAL & VERTICAL FORMS .input-group-btn .btn {
// --------------------------- white-space: nowrap;
// Common properties
// -----------------
.form-search,
.form-inline,
.form-horizontal {
input,
textarea,
select,
.help-inline,
.uneditable-input,
.input-prepend,
.input-append {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
// Re-hide hidden elements due to specifity
.hide {
display: none;
}
}
.form-search label,
.form-inline label,
.form-search .btn-group,
.form-inline .btn-group {
display: inline-block;
}
// Remove margin for input-prepend/-append
.form-search .input-append,
.form-inline .input-append,
.form-search .input-prepend,
.form-inline .input-prepend {
margin-bottom: 0;
} }
// Inline checkbox/radio labels (remove padding on left) .input-group-btn > .btn {
.form-search .radio, float: left; // Collapse white-space
.form-search .checkbox, border-radius: 0;
.form-inline .radio, + .btn {
.form-inline .checkbox { border-left: 0;
display: inline-block;
padding-left: 0;
label {
margin-bottom: 0;
vertical-align: middle;
} }
} }
// Remove float and margin, set to inline-block .input-group-btn.btn-group {
.form-search .radio input[type="radio"], display: table-cell;
.form-search .checkbox input[type="checkbox"],
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
float: left;
margin-right: 3px;
margin-left: 0;
}
// Margin to space out fieldsets
.control-group {
margin-bottom: @line-height-base / 2;
}
// Legend collapses margin, so next element is responsible for spacing
legend + .control-group {
margin-top: @line-height-base;
-webkit-margin-top-collapse: separate;
} }
// Prepend
// Horizontal-specific styles .input-group-btn {
// -------------------------- &:first-child > .btn:last-child,
&.btn-group:first-child > .btn {
.form-horizontal { border-right: 0;
// Increase spacing between groups
.control-group {
margin-bottom: @line-height-base;
.clearfix();
}
// Float the labels left
.control-label {
float: left;
width: @component-offset-horizontal - 20;
padding-top: 5px;
text-align: right;
} }
// Move over all input controls and content &:first-child > .btn:first-child,
.controls { &.btn-group:first-child > .btn {
margin-left: @component-offset-horizontal; border-radius: @border-radius-base 0 0 @border-radius-base;
} }
// Remove bottom margin on block level help text since that's accounted for on .control-group }
.help-block { // Append
margin-bottom: 0; .input-group-btn {
} &:last-child > .btn:first-child,
// And apply it only to .help-block instances that follow a form control &.btn-group:last-child > .btn:first-child {
input, border-left: 0;
select,
textarea,
.uneditable-input,
.input-prepend,
.input-append {
+ .help-block {
margin-top: @line-height-base / 2;
}
} }
// Move over buttons in .form-actions to align with .controls &:last-child > .btn:last-child,
.form-actions { &.btn-group:last-child > .btn {
padding-left: @component-offset-horizontal; border-radius: 0 @border-radius-base @border-radius-base 0;
} }
} }
...@@ -76,8 +76,8 @@ ...@@ -76,8 +76,8 @@
// Buttons // Buttons
// ------------------------- // -------------------------
@btn-background: #fff; @btn-background: #fafafa;
@btn-background-highlight: darken(#fff, 10%); @btn-background-highlight: darken(@btn-background, 10%);
@btn-border: #bbb; @btn-border: #bbb;
@btn-backround-primary: @link-color; @btn-backround-primary: @link-color;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment