479 行
		
	
	
	
		
			9.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			479 行
		
	
	
	
		
			9.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| /* Forms.less
 | |
|  * Base styles for various input types, form layouts, and states
 | |
|  * ------------------------------------------------------------- */
 | |
| 
 | |
| 
 | |
| // FORM STYLES
 | |
| // -----------
 | |
| 
 | |
| form {
 | |
|   margin-bottom: @baseline;
 | |
| }
 | |
| 
 | |
| // 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 */
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Parent element that clears floats and wraps labels and fields together
 | |
| form .clearfix {
 | |
|   margin-bottom: @baseline;
 | |
|   .clearfix()
 | |
| }
 | |
| 
 | |
| // Set font for forms
 | |
| label,
 | |
| input,
 | |
| select,
 | |
| textarea {
 | |
|   #font > .sans-serif(normal,13px,normal);
 | |
| }
 | |
| 
 | |
| // Float labels left
 | |
| label {
 | |
|   padding-top: 6px;
 | |
|   font-size: @basefont;
 | |
|   line-height: @baseline;
 | |
|   float: left;
 | |
|   width: 130px;
 | |
|   text-align: right;
 | |
|   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;
 | |
|   padding: 4px;
 | |
|   font-size: @basefont;
 | |
|   line-height: @baseline;
 | |
|   color: @gray;
 | |
|   border: 1px solid #ccc;
 | |
|   .border-radius(3px);
 | |
| }
 | |
| 
 | |
| // remove padding from select
 | |
| select {
 | |
|   padding: initial;
 | |
| }
 | |
| 
 | |
| // mini reset for non-html5 file types
 | |
| input[type=checkbox],
 | |
| input[type=radio] {
 | |
|   width: auto;
 | |
|   height: auto;
 | |
|   padding: 0;
 | |
|   margin: 3px 0;
 | |
|   *margin-top: 0; /* IE6-7 */
 | |
|   line-height: normal;
 | |
|   border: none;
 | |
| }
 | |
| 
 | |
| input[type=file] {
 | |
|   background-color: @white;
 | |
|   padding: initial;
 | |
|   border: initial;
 | |
|   line-height: initial;
 | |
|   .box-shadow(none);
 | |
| }
 | |
| 
 | |
| input[type=button],
 | |
| input[type=reset],
 | |
| input[type=submit] {
 | |
|   width: auto;
 | |
|   height: auto;
 | |
| }
 | |
| 
 | |
| 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;
 | |
|   *margin-top: 4px; /* For IE7, add top margin to align select with labels */
 | |
| }
 | |
| 
 | |
| // Make multiple select elements height not fixed
 | |
| select[multiple] {
 | |
|   height: inherit;
 | |
|   background-color: @white; // Fixes Chromium bug of unreadable items
 | |
| }
 | |
| 
 | |
| 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;
 | |
| }
 | |
| 
 | |
| // Placeholder text gets special styles; can't be bundled together though for some reason
 | |
| :-moz-placeholder {
 | |
|   color: @grayLight;
 | |
| }
 | |
| ::-webkit-input-placeholder {
 | |
|   color: @grayLight;
 | |
| }
 | |
| 
 | |
| // Focus states
 | |
| input,
 | |
| textarea {
 | |
|   @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);
 | |
|   .box-shadow(@shadow);
 | |
| }
 | |
| 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
 | |
| }
 | |
| 
 | |
| 
 | |
| // FORM FIELD FEEDBACK STATES
 | |
| // --------------------------
 | |
| 
 | |
| // Mixin for form field states
 | |
| .formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) {
 | |
|   // Set the text color
 | |
|   > label,
 | |
|   .help-block,
 | |
|   .help-inline {
 | |
|     color: @textColor;
 | |
|   }
 | |
|   // Style inputs accordingly
 | |
|   input,
 | |
|   textarea {
 | |
|     color: @textColor;
 | |
|     border-color: @borderColor;
 | |
|     &:focus {
 | |
|       border-color: darken(@borderColor, 10%);
 | |
|       .box-shadow(0 0 6px lighten(@borderColor, 20%));
 | |
|     }
 | |
|   }
 | |
|   // Give a small background color for input-prepend/-append
 | |
|   .input-prepend .add-on,
 | |
|   .input-append .add-on {
 | |
|     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%));
 | |
| }
 | |
| // Success
 | |
| form .clearfix.success {
 | |
|   .formFieldState(#468847, #57a957, lighten(#57a957, 30%));
 | |
| }
 | |
| 
 | |
| 
 | |
| // 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;
 | |
| }
 | |
| .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] {
 | |
|   background-color: #f5f5f5;
 | |
|   border-color: #ddd;
 | |
|   cursor: not-allowed;
 | |
| }
 | |
| 
 | |
| // 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;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Help Text
 | |
| // TODO: Do we need to set basefont and baseline here?
 | |
| .help-inline,
 | |
| .help-block {
 | |
|   font-size: @basefont;
 | |
|   line-height: @baseline;
 | |
|   color: @grayLight;
 | |
| }
 | |
| .help-inline {
 | |
|   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;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Allow us to put symbols and text within the input field for a cleaner look
 | |
| .input-prepend,
 | |
| .input-append {
 | |
|   input {
 | |
|     .border-radius(0 3px 3px 0);
 | |
|   }
 | |
|   .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;
 | |
|     margin-right: -1px;
 | |
|     font-weight: normal;
 | |
|     line-height: 18px;
 | |
|     color: @grayLight;
 | |
|     text-align: center;
 | |
|     text-shadow: 0 1px 0 @white;
 | |
|     .border-radius(3px 0 0 3px);
 | |
|   }
 | |
|   .active {
 | |
|     background: lighten(@green, 30);
 | |
|     border-color: @green;
 | |
|   }
 | |
| }
 | |
| .input-prepend {
 | |
|   .add-on {
 | |
|     *margin-top: 1px; /* IE6-7 */
 | |
|   }
 | |
| }
 | |
| .input-append {
 | |
|   input {
 | |
|     float: left;
 | |
|     .border-radius(3px 0 0 3px);
 | |
|   }
 | |
|   .add-on {
 | |
|     .border-radius(0 3px 3px 0);
 | |
|     margin-right: 0;
 | |
|     margin-left: -1px;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // 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;
 | |
|     }
 | |
|     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] {
 | |
|     margin-bottom: 0;
 | |
|     margin-left: -20px;
 | |
|     float: left;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Stacked forms
 | |
| .form-stacked {
 | |
|   padding-left: 20px;
 | |
|   fieldset {
 | |
|     padding-top: @baseline / 2;
 | |
|   }
 | |
|   legend {
 | |
|     padding-left: 0;
 | |
|   }
 | |
|   label {
 | |
|     display: block;
 | |
|     float: none;
 | |
|     width: auto;
 | |
|     font-weight: bold;
 | |
|     text-align: left;
 | |
|     line-height: 20px;
 | |
|     padding-top: 0;
 | |
|   }
 | |
|   .clearfix {
 | |
|     margin-bottom: @baseline / 2;
 | |
|     div.input {
 | |
|       margin-left: 0;
 | |
|     }
 | |
|   }
 | |
|   .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;
 | |
|   }
 | |
| }
 |