vendor/toolkit/twitter/bootstrap/forms.less in twitter_bootstrap-0.0.8 vs vendor/toolkit/twitter/bootstrap/forms.less in twitter_bootstrap-2.0.0
- old
+ new
@@ -1,173 +1,264 @@
-/* Forms.less
- * Base styles for various input types, form layouts, and states
- * ------------------------------------------------------------- */
+// Forms.less
+// Base styles for various input types, form layouts, and states
+// -------------------------------------------------------------
-// FORM STYLES
-// -----------
+// GENERAL STYLES
+// --------------
+// Make all forms have space below them
form {
- margin-bottom: @baseline;
+ margin: 0 0 @baseLineHeight;
}
-// Groups of fields with labels on top (legends)
fieldset {
- margin-bottom: @baseline;
- padding-top: @baseline;
- legend {
- display: block;
- padding-left: 150px;
- font-size: @basefont * 1.5;
- line-height: 1;
- color: @grayDark;
- *padding: 0 0 5px 145px; /* IE6-7 */
- *line-height: 1.5; /* IE6-7 */
- }
+ padding: 0;
+ margin: 0;
+ border: 0;
}
-// Parent element that clears floats and wraps labels and fields together
-form .clearfix {
- margin-bottom: @baseline;
- .clearfix()
+// Groups of fields with labels on top (legends)
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: @baseLineHeight * 1.5;
+ font-size: @baseFontSize * 1.5;
+ line-height: @baseLineHeight * 2;
+ color: @grayDark;
+ border: 0;
+ border-bottom: 1px solid #eee;
}
// Set font for forms
label,
input,
+button,
select,
textarea {
- #font > .sans-serif(normal,13px,normal);
+ #font > .sans-serif(@baseFontSize,normal,@baseLineHeight);
}
-// Float labels left
+// Identify controls by their labels
label {
- padding-top: 6px;
- font-size: @basefont;
- line-height: @baseline;
- float: left;
- width: 130px;
- text-align: right;
+ display: block;
+ margin-bottom: 5px;
color: @grayDark;
}
-// Shift over the inside div to align all label's relevant content
-form .input {
- margin-left: 150px;
-}
-
-// Checkboxs and radio buttons
-input[type=checkbox],
-input[type=radio] {
- cursor: pointer;
-}
-
// Inputs, Textareas, Selects
input,
textarea,
select,
.uneditable-input {
display: inline-block;
width: 210px;
- height: @baseline;
+ height: @baseLineHeight;
padding: 4px;
- font-size: @basefont;
- line-height: @baseline;
+ margin-bottom: 9px;
+ font-size: @baseFontSize;
+ line-height: @baseLineHeight;
color: @gray;
border: 1px solid #ccc;
.border-radius(3px);
}
+.uneditable-textarea {
+ width: auto;
+ height: auto;
+}
-// remove padding from select
-select {
- padding: initial;
+// Inputs within a label
+label input,
+label textarea,
+label select {
+ display: block;
}
-// mini reset for non-html5 file types
-input[type=checkbox],
-input[type=radio] {
+// Mini reset for unique input types
+input[type="image"],
+input[type="checkbox"],
+input[type="radio"] {
width: auto;
height: auto;
padding: 0;
margin: 3px 0;
- *margin-top: 0; /* IE6-7 */
+ *margin-top: 0; /* IE7 */
line-height: normal;
- border: none;
+ border: 0;
+ cursor: pointer;
+ .border-radius(0);
}
-input[type=file] {
- background-color: @white;
+// Reset the file input to browser defaults
+input[type="file"] {
padding: initial;
- border: initial;
line-height: initial;
+ border: initial;
+ background-color: @white;
+ background-color: initial;
.box-shadow(none);
}
-input[type=button],
-input[type=reset],
-input[type=submit] {
+// Help out input buttons
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
width: auto;
height: auto;
}
+// Set the height of select and file controls to match text inputs
select,
-input[type=file] {
- height: @baseline * 1.5; // In IE7, the height of the select element cannot be changed by height, only font-size
- *height: auto; // Reset for IE7
- line-height: @baseline * 1.5;
+input[type="file"] {
+ height: 28px; /* In IE7, the height of the select element cannot be changed by height, only font-size */
*margin-top: 4px; /* For IE7, add top margin to align select with labels */
+ line-height: 28px;
}
+// Chrome on Linux and Mobile Safari need background-color
+select {
+ width: 220px; // default input width + 10px of padding that doesn't get applied
+ background-color: @white;
+}
+
// Make multiple select elements height not fixed
-select[multiple] {
- height: inherit;
- background-color: @white; // Fixes Chromium bug of unreadable items
+select[multiple],
+select[size] {
+ height: auto;
}
+// Remove shadow from image inputs
+input[type="image"] {
+ .box-shadow(none);
+}
+
+// Make textarea height behave
textarea {
height: auto;
}
-// For text that needs to appear as an input but should not be an input
-.uneditable-input {
- background-color: @white;
- display: block;
- border-color: #eee;
- .box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
- cursor: not-allowed;
+// Hidden inputs
+input[type="hidden"] {
+ display: none;
}
-// Placeholder text gets special styles; can't be bundled together though for some reason
-:-moz-placeholder {
- color: @grayLight;
+
+
+// CHECKBOXES & RADIOS
+// -------------------
+
+// Indent the labels to position radios/checkboxes as hanging
+.radio,
+.checkbox {
+ padding-left: 18px;
}
-::-webkit-input-placeholder {
- color: @grayLight;
+.radio input[type="radio"],
+.checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: -18px;
}
-// Focus states
+// Move the options list down to align with labels
+.controls > .radio:first-child,
+.controls > .checkbox:first-child {
+ padding-top: 5px; // has to be padding because margin collaspes
+}
+
+// Radios and checkboxes on same line
+.radio.inline,
+.checkbox.inline {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+.radio.inline + .radio.inline,
+.checkbox.inline + .checkbox.inline {
+ margin-left: 10px; // space out consecutive inline controls
+}
+// But don't forget to remove their padding on first-child
+.controls > .radio.inline:first-child,
+.controls > .checkbox.inline:first-child {
+ padding-top: 0;
+}
+
+
+
+// FOCUS STATE
+// -----------
+
input,
textarea {
+ .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
@transition: border linear .2s, box-shadow linear .2s;
.transition(@transition);
- .box-shadow(inset 0 1px 3px rgba(0,0,0,.1));
}
input:focus,
textarea:focus {
- outline: 0;
border-color: rgba(82,168,236,.8);
- @shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6);
+ @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
.box-shadow(@shadow);
+ outline: 0;
+ outline: thin dotted \9; /* IE6-8 */
}
-input[type=file]:focus,
-input[type=checkbox]:focus,
+input[type="file"]:focus,
+input[type="checkbox"]:focus,
select:focus {
.box-shadow(none); // override for file inputs
- outline: 1px dotted #666; // Selet elements don't get box-shadow styles, so instead we do outline
+ .tab-focus();
}
+
+// INPUT SIZES
+// -----------
+
+// General classes for quick sizes
+.input-mini { width: 60px; }
+.input-small { width: 90px; }
+.input-medium { width: 150px; }
+.input-large { width: 210px; }
+.input-xlarge { width: 270px; }
+.input-xxlarge { width: 530px; }
+
+// Grid style input sizes
+input[class*="span"],
+select[class*="span"],
+textarea[class*="span"],
+.uneditable-input {
+ float: none;
+ margin-left: 0;
+}
+
+
+
+// GRID SIZING FOR INPUTS
+// ----------------------
+
+#inputGridSystem > .generate(@gridColumns, @gridColumnWidth, @gridGutterWidth);
+
+
+
+
+// DISABLED STATE
+// --------------
+
+// Disabled and read-only inputs
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+ background-color: #f5f5f5;
+ border-color: #ddd;
+ cursor: not-allowed;
+}
+
+
+
+
// FORM FIELD FEEDBACK STATES
// --------------------------
// Mixin for form field states
.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) {
@@ -177,10 +268,11 @@
.help-inline {
color: @textColor;
}
// Style inputs accordingly
input,
+ select,
textarea {
color: @textColor;
border-color: @borderColor;
&:focus {
border-color: darken(@borderColor, 10%);
@@ -193,287 +285,231 @@
color: @textColor;
background-color: @backgroundColor;
border-color: @textColor;
}
}
-// Error
-form .clearfix.error {
- .formFieldState(#b94a48, #ee5f5b, lighten(#ee5f5b, 30%));
-}
// Warning
-form .clearfix.warning {
- .formFieldState(#c09853, #ccae64, lighten(#CCAE64, 5%));
+.control-group.warning {
+ .formFieldState(@warningText, @warningText, @warningBackground);
}
+// Error
+.control-group.error {
+ .formFieldState(@errorText, @errorText, @errorBackground);
+}
// Success
-form .clearfix.success {
- .formFieldState(#468847, #57a957, lighten(#57a957, 30%));
+.control-group.success {
+ .formFieldState(@successText, @successText, @successBackground);
}
-
-// Form element sizes
-// TODO v2: remove duplication here and just stick to .input-[size] in light of adding .spanN sizes
-.input-mini,
-input.mini,
-textarea.mini,
-select.mini {
- width: 60px;
+// HTML5 invalid states
+// Shares styles with the .control-group.error above
+input:focus:required:invalid,
+textarea:focus:required:invalid,
+select:focus:required:invalid {
+ color: #b94a48;
+ border-color: #ee5f5b;
+ &:focus {
+ border-color: darken(#ee5f5b, 10%);
+ .box-shadow(0 0 6px lighten(#ee5f5b, 20%));
+ }
}
-.input-small,
-input.small,
-textarea.small,
-select.small {
- width: 90px;
-}
-.input-medium,
-input.medium,
-textarea.medium,
-select.medium {
- width: 150px;
-}
-.input-large,
-input.large,
-textarea.large,
-select.large {
- width: 210px;
-}
-.input-xlarge,
-input.xlarge,
-textarea.xlarge,
-select.xlarge {
- width: 270px;
-}
-.input-xxlarge,
-input.xxlarge,
-textarea.xxlarge,
-select.xxlarge {
- width: 530px;
-}
-textarea.xxlarge {
- overflow-y: auto;
-}
-// Grid style input sizes
-// This is a duplication of the main grid .columns() mixin, but subtracts 10px to account for input padding and border
-.formColumns(@columnSpan: 1) {
- display: inline-block;
- float: none;
- width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 10;
- margin-left: 0;
-}
-input,
-textarea {
- // Default columns
- &.span1 { .formColumns(1); }
- &.span2 { .formColumns(2); }
- &.span3 { .formColumns(3); }
- &.span4 { .formColumns(4); }
- &.span5 { .formColumns(5); }
- &.span6 { .formColumns(6); }
- &.span7 { .formColumns(7); }
- &.span8 { .formColumns(8); }
- &.span9 { .formColumns(9); }
- &.span10 { .formColumns(10); }
- &.span11 { .formColumns(11); }
- &.span12 { .formColumns(12); }
- &.span13 { .formColumns(13); }
- &.span14 { .formColumns(14); }
- &.span15 { .formColumns(15); }
- &.span16 { .formColumns(16); }
-}
-// Disabled and read-only inputs
-input[disabled],
-select[disabled],
-textarea[disabled],
-input[readonly],
-select[readonly],
-textarea[readonly] {
+
+// FORM ACTIONS
+// ------------
+
+.form-actions {
+ padding: (@baseLineHeight - 1) 20px @baseLineHeight;
+ margin-top: @baseLineHeight;
+ margin-bottom: @baseLineHeight;
background-color: #f5f5f5;
- border-color: #ddd;
- cursor: not-allowed;
+ border-top: 1px solid #ddd;
}
-// Actions (the buttons)
-.actions {
- background: #f5f5f5;
- margin-top: @baseline;
- margin-bottom: @baseline;
- padding: (@baseline - 1) 20px @baseline 150px;
- border-top: 1px solid #ddd;
- .border-radius(0 0 3px 3px);
- .secondary-action {
- float: right;
- a {
- line-height: 30px;
- &:hover {
- text-decoration: underline;
- }
- }
- }
+// For text that needs to appear as an input but should not be an input
+.uneditable-input {
+ display: block;
+ background-color: @white;
+ border-color: #eee;
+ .box-shadow(inset 0 1px 2px rgba(0,0,0,.025));
+ cursor: not-allowed;
}
-// Help Text
-// TODO: Do we need to set basefont and baseline here?
-.help-inline,
+// Placeholder text gets special styles; can't be bundled together though for some reason
+.placeholder(@grayLight);
+
+
+
+// HELP TEXT
+// ---------
+
.help-block {
- font-size: @basefont;
- line-height: @baseline;
+ margin-top: 5px;
+ margin-bottom: 0;
color: @grayLight;
}
+
.help-inline {
+ display: inline-block;
+ .ie7-inline-block();
+ margin-bottom: 9px;
+ vertical-align: middle;
padding-left: 5px;
- *position: relative; /* IE6-7 */
- *top: -5px; /* IE6-7 */
}
-// Big blocks of help text
-.help-block {
- display: block;
- max-width: 600px;
-}
-// Inline Fields (input fields that appear as inline objects
-.inline-inputs {
- color: @gray;
- span {
- padding: 0 2px 0 1px;
- }
-}
+// INPUT GROUPS
+// ------------
+
// Allow us to put symbols and text within the input field for a cleaner look
.input-prepend,
.input-append {
- input {
+ margin-bottom: 5px;
+ .clearfix(); // Clear the float to prevent wrapping
+ input,
+ .uneditable-input {
.border-radius(0 3px 3px 0);
+ &:focus {
+ position: relative;
+ z-index: 2;
+ }
}
+ .uneditable-input {
+ border-left-color: #ccc;
+ }
.add-on {
- position: relative;
- background: #f5f5f5;
- border: 1px solid #ccc;
- z-index: 2;
float: left;
display: block;
width: auto;
min-width: 16px;
- height: 18px;
- padding: 4px 4px 4px 5px;
+ height: @baseLineHeight;
margin-right: -1px;
+ padding: 4px 5px;
font-weight: normal;
- line-height: 18px;
+ line-height: @baseLineHeight;
color: @grayLight;
text-align: center;
text-shadow: 0 1px 0 @white;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
.border-radius(3px 0 0 3px);
}
.active {
- background: lighten(@green, 30);
+ background-color: lighten(@green, 30);
border-color: @green;
}
}
.input-prepend {
.add-on {
*margin-top: 1px; /* IE6-7 */
}
}
.input-append {
- input {
+ input,
+ .uneditable-input {
float: left;
.border-radius(3px 0 0 3px);
}
+ .uneditable-input {
+ border-right-color: #ccc;
+ }
.add-on {
- .border-radius(0 3px 3px 0);
margin-right: 0;
margin-left: -1px;
+ .border-radius(0 3px 3px 0);
}
-}
+ input:first-child {
+ // In IE7, having a hasLayout container (from clearfix's zoom:1) can make the first input
+ // inherit the sum of its ancestors' margins.
+ *margin-left: -160px;
-// Stacked options for forms (radio buttons or checkboxes)
-.inputs-list {
- margin: 0 0 5px;
- width: 100%;
- li {
- display: block;
- padding: 0;
- width: 100%;
- }
- label {
- display: block;
- float: none;
- width: auto;
- padding: 0;
- margin-left: 20px;
- line-height: @baseline;
- text-align: left;
- white-space: normal;
- strong {
- color: @gray;
+ &+.add-on {
+ *margin-left: -21px;
}
- small {
- font-size: @basefont - 2;
- font-weight: normal;
- }
}
- .inputs-list {
- margin-left: 25px;
- margin-bottom: 10px;
- padding-top: 0;
- }
- &:first-child {
- padding-top: 6px;
- }
- li + li {
- padding-top: 2px;
- }
- input[type=radio],
- input[type=checkbox] {
+}
+
+
+
+// SEARCH FORM
+// -----------
+
+.search-query {
+ padding-left: 14px;
+ padding-right: 14px;
+ margin-bottom: 0; // remove the default margin on all inputs
+ .border-radius(14px);
+}
+
+
+
+// HORIZONTAL & VERTICAL FORMS
+// ---------------------------
+
+// Common properties
+// -----------------
+
+.form-search,
+.form-inline,
+.form-horizontal {
+ input,
+ textarea,
+ select,
+ .help-inline,
+ .uneditable-input {
+ display: inline-block;
margin-bottom: 0;
- margin-left: -20px;
- float: left;
}
}
+.form-search label,
+.form-inline label,
+.form-search .input-append,
+.form-inline .input-append,
+.form-search .input-prepend,
+.form-inline .input-prepend {
+ display: inline-block;
+}
+// Make the prepend and append add-on vertical-align: middle;
+.form-search .input-append .add-on,
+.form-inline .input-prepend .add-on,
+.form-search .input-append .add-on,
+.form-inline .input-prepend .add-on {
+ vertical-align: middle;
+}
-// Stacked forms
-.form-stacked {
- padding-left: 20px;
- fieldset {
- padding-top: @baseline / 2;
+// Margin to space out fieldsets
+.control-group {
+ margin-bottom: @baseLineHeight / 2;
+}
+
+// Horizontal-specific styles
+// --------------------------
+
+.form-horizontal {
+ // Legend collapses margin, so we're relegated to padding
+ legend + .control-group {
+ margin-top: @baseLineHeight;
+ -webkit-margin-top-collapse: separate;
}
- legend {
- padding-left: 0;
+ // Increase spacing between groups
+ .control-group {
+ margin-bottom: @baseLineHeight;
+ .clearfix();
}
- label {
- display: block;
- float: none;
- width: auto;
- font-weight: bold;
- text-align: left;
- line-height: 20px;
- padding-top: 0;
+ // Float the labels left
+ .control-group > label {
+ float: left;
+ width: 140px;
+ padding-top: 5px;
+ text-align: right;
}
- .clearfix {
- margin-bottom: @baseline / 2;
- div.input {
- margin-left: 0;
- }
+ // Move over all input controls and content
+ .controls {
+ margin-left: 160px;
}
- .inputs-list {
- margin-bottom: 0;
- li {
- padding-top: 0;
- label {
- font-weight: normal;
- padding-top: 0;
- }
- }
- }
- div.clearfix.error {
- padding-top: 10px;
- padding-bottom: 10px;
- padding-left: 10px;
- margin-top: 0;
- margin-left: -10px;
- }
- .actions {
- margin-left: -20px;
- padding-left: 20px;
+ // Move over buttons in .form-actions to align with .controls
+ .form-actions {
+ padding-left: 160px;
}
}