2012-06-29 00:46:45 -04:00
//
// Forms
// --------------------------------------------------
2011-06-30 03:15:37 -04:00
2011-11-12 03:46:02 -05:00
2012-11-30 16:35:20 -05:00
// Non-controls
2012-11-30 03:21:44 -05:00
// -------------------------
2011-05-03 21:09:25 -04:00
form {
2013-01-16 15:20:34 -05:00
margin: 0;
2012-01-20 16:16:40 -05:00
}
fieldset {
padding: 0;
margin: 0;
border: 0;
2011-08-25 03:13:40 -04:00
}
2011-08-17 01:58:01 -04:00
2011-09-29 04:40:27 -04:00
legend {
display: block;
width: 100%;
2012-01-20 16:16:40 -05:00
padding: 0;
2013-05-09 20:20:46 -04:00
margin-bottom: @line-height-computed;
2013-03-06 11:38:20 -05:00
font-size: (@font-size-base * 1.5);
2013-05-15 02:21:30 -04:00
line-height: inherit;
2013-04-21 22:35:36 -04:00
color: @gray-dark;
2012-01-20 16:16:40 -05:00
border: 0;
2012-05-13 20:43:04 -04:00
border-bottom: 1px solid #e5e5e5;
2011-08-25 03:13:40 -04:00
}
2011-08-17 01:58:01 -04:00
2011-08-25 03:13:40 -04:00
label {
2012-11-30 16:35:20 -05:00
display: inline-block;
2011-09-29 04:40:27 -04:00
margin-bottom: 5px;
2012-11-30 16:35:20 -05:00
font-weight: bold;
2011-08-25 03:13:40 -04:00
}
2011-08-17 01:58:01 -04:00
2012-05-15 02:40:06 -04:00
// Form controls
// -------------------------
2012-05-15 02:42:32 -04:00
// Shared size and type resets
2011-08-25 03:13:40 -04:00
select,
2012-05-15 02:40:06 -04:00
textarea,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
2013-03-04 02:31:09 -05:00
input[type="color"] {
2013-05-08 00:56:55 -04:00
display: block;
2013-01-31 16:00:22 -05:00
min-height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
2013-05-15 02:21:30 -04:00
padding: @padding-base-vertical @padding-base-horizontal;
2012-11-30 17:45:25 -05:00
font-size: @font-size-base;
line-height: @line-height-base;
2011-08-25 03:13:40 -04:00
color: @gray;
2012-09-23 19:06:28 -04:00
vertical-align: middle;
2013-03-31 20:33:55 -04:00
background-color: @input-bg;
2012-11-30 18:05:23 -05:00
border: 1px solid @input-border;
border-radius: @input-border-radius;
2013-01-16 15:20:34 -05:00
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
2013-05-15 13:16:11 -04:00
.transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
2013-05-15 10:14:44 -04:00
&:focus {
border-color: rgba(82,168,236,.8);
outline: 0;
2013-05-15 13:16:11 -04:00
.box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)");
2013-05-15 10:14:44 -04:00
}
2013-06-20 20:02:10 -04:00
// Disabled and read-only inputs
// Note: HTML5 says that inputs under a fieldset > legend:first-child won't be
// disabled if the fieldset is disabled. Due to implementation difficulty,
// we don't honor that edge case; we style them as disabled anyway.
&[disabled],
&[readonly],
fieldset[disabled] & {
cursor: not-allowed;
background-color: @input-bg-disabled;
}
2012-05-15 02:40:06 -04:00
}
2012-05-15 03:17:02 -04:00
// Reset appearance properties for textual inputs and textarea
2012-11-30 03:53:07 -05:00
// Can't be on input[type=*] selectors or it's too specific
2012-05-15 03:17:02 -04:00
input,
2012-11-30 03:53:07 -05:00
select,
2013-03-04 02:31:09 -05:00
textarea {
2012-11-30 03:53:07 -05:00
width: 100%;
2012-05-15 03:17:02 -04:00
}
2012-11-30 03:53:07 -05:00
2012-11-30 16:35:20 -05:00
// Reset width of input images, buttons, radios, checkboxes
input[type="file"],
input[type="image"],
input[type="submit"],
input[type="reset"],
input[type="button"],
input[type="radio"],
input[type="checkbox"] {
width: auto; // Override of generic input selector
}
2013-04-14 00:45:21 -04:00
// Override content-box in Normalize (* isn't specific enough)
input[type="search"] {
.box-sizing(border-box);
}
2012-05-18 01:00:49 -04:00
// Reset height since textareas have rows
textarea {
height: auto;
}
2012-11-30 03:53:07 -05:00
2012-05-15 03:17:02 -04:00
// Position radios and checkboxes better
2012-05-15 02:40:06 -04:00
input[type="radio"],
input[type="checkbox"] {
2012-08-14 18:34:10 -04:00
margin: 4px 0 0;
2012-08-14 18:29:47 -04:00
margin-top: 1px \9; /* IE8-9 */
2012-05-15 03:17:02 -04:00
line-height: normal;
2012-01-25 14:21:44 -05:00
}
2012-05-15 03:17:02 -04:00
2011-11-12 03:46:02 -05:00
// Set the height of select and file controls to match text inputs
2011-08-25 03:13:40 -04:00
select,
2012-01-27 23:05:03 -05:00
input[type="file"] {
2013-01-31 16:00:22 -05:00
height: @input-height-base; /* In IE7, the height of the select element cannot be changed by height, only font-size. TODO: Check if this is still needed when dropping IE7 support */
line-height: @input-height-base;
2011-09-11 21:01:29 -04:00
}
2011-09-02 01:53:24 -04:00
2011-09-14 11:58:20 -04:00
// Make multiple select elements height not fixed
2011-12-27 17:08:07 -05:00
select[multiple],
select[size] {
2012-01-25 14:51:13 -05:00
height: auto;
2011-09-14 11:58:20 -04:00
}
2013-05-20 01:06:10 -04:00
// Fix optgroup Firefox bug per https://github.com/twitter/bootstrap/issues/7611
select optgroup {
font-size: inherit;
font-style: inherit;
font-family: inherit;
}
2012-05-15 12:04:44 -04:00
// Focus for select, file, radio, and checkbox
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
.tab-focus();
}
2012-01-26 13:00:09 -05:00
2013-07-01 22:49:29 -04:00
// Fix for Chrome number input
// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button.
// See https://github.com/twitter/bootstrap/issues/8350 for more.
input[type="number"] {
2013-07-01 23:18:44 -04:00
&::-webkit-outer-spin-button,
2013-07-01 22:49:29 -04:00
&::-webkit-inner-spin-button {
height: auto;
}
}
2011-08-17 01:58:01 -04:00
2012-07-07 15:52:05 -04:00
// Placeholder
// -------------------------
2012-09-11 01:41:14 -04:00
// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector
2012-07-07 15:52:05 -04:00
input,
textarea {
.placeholder();
}
2011-08-25 03:13:40 -04:00
2012-01-05 17:11:41 -05:00
// CHECKBOXES & RADIOS
// -------------------
// Indent the labels to position radios/checkboxes as hanging
.radio,
.checkbox {
2012-11-30 16:35:20 -05:00
display: block;
2013-05-09 20:20:46 -04:00
min-height: @line-height-computed; // clear the floating input if there is no label text
2013-05-09 18:05:06 -04:00
margin-top: 10px;
margin-bottom: 10px;
2012-09-20 14:45:59 -04:00
padding-left: 20px;
2013-05-08 00:56:55 -04:00
vertical-align: middle;
2013-01-16 15:20:34 -05:00
label {
display: inline;
margin-bottom: 0;
font-weight: normal;
2013-05-03 14:56:00 -04:00
cursor: pointer;
2013-01-16 15:20:34 -05:00
}
2012-01-05 17:11:41 -05:00
}
2012-01-27 23:05:03 -05:00
.radio input[type="radio"],
2013-01-16 15:20:34 -05:00
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
2012-01-05 17:11:41 -05:00
float: left;
2012-09-20 14:45:59 -04:00
margin-left: -20px;
2012-01-05 17:11:41 -05:00
}
2013-01-16 15:20:34 -05:00
.radio + .radio,
.checkbox + .checkbox {
2013-05-09 18:05:06 -04:00
margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
2013-01-16 15:20:34 -05:00
}
2012-01-05 17:11:41 -05:00
2013-05-03 01:52:32 -04:00
/*
2012-01-05 17:11:41 -05:00
// Move the options list down to align with labels
.controls > .radio:first-child,
.controls > .checkbox:first-child {
2013-06-25 19:03:57 -04:00
padding-top: 5px; // has to be padding because margin collapses
2012-01-05 17:11:41 -05:00
}
2013-05-03 01:52:32 -04:00
*/
2012-01-05 17:11:41 -05:00
2012-01-07 02:59:22 -05:00
// Radios and checkboxes on same line
2013-01-16 15:20:34 -05:00
.radio-inline,
.checkbox-inline {
2012-01-07 02:59:22 -05:00
display: inline-block;
2013-05-03 01:52:32 -04:00
// padding-top: 5px;
2013-01-16 15:20:34 -05:00
padding-left: 20px;
2012-01-07 03:26:58 -05:00
margin-bottom: 0;
2012-01-28 17:50:56 -05:00
vertical-align: middle;
2013-01-16 15:20:34 -05:00
font-weight: normal;
2013-05-03 14:56:00 -04:00
cursor: pointer;
2012-01-07 02:59:22 -05:00
}
2013-01-16 15:20:34 -05:00
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
margin-top: 0;
2012-01-07 03:26:58 -05:00
margin-left: 10px; // space out consecutive inline controls
2012-01-07 02:59:22 -05:00
}
2012-01-05 17:11:41 -05:00
2011-09-28 22:15:31 -04:00
// INPUT SIZES
// -----------
2012-09-26 01:16:47 -04:00
select,
textarea,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
2013-03-04 02:31:09 -05:00
input[type="color"] {
2012-09-26 01:16:47 -04:00
&.input-large {
2013-06-17 12:56:17 -04:00
min-height: @input-height-large;
2013-05-15 02:21:30 -04:00
padding: @padding-large-vertical @padding-large-horizontal;
2012-11-30 17:45:25 -05:00
font-size: @font-size-large;
border-radius: @border-radius-large;
2012-09-26 01:16:47 -04:00
}
&.input-small {
2013-02-02 20:31:26 -05:00
min-height: @input-height-small;
2013-05-15 02:21:30 -04:00
padding: @padding-small-vertical @padding-small-horizontal;
2012-11-30 17:45:25 -05:00
font-size: @font-size-small;
border-radius: @border-radius-small;
2012-09-26 01:16:47 -04:00
}
}
2011-08-17 01:58:01 -04:00
2012-09-25 18:01:03 -04:00
2012-01-06 00:43:28 -05:00
2011-11-12 03:46:02 -05:00
// FORM FIELD FEEDBACK STATES
// --------------------------
2011-09-29 04:40:27 -04:00
2011-11-12 03:46:02 -05:00
// Warning
2012-12-26 16:57:52 -05:00
.has-warning {
2013-05-16 23:17:42 -04:00
.form-field-validation(@state-warning-text, @state-warning-text, @state-warning-bg);
2012-01-24 19:54:35 -05:00
}
// Error
2012-12-26 16:57:52 -05:00
.has-error {
2013-05-16 23:17:42 -04:00
.form-field-validation(@state-danger-text, @state-danger-text, @state-danger-bg);
2011-11-12 03:46:02 -05:00
}
// Success
2012-12-26 16:57:52 -05:00
.has-success {
2013-05-16 23:17:42 -04:00
.form-field-validation(@state-success-text, @state-success-text, @state-success-bg);
2011-11-12 03:46:02 -05:00
}
2011-09-29 04:40:27 -04:00
2011-09-28 22:15:31 -04:00
// HELP TEXT
// ---------
2012-01-06 00:43:28 -05:00
.help-block {
2012-02-13 01:49:06 -05:00
display: block; // account for any element using help-block
2013-05-09 18:05:06 -04:00
margin-top: 5px;
margin-bottom: 10px;
color: lighten(@text-color, 25%); // lighten the text some for contrast
2011-05-03 21:09:25 -04:00
}
2011-08-17 01:58:01 -04:00
2011-09-28 22:15:31 -04:00
2011-11-12 03:46:02 -05:00
2012-12-10 00:46:14 -05:00
// Input groups
// --------------------------------------------------
2012-09-18 02:11:49 -04:00
2012-12-10 00:46:14 -05:00
// Base styles
// -------------------------
.input-group {
display: table;
2013-06-27 23:15:44 -04:00
border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table
2012-09-20 14:37:34 -04:00
2012-12-10 00:46:14 -05:00
// Undo padding and float of grid classes
2013-05-08 00:56:55 -04:00
&.col {
2012-12-10 00:46:14 -05:00
float: none;
2013-05-08 00:56:55 -04:00
padding-left: 0;
padding-right: 0;
2012-03-12 02:21:38 -04:00
}
2012-09-20 14:37:34 -04:00
2012-01-07 04:22:52 -05:00
input,
2013-03-04 02:31:09 -05:00
select {
2012-12-10 00:46:14 -05:00
width: 100%;
2013-05-08 00:56:55 -04:00
margin-bottom: 0;
2012-03-12 02:21:38 -04:00
}
}
2012-09-20 14:37:34 -04:00
2012-12-10 00:46:14 -05:00
// Display as table-cell
// -------------------------
.input-group-addon,
.input-group-btn,
2013-03-04 02:31:09 -05:00
.input-group input {
2012-12-10 00:46:14 -05:00
display: table-cell;
2013-05-09 17:48:27 -04:00
&:not(:first-child):not(:last-child) {
2013-01-31 22:39:26 -05:00
border-radius: 0;
}
2011-05-03 21:09:25 -04:00
}
2012-12-10 00:46:14 -05:00
// Addon and addon wrapper for buttons
.input-group-addon,
.input-group-btn {
width: 1%;
2013-06-25 08:34:57 -04:00
white-space: nowrap;
2012-12-10 00:46:14 -05:00
vertical-align: middle; // Match the inputs
2011-09-29 04:47:55 -04:00
}
2012-12-10 00:46:14 -05:00
// Text input groups
// -------------------------
.input-group-addon {
.box-sizing(border-box);
2013-05-24 08:14:11 -04:00
padding: @padding-base-vertical @padding-base-horizontal;
2012-12-10 00:46:14 -05:00
font-size: @font-size-base;
font-weight: normal;
line-height: @line-height-base;
text-align: center;
text-shadow: 0 1px 0 #fff;
2013-04-21 22:35:36 -04:00
background-color: @gray-lighter;
2012-12-10 00:46:14 -05:00
border: 1px solid #ccc;
2013-05-09 17:48:27 -04:00
border-radius: @border-radius-base;
2013-01-31 22:39:26 -05:00
2013-05-09 18:05:06 -04:00
&.input-small {
2013-05-15 02:21:30 -04:00
padding: @padding-small-vertical @padding-small-horizontal;
2013-05-09 18:05:06 -04:00
font-size: @font-size-small;
2013-05-15 02:21:30 -04:00
border-radius: @border-radius-small;
}
2013-05-09 18:05:06 -04:00
&.input-large {
2013-05-15 02:21:30 -04:00
padding: @padding-large-vertical @padding-large-horizontal;
2013-05-09 18:05:06 -04:00
font-size: @font-size-large;
2013-05-09 17:48:27 -04:00
border-radius: @border-radius-large;
2013-01-31 22:39:26 -05:00
}
2012-07-10 03:32:04 -04:00
}
2012-12-10 00:46:14 -05:00
// Reset rounded corners
.input-group input:first-child,
2013-05-09 17:48:27 -04:00
.input-group-addon:first-child,
2013-05-11 12:38:48 -04:00
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
2013-05-09 17:48:27 -04:00
.border-right-radius(0);
2012-07-10 03:32:04 -04:00
}
2012-12-10 00:46:14 -05:00
.input-group-addon:first-child {
border-right: 0;
2012-07-10 03:32:04 -04:00
}
2012-12-10 00:46:14 -05:00
.input-group input:last-child,
2013-05-09 17:48:27 -04:00
.input-group-addon:last-child,
2013-05-11 12:38:48 -04:00
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child) {
2013-05-09 17:48:27 -04:00
.border-left-radius(0);
2012-07-10 03:32:04 -04:00
}
2012-12-10 00:46:14 -05:00
.input-group-addon:last-child {
border-left: 0;
2012-07-10 03:32:04 -04:00
}
2012-12-10 00:46:14 -05:00
// Button input groups
// -------------------------
2013-03-01 00:19:02 -05:00
.input-group-btn {
position: relative;
2012-12-10 00:46:14 -05:00
white-space: nowrap;
2012-01-29 03:07:01 -05:00
}
2012-12-10 00:46:14 -05:00
.input-group-btn > .btn {
2013-03-01 00:19:02 -05:00
position: relative;
2012-12-10 00:46:14 -05:00
float: left; // Collapse white-space
+ .btn {
2013-03-01 00:19:02 -05:00
margin-left: -1px;
2011-11-17 03:06:16 -05:00
}
2013-03-01 00:19:02 -05:00
// Bring the "active" button to the front
&:hover,
&:active {
z-index: 2;
2011-11-17 03:06:16 -05:00
}
2012-12-10 00:46:14 -05:00
}
2013-03-01 00:19:02 -05:00
2012-12-26 14:59:09 -05:00
2013-05-08 00:56:55 -04:00
// Inline forms
// --------------------------------------------------
.form-inline {
input,
select,
textarea,
.radio,
.checkbox {
display: inline-block;
2013-05-09 18:05:06 -04:00
}
.radio,
.checkbox {
margin-top: 0;
2013-05-08 00:56:55 -04:00
margin-bottom: 0;
}
}
2012-12-26 14:59:09 -05:00
// Horizontal forms
// --------------------------------------------------
2013-05-09 18:05:06 -04:00
// Horizontal forms are built on grid classes.
2012-12-26 14:59:09 -05:00
2013-05-09 18:05:06 -04:00
.form-horizontal {
.row + .row {
margin-top: 15px;
}
2013-05-16 23:17:42 -04:00
.control-label {
2013-05-09 18:05:06 -04:00
padding-top: 6px;
2013-05-14 21:59:13 -04:00
}
}
2013-06-25 19:01:46 -04:00
// Only right align form labels here when the columns stop stacking
2013-07-11 15:24:06 -04:00
@media (min-width: @screen-tablet) {
2013-05-16 23:17:42 -04:00
.form-horizontal .control-label {
2013-05-09 18:05:06 -04:00
text-align: right;
2013-01-16 15:20:34 -05:00
}
2012-12-26 14:59:09 -05:00
}