Commit 2a4a6fe0 authored by Mark Otto's avatar Mark Otto

Merge pull request #8611 from twitter/bs3_form_classes

Updated BS3 form classes
parents 35aad074 27cedf71
This diff is collapsed.
...@@ -1274,10 +1274,6 @@ table th[class^="col-"] { ...@@ -1274,10 +1274,6 @@ table th[class^="col-"] {
border-color: #f8e5be; border-color: #f8e5be;
} }
form {
margin: 0;
}
fieldset { fieldset {
padding: 0; padding: 0;
margin: 0; margin: 0;
...@@ -1302,138 +1298,12 @@ label { ...@@ -1302,138 +1298,12 @@ label {
font-weight: bold; font-weight: bold;
} }
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"] {
display: block;
height: 38px;
padding: 8px 12px;
font-size: 14px;
line-height: 1.428571429;
color: #555555;
vertical-align: middle;
background-color: #ffffff;
border: 1px solid #cccccc;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
}
select:focus,
textarea:focus,
input[type="text"]:focus,
input[type="password"]:focus,
input[type="datetime"]:focus,
input[type="datetime-local"]:focus,
input[type="date"]:focus,
input[type="month"]:focus,
input[type="time"]:focus,
input[type="week"]:focus,
input[type="number"]:focus,
input[type="email"]:focus,
input[type="url"]:focus,
input[type="search"]:focus,
input[type="tel"]:focus,
input[type="color"]:focus {
border-color: rgba(82, 168, 236, 0.8);
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
}
select[disabled],
textarea[disabled],
input[type="text"][disabled],
input[type="password"][disabled],
input[type="datetime"][disabled],
input[type="datetime-local"][disabled],
input[type="date"][disabled],
input[type="month"][disabled],
input[type="time"][disabled],
input[type="week"][disabled],
input[type="number"][disabled],
input[type="email"][disabled],
input[type="url"][disabled],
input[type="search"][disabled],
input[type="tel"][disabled],
input[type="color"][disabled],
select[readonly],
textarea[readonly],
input[type="text"][readonly],
input[type="password"][readonly],
input[type="datetime"][readonly],
input[type="datetime-local"][readonly],
input[type="date"][readonly],
input[type="month"][readonly],
input[type="time"][readonly],
input[type="week"][readonly],
input[type="number"][readonly],
input[type="email"][readonly],
input[type="url"][readonly],
input[type="search"][readonly],
input[type="tel"][readonly],
input[type="color"][readonly],
fieldset[disabled] select,
fieldset[disabled] textarea,
fieldset[disabled] input[type="text"],
fieldset[disabled] input[type="password"],
fieldset[disabled] input[type="datetime"],
fieldset[disabled] input[type="datetime-local"],
fieldset[disabled] input[type="date"],
fieldset[disabled] input[type="month"],
fieldset[disabled] input[type="time"],
fieldset[disabled] input[type="week"],
fieldset[disabled] input[type="number"],
fieldset[disabled] input[type="email"],
fieldset[disabled] input[type="url"],
fieldset[disabled] input[type="search"],
fieldset[disabled] input[type="tel"],
fieldset[disabled] input[type="color"] {
cursor: not-allowed;
background-color: #eeeeee;
}
input,
select,
textarea {
width: 100%;
}
input[type="file"],
input[type="image"],
input[type="submit"],
input[type="reset"],
input[type="button"],
input[type="radio"],
input[type="checkbox"] {
width: auto;
}
input[type="search"] { input[type="search"] {
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
} }
textarea {
height: auto;
}
input[type="radio"], input[type="radio"],
input[type="checkbox"] { input[type="checkbox"] {
margin: 4px 0 0; margin: 4px 0 0;
...@@ -1471,26 +1341,62 @@ input[type="number"]::-webkit-inner-spin-button { ...@@ -1471,26 +1341,62 @@ input[type="number"]::-webkit-inner-spin-button {
height: auto; height: auto;
} }
input:-moz-placeholder, .form-control:-moz-placeholder {
textarea:-moz-placeholder {
color: #999999; color: #999999;
} }
input::-moz-placeholder, .form-control::-moz-placeholder {
textarea::-moz-placeholder {
color: #999999; color: #999999;
} }
input:-ms-input-placeholder, .form-control:-ms-input-placeholder {
textarea:-ms-input-placeholder {
color: #999999; color: #999999;
} }
input::-webkit-input-placeholder, .form-control::-webkit-input-placeholder {
textarea::-webkit-input-placeholder {
color: #999999; color: #999999;
} }
.form-control {
display: block;
width: 100%;
height: 38px;
padding: 8px 12px;
font-size: 14px;
line-height: 1.428571429;
color: #555555;
vertical-align: middle;
background-color: #ffffff;
border: 1px solid #cccccc;
border-radius: 4px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;
}
.form-control:focus {
border-color: rgba(82, 168, 236, 0.8);
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
cursor: not-allowed;
background-color: #eeeeee;
}
textarea.form-control {
height: auto;
}
.form-group {
margin-bottom: 15px;
}
.radio, .radio,
.checkbox { .checkbox {
display: block; display: block;
...@@ -1597,14 +1503,14 @@ select.input-small { ...@@ -1597,14 +1503,14 @@ select.input-small {
color: #c09853; color: #c09853;
} }
.has-warning .input-with-feedback { .has-warning .form-control {
padding-right: 32px; padding-right: 32px;
border-color: #c09853; border-color: #c09853;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
} }
.has-warning .input-with-feedback:focus { .has-warning .form-control:focus {
border-color: #a47e3c; border-color: #a47e3c;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
...@@ -1621,14 +1527,14 @@ select.input-small { ...@@ -1621,14 +1527,14 @@ select.input-small {
color: #b94a48; color: #b94a48;
} }
.has-error .input-with-feedback { .has-error .form-control {
padding-right: 32px; padding-right: 32px;
border-color: #b94a48; border-color: #b94a48;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
} }
.has-error .input-with-feedback:focus { .has-error .form-control:focus {
border-color: #953b39; border-color: #953b39;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
...@@ -1645,14 +1551,14 @@ select.input-small { ...@@ -1645,14 +1551,14 @@ select.input-small {
color: #468847; color: #468847;
} }
.has-success .input-with-feedback { .has-success .form-control {
padding-right: 32px; padding-right: 32px;
border-color: #468847; border-color: #468847;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
} }
.has-success .input-with-feedback:focus { .has-success .form-control:focus {
border-color: #356635; border-color: #356635;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -3,12 +3,9 @@ ...@@ -3,12 +3,9 @@
// -------------------------------------------------- // --------------------------------------------------
// Non-controls // Normalize non-controls
// ------------------------- //
// Restyle and baseline non-control form elements.
form {
margin: 0;
}
fieldset { fieldset {
padding: 0; padding: 0;
...@@ -34,86 +31,14 @@ label { ...@@ -34,86 +31,14 @@ label {
font-weight: bold; font-weight: bold;
} }
// Form controls
// -------------------------
// Shared size and type resets
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"] {
display: block;
height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
padding: @padding-base-vertical @padding-base-horizontal;
font-size: @font-size-base;
line-height: @line-height-base;
color: @gray;
vertical-align: middle;
background-color: @input-bg;
border: 1px solid @input-border;
border-radius: @input-border-radius;
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
.transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
&:focus {
border-color: rgba(82,168,236,.8);
outline: 0;
.box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)");
}
// 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;
}
}
// Reset appearance properties for textual inputs and textarea
// Can't be on input[type=*] selectors or it's too specific
input,
select,
textarea {
width: 100%;
}
// Reset width of input images, buttons, radios, checkboxes // Normalize form controls
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
}
// Override content-box in Normalize (* isn't specific enough) // Override content-box in Normalize (* isn't specific enough)
input[type="search"] { input[type="search"] {
.box-sizing(border-box); .box-sizing(border-box);
} }
// Reset height since textareas have rows
textarea {
height: auto;
}
// Position radios and checkboxes better // Position radios and checkboxes better
input[type="radio"], input[type="radio"],
input[type="checkbox"] { input[type="checkbox"] {
...@@ -159,19 +84,89 @@ input[type="number"] { ...@@ -159,19 +84,89 @@ input[type="number"] {
// Placeholder // Placeholder
// ------------------------- //
// Placeholder text gets special styles because when browsers invalidate entire
// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector // lines if it doesn't understand a selector/
input, .form-control {
textarea {
.placeholder(); .placeholder();
} }
// CHECKBOXES & RADIOS // Common form controls
// ------------------- //
// Shared size and type resets for form controls. Apply `.form-control` to any
// of the following form controls:
//
// 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"]
.form-control {
display: block;
width: 100%;
height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
padding: @padding-base-vertical @padding-base-horizontal;
font-size: @font-size-base;
line-height: @line-height-base;
color: @gray;
vertical-align: middle;
background-color: @input-bg;
border: 1px solid @input-border;
border-radius: @input-border-radius;
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075));
.transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
&:focus {
border-color: rgba(82,168,236,.8);
outline: 0;
.box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)");
}
// 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;
}
// Reset height for `textarea`s
textarea& {
height: auto;
}
}
// Form groups
//
// Designed to help with the organization and spacing of vertical forms. For
// horizontal forms, use the predefined grid classes.
.form-group {
margin-bottom: 15px;
}
// Checkboxes and radios
//
// Indent the labels to position radios/checkboxes as hanging controls.
// Indent the labels to position radios/checkboxes as hanging
.radio, .radio,
.checkbox { .checkbox {
display: block; display: block;
...@@ -217,8 +212,10 @@ textarea { ...@@ -217,8 +212,10 @@ textarea {
// INPUT SIZES // Form control sizing
// ----------- //
// Relative text size, padding, and border-radii changes for form controls. For
// horizontal sizing, wrap controls in the predefined grid classes.
select, select,
textarea, textarea,
...@@ -261,28 +258,28 @@ select { ...@@ -261,28 +258,28 @@ select {
} }
// Form control feedback states
// FORM FIELD FEEDBACK STATES //
// -------------------------- // Apply contextual and semantic states to individual form controls.
// Warning // Warning
.has-warning { .has-warning {
.form-field-validation(@state-warning-text, @state-warning-text, @state-warning-bg); .form-control-validation(@state-warning-text, @state-warning-text, @state-warning-bg);
} }
// Error // Error
.has-error { .has-error {
.form-field-validation(@state-danger-text, @state-danger-text, @state-danger-bg); .form-control-validation(@state-danger-text, @state-danger-text, @state-danger-bg);
} }
// Success // Success
.has-success { .has-success {
.form-field-validation(@state-success-text, @state-success-text, @state-success-bg); .form-control-validation(@state-success-text, @state-success-text, @state-success-bg);
} }
// Help text
//
// HELP TEXT // Apply to any element you wish to create light text for placement immediately
// --------- // below a form control. Use for general help, formatting, or instructional text.
.help-block { .help-block {
display: block; // account for any element using help-block display: block; // account for any element using help-block
......
...@@ -508,18 +508,20 @@ ...@@ -508,18 +508,20 @@
} }
} }
// Framework mixins
// --------------------------------------------------
// Generate form validation states // Form validation states
.form-field-validation(@text-color: #555, @border-color: #ccc, @background-color: #f5f5f5) { //
// Color the label text // Used in forms.less to generate the form validation CSS for warnings, errors,
// and successes.
.form-control-validation(@text-color: #555, @border-color: #ccc, @background-color: #f5f5f5) {
// Color the label and help text
.help-block, .help-block,
.control-label { .control-label {
color: @text-color; color: @text-color;
} }
// Set the border and box shadow on specific inputs to match // Set the border and box shadow on specific inputs to match
.input-with-feedback { .form-control {
padding-right: 32px; // to account for the feedback icon padding-right: 32px; // to account for the feedback icon
border-color: @border-color; border-color: @border-color;
.box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
......
Markdown is supported
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