2012-06-29 06:46:45 +02:00
//
// Forms
// --------------------------------------------------
2011-06-30 09:15:37 +02:00
2011-11-12 09:46:02 +01:00
2012-11-30 22:35:20 +01:00
// Non-controls
2012-11-30 09:21:44 +01:00
// -------------------------
2011-05-04 03:09:25 +02:00
form {
2012-11-30 23:45:25 +01:00
margin: 0 0 @line-height-base;
2012-01-20 22:16:40 +01:00
}
fieldset {
padding: 0;
margin: 0;
border: 0;
2011-08-25 09:13:40 +02:00
}
2011-08-17 07:58:01 +02:00
2011-09-29 10:40:27 +02:00
legend {
display: block;
width: 100%;
2012-01-20 22:16:40 +01:00
padding: 0;
2012-11-30 23:45:25 +01:00
margin-bottom: @line-height-base;
font-size: @font-size-base * 1.5;
line-height: @line-height-base * 2;
2011-09-29 10:40:27 +02:00
color: @grayDark;
2012-01-20 22:16:40 +01:00
border: 0;
2012-05-14 02:43:04 +02:00
border-bottom: 1px solid #e5e5e5;
2011-08-25 09:13:40 +02:00
}
2011-08-17 07:58:01 +02:00
2011-08-25 09:13:40 +02:00
label {
2012-11-30 22:35:20 +01:00
display: inline-block;
2011-09-29 10:40:27 +02:00
margin-bottom: 5px;
2012-11-30 22:35:20 +01:00
font-weight: bold;
2011-08-25 09:13:40 +02:00
}
2011-08-17 07:58:01 +02:00
2012-05-15 08:40:06 +02:00
// Form controls
// -------------------------
2012-05-15 08:42:32 +02:00
// Shared size and type resets
2011-08-25 09:13:40 +02:00
select,
2012-05-15 08:40:06 +02: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"],
2012-05-15 18:07:19 +02:00
input[type="color"],
.uneditable-input {
2012-01-25 20:26:45 +01:00
display: inline-block;
2012-10-01 09:19:29 +02:00
.box-sizing(border-box); // Makes inputs behave like true block-level elements
2012-12-01 00:05:23 +01:00
min-height: @input-height; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
2012-10-01 09:19:29 +02:00
padding: 6px 9px;
2012-11-30 23:45:25 +01:00
margin-bottom: @line-height-base / 2;
font-size: @font-size-base;
line-height: @line-height-base;
2011-08-25 09:13:40 +02:00
color: @gray;
2012-09-24 01:06:28 +02:00
vertical-align: middle;
2012-12-01 00:05:23 +01:00
background-color: @input-background;
border: 1px solid @input-border;
border-radius: @input-border-radius;
2012-11-30 22:35:20 +01:00
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
.transition(~"border linear .2s, box-shadow linear .2s");
2012-05-15 08:40:06 +02:00
}
2012-05-15 09:17:02 +02:00
// Reset appearance properties for textual inputs and textarea
2012-11-30 09:53:07 +01:00
// Can't be on input[type=*] selectors or it's too specific
2012-05-15 09:17:02 +02:00
input,
2012-11-30 09:53:07 +01:00
select,
2012-08-27 21:07:28 +02:00
textarea,
.uneditable-input {
2012-11-30 09:53:07 +01:00
width: 100%;
2012-05-15 09:17:02 +02:00
}
2012-11-30 09:53:07 +01:00
2012-11-30 22:35:20 +01: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
}
2012-05-18 07:00:49 +02:00
// Reset height since textareas have rows
textarea {
height: auto;
}
2012-11-30 09:53:07 +01:00
2012-05-15 09:17:02 +02:00
// Everything else
2012-05-15 08:40:06 +02: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"],
2012-05-15 18:07:19 +02:00
input[type="color"],
.uneditable-input {
2012-05-15 18:04:44 +02:00
// Focus state
&:focus {
border-color: rgba(82,168,236,.8);
outline: 0;
outline: thin dotted \9; /* IE6-9 */
2012-09-13 00:48:56 +02:00
.box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)");
2012-05-15 18:04:44 +02:00
}
2011-08-25 09:13:40 +02:00
}
2012-05-15 08:40:06 +02:00
2012-05-15 09:17:02 +02:00
// Position radios and checkboxes better
2012-05-15 08:40:06 +02:00
input[type="radio"],
input[type="checkbox"] {
2012-08-15 00:34:10 +02:00
margin: 4px 0 0;
2012-08-15 00:29:47 +02:00
margin-top: 1px \9; /* IE8-9 */
2012-05-15 09:17:02 +02:00
line-height: normal;
2012-01-25 20:21:44 +01:00
}
2012-05-15 09:17:02 +02:00
2011-11-12 09:46:02 +01:00
// Set the height of select and file controls to match text inputs
2011-08-25 09:13:40 +02:00
select,
2012-01-28 05:05:03 +01:00
input[type="file"] {
2012-12-01 00:05:23 +01:00
height: @input-height; /* 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;
2011-09-12 03:01:29 +02:00
}
2011-09-02 07:53:24 +02:00
2012-05-15 09:17:02 +02:00
// Make select elements obey height by applying a border
2012-11-30 09:53:07 +01:00
// TODO: See if this can be part of the above selector stack
2012-05-15 09:17:02 +02:00
select {
2012-12-01 00:05:23 +01:00
border: 1px solid @input-border;
2012-05-15 09:17:02 +02:00
}
2011-09-14 17:58:20 +02:00
// Make multiple select elements height not fixed
2011-12-27 23:08:07 +01:00
select[multiple],
select[size] {
2012-01-25 20:51:13 +01:00
height: auto;
2011-09-14 17:58:20 +02:00
}
2012-05-15 18:04:44 +02:00
// Focus for select, file, radio, and checkbox
select:focus,
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
.tab-focus();
}
2012-01-26 19:00:09 +01:00
2011-08-17 07:58:01 +02:00
2012-07-07 21:52:05 +02:00
// Uneditable inputs
// -------------------------
// Make uneditable inputs look inactive
.uneditable-input,
.uneditable-textarea {
color: @grayLight;
2012-12-01 00:05:23 +01:00
background-color: darken(@input-background, 1%);
border-color: @input-border;
2012-07-07 21:52:05 +02:00
.box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
cursor: not-allowed;
}
// For text that needs to appear as an input but should not be an input
.uneditable-input {
overflow: hidden; // prevent text from wrapping, but still cut it off like an input does
white-space: nowrap;
}
// Make uneditable textareas behave like a textarea
.uneditable-textarea {
width: auto;
height: auto;
}
// Placeholder
// -------------------------
2012-09-11 07:41:14 +02:00
// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector
2012-07-07 21:52:05 +02:00
input,
textarea {
.placeholder();
}
2011-08-25 09:13:40 +02:00
2012-01-05 23:11:41 +01:00
// CHECKBOXES & RADIOS
// -------------------
// Indent the labels to position radios/checkboxes as hanging
.radio,
.checkbox {
2012-11-30 22:35:20 +01:00
display: block;
2012-11-30 23:45:25 +01:00
min-height: @line-height-base; // clear the floating input if there is no label text
2012-09-20 20:45:59 +02:00
padding-left: 20px;
2012-01-05 23:11:41 +01:00
}
2012-11-30 22:35:20 +01:00
.radio label,
.checkbox label {
2012-12-10 07:13:40 +01:00
margin-bottom: 0;
2012-11-30 22:35:20 +01:00
font-weight: normal;
}
2012-01-28 05:05:03 +01:00
.radio input[type="radio"],
.checkbox input[type="checkbox"] {
2012-01-05 23:11:41 +01:00
float: left;
2012-09-20 20:45:59 +02:00
margin-left: -20px;
2012-01-05 23:11:41 +01:00
}
// Move the options list down to align with labels
.controls > .radio:first-child,
.controls > .checkbox:first-child {
2012-01-26 19:56:18 +01:00
padding-top: 5px; // has to be padding because margin collaspes
2012-01-05 23:11:41 +01:00
}
2012-01-07 08:59:22 +01:00
// Radios and checkboxes on same line
2012-02-05 11:16:46 +01:00
// TODO v3: Convert .inline to .control-inline
2012-01-07 08:59:22 +01:00
.radio.inline,
.checkbox.inline {
display: inline-block;
2012-02-05 11:16:46 +01:00
padding-top: 5px;
2012-01-07 09:26:58 +01:00
margin-bottom: 0;
2012-01-28 23:50:56 +01:00
vertical-align: middle;
2012-01-07 08:59:22 +01:00
}
.radio.inline + .radio.inline,
.checkbox.inline + .checkbox.inline {
2012-01-07 09:26:58 +01:00
margin-left: 10px; // space out consecutive inline controls
2012-01-07 08:59:22 +01:00
}
2012-01-05 23:11:41 +01:00
2011-09-29 04:15:31 +02:00
// INPUT SIZES
// -----------
2012-09-26 07:16:47 +02: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"],
input[type="color"],
.uneditable-input {
&.input-large {
2012-11-30 23:45:25 +01:00
padding: @padding-large;
2012-09-26 07:16:47 +02:00
padding-left: 14px;
padding-right: 14px; // TODO: Resolve this override
2012-11-30 23:45:25 +01:00
font-size: @font-size-large;
border-radius: @border-radius-large;
2012-09-26 07:16:47 +02:00
}
&.input-small {
2012-11-30 23:45:25 +01:00
padding: @padding-small;
font-size: @font-size-small;
border-radius: @border-radius-small;
2012-09-26 07:16:47 +02:00
}
&.input-mini {
2012-11-30 23:45:25 +01:00
padding: @padding-mini;
font-size: @font-size-mini;
border-radius: @border-radius-small;
2012-09-26 07:16:47 +02:00
}
}
2011-08-17 07:58:01 +02:00
2012-09-26 00:01:03 +02:00
// GRID SIZING FOR INPUTS
// ----------------------
2011-09-12 03:44:25 +02:00
// Grid style input sizes
2012-01-07 09:47:53 +01:00
input[class*="span"],
select[class*="span"],
textarea[class*="span"],
2012-09-26 00:01:03 +02:00
.uneditable-input[class*="span"] {
float: none;
margin-left: 0;
margin-right: 0;
2011-09-12 03:44:25 +02:00
}
2012-09-26 00:01:03 +02:00
.controls-row {
2012-12-01 00:43:07 +01:00
#grid > .input(@grid-column-width, @grid-gutter-width, @grid-row-width);
2012-09-26 00:01:03 +02:00
}
2012-05-29 02:32:24 +02:00
// Ensure input-prepend/append never wraps
.input-append input[class*="span"],
.input-append .uneditable-input[class*="span"],
.input-prepend input[class*="span"],
2012-09-26 00:01:03 +02:00
.input-prepend .uneditable-input[class*="span"] {
2012-05-29 02:32:24 +02:00
display: inline-block;
}
2012-01-07 09:47:53 +01:00
2012-08-28 22:33:06 +02:00
input[class*="span"],
select[class*="span"],
textarea[class*="span"],
.uneditable-input[class*="span"] {
2012-12-20 08:37:33 +01:00
height: @input-height;
2012-08-28 22:33:06 +02:00
}
2012-07-10 05:49:17 +02:00
// Control row for multiple inputs per line
.controls-row {
.clearfix(); // Clear the float from controls
}
2012-09-18 01:09:36 +02:00
// Float to collapse white-space for proper grid alignment
2012-09-26 07:20:24 +02:00
.controls-row [class*="span"] {
2012-09-18 01:09:36 +02:00
float: left;
2012-07-10 05:49:17 +02:00
}
2012-10-01 20:53:52 +02:00
// Explicity set top padding on all checkboxes/radios, not just first-child
.controls-row .checkbox[class*="span"],
.controls-row .radio[class*="span"] {
padding-top: 5px;
}
2012-07-10 05:49:17 +02:00
2011-09-29 04:15:31 +02:00
2011-09-29 10:40:27 +02:00
// DISABLED STATE
// --------------
2011-09-29 04:15:31 +02:00
2011-09-03 06:54:11 +02:00
// Disabled and read-only inputs
2012-12-20 20:00:47 +01:00
// 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.
2012-12-10 08:42:05 +01:00
input,
select,
textarea {
&[disabled],
&[readonly],
fieldset[disabled] & {
cursor: not-allowed;
background-color: @input-background-disabled;
}
2011-05-04 03:09:25 +02:00
}
2012-04-23 12:05:10 +02:00
// Explicitly reset the colors here
2012-12-10 08:42:05 +01:00
input[type="radio"],
input[type="checkbox"] {
&[disabled],
&[readonly],
fieldset[disabled] & {
background-color: transparent;
}
2012-04-23 12:05:10 +02:00
}
2011-05-04 03:09:25 +02:00
2011-09-29 10:40:27 +02:00
2012-01-06 06:43:28 +01:00
2011-11-12 09:46:02 +01:00
// FORM FIELD FEEDBACK STATES
// --------------------------
2011-09-29 10:40:27 +02:00
2011-11-12 09:46:02 +01:00
// Warning
2011-11-29 21:06:31 +01:00
.control-group.warning {
2012-12-01 00:38:31 +01:00
.formFieldState(@state-warning-text, @state-warning-text, @state-warning-background);
2012-01-25 01:54:35 +01:00
}
// Error
.control-group.error {
2012-12-01 00:38:31 +01:00
.formFieldState(@state-error-text, @state-error-text, @state-error-background);
2011-11-12 09:46:02 +01:00
}
// Success
2011-11-29 21:06:31 +01:00
.control-group.success {
2012-12-01 00:38:31 +01:00
.formFieldState(@state-success-text, @state-success-text, @state-success-background);
2011-11-12 09:46:02 +01:00
}
2012-08-22 11:24:02 +02:00
// Success
.control-group.info {
2012-12-01 00:38:31 +01:00
.formFieldState(@state-info-text, @state-info-text, @state-info-background);
2012-08-22 11:24:02 +02:00
}
2011-09-29 10:40:27 +02:00
2012-01-07 13:28:30 +01:00
// HTML5 invalid states
// Shares styles with the .control-group.error above
2012-11-05 04:53:13 +01:00
input:focus:invalid,
textarea:focus:invalid,
select:focus:invalid {
2012-01-07 13:28:30 +01:00
color: #b94a48;
border-color: #ee5f5b;
&:focus {
border-color: darken(#ee5f5b, 10%);
2012-09-13 01:18:52 +02:00
@shadow: 0 0 6px lighten(#ee5f5b, 20%);
.box-shadow(@shadow);
2012-01-07 13:28:30 +01:00
}
}
2011-09-29 10:40:27 +02:00
// FORM ACTIONS
// ------------
.form-actions {
2012-11-30 23:45:25 +01:00
padding: (@line-height-base - 1) 20px @line-height-base;
margin-top: @line-height-base;
margin-bottom: @line-height-base;
2012-12-01 00:05:23 +01:00
background-color: @form-actions-background;
2012-05-14 02:43:04 +02:00
border-top: 1px solid #e5e5e5;
2012-02-14 21:16:55 +01:00
.clearfix(); // Adding clearfix to allow for .pull-right button containers
2011-05-04 03:09:25 +02:00
}
2011-09-29 10:40:27 +02:00
2011-09-29 04:15:31 +02:00
// HELP TEXT
// ---------
2012-02-21 22:43:13 +01:00
.help-block,
.help-inline {
2012-11-30 23:37:24 +01:00
color: lighten(@text-color, 25%); // lighten the text some for contrast
2012-02-21 22:43:13 +01:00
}
2012-01-06 06:43:28 +01:00
.help-block {
2012-02-13 07:49:06 +01:00
display: block; // account for any element using help-block
2012-11-30 23:45:25 +01:00
margin-bottom: @line-height-base / 2;
2011-05-04 03:09:25 +02:00
}
2011-09-29 10:40:27 +02:00
2011-05-04 03:09:25 +02:00
.help-inline {
2012-01-26 22:02:27 +01:00
display: inline-block;
vertical-align: middle;
2011-11-17 10:28:42 +01:00
padding-left: 5px;
2011-05-04 03:09:25 +02:00
}
2011-08-17 07:58:01 +02:00
2011-09-29 04:15:31 +02:00
2011-11-12 09:46:02 +01:00
2012-07-07 21:52:05 +02:00
2012-12-10 06:46:14 +01:00
// Input groups
// --------------------------------------------------
2012-09-18 08:11:49 +02:00
2012-12-10 06:46:14 +01:00
// Base styles
// -------------------------
.input-group {
display: table;
2012-09-20 20:37:34 +02:00
2012-12-10 06:46:14 +01:00
// Undo padding and float of grid classes
&[class*="span"] {
float: none;
padding: 0;
2012-03-12 07:21:38 +01:00
}
2012-09-20 20:37:34 +02:00
2012-01-07 10:22:52 +01:00
input,
2012-03-23 17:47:57 +01:00
select,
2012-01-07 10:22:52 +01:00
.uneditable-input {
2012-12-10 06:46:14 +01:00
width: 100%;
2012-03-12 07:21:38 +01:00
}
}
2012-09-20 20:37:34 +02:00
2012-12-10 06:46:14 +01:00
// Display as table-cell
// -------------------------
.input-group-addon,
.input-group-btn,
.input-group input,
.input-group .uneditable-input {
display: table-cell;
margin: 0;
border-radius: 0;
2011-05-04 03:09:25 +02:00
}
2012-12-10 06:46:14 +01:00
// Addon and addon wrapper for buttons
.input-group-addon,
.input-group-btn {
width: 1%;
vertical-align: middle; // Match the inputs
2011-09-29 10:47:55 +02:00
}
2012-12-10 06:46:14 +01:00
// Text input groups
// -------------------------
.input-group-addon {
.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;
2012-07-10 09:32:04 +02:00
}
2012-12-10 06:46:14 +01:00
// 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);
2012-07-10 09:32:04 +02:00
}
2012-12-10 06:46:14 +01:00
.input-group-addon:first-child {
border-right: 0;
2012-07-10 09:32:04 +02:00
}
2012-12-10 06:46:14 +01:00
.input-group input:last-child,
.input-group .uneditable-input:last-child,
.input-group-addon:last-child {
.border-right-radius(@border-radius-base);
2012-07-10 09:32:04 +02:00
}
2012-12-10 06:46:14 +01:00
.input-group-addon:last-child {
border-left: 0;
2012-07-10 09:32:04 +02:00
}
2012-12-10 06:46:14 +01:00
// Button input groups
// -------------------------
.input-group-btn,
.input-group-btn .btn {
white-space: nowrap;
2012-01-29 09:07:01 +01:00
}
2012-12-10 06:46:14 +01:00
.input-group-btn > .btn {
float: left; // Collapse white-space
border-radius: 0;
+ .btn {
border-left: 0;
2012-11-30 22:35:20 +01:00
}
2012-02-11 09:24:06 +01:00
}
2012-12-10 06:46:14 +01:00
.input-group-btn.btn-group {
display: table-cell;
2012-02-09 21:27:42 +01:00
}
2012-12-10 06:46:14 +01:00
// Prepend
.input-group-btn {
2012-12-20 04:33:14 +01:00
&:first-child > .btn,
2012-12-10 06:46:14 +01:00
&.btn-group:first-child > .btn {
border-right: 0;
2011-11-17 09:06:16 +01:00
}
2012-12-20 04:33:14 +01:00
&:first-child > .btn,
2012-12-10 06:46:14 +01:00
&.btn-group:first-child > .btn {
border-radius: @border-radius-base 0 0 @border-radius-base;
2011-11-17 09:06:16 +01:00
}
2012-12-10 06:46:14 +01:00
}
// Append
.input-group-btn {
2012-12-20 04:33:14 +01:00
&:last-child > .btn,
2012-12-10 06:46:14 +01:00
&.btn-group:last-child > .btn:first-child {
border-left: 0;
2012-08-28 07:42:12 +02:00
}
2012-12-20 04:33:14 +01:00
&:last-child > .btn,
2012-12-10 06:46:14 +01:00
&.btn-group:last-child > .btn {
border-radius: 0 @border-radius-base @border-radius-base 0;
2011-11-17 09:06:16 +01:00
}
2011-09-29 10:40:27 +02:00
}