UNPKG

amazeui

Version:

Sleek, intuitive, and powerful front-end framework for faster and easier web development.

1,060 lines (895 loc) 31.2 kB
// Name: Mixins // // Description: Less mixins for Amaze UI // // - Box-Model // - Typographic // - Visual // - CSS3 Vendor Prefixes - NOT RECOMMENDED, USE AutoPrefixer // - Flex Box // - Utilities // - COMPONENTS // // ============================================================================= // ============================================================================= // Box Model // ============================================================================= // Micro clear fix // via: http://nicolasgallagher.com/micro-clearfix-hack/ .clearfix() { &:before, &:after { content: " "; display: table; } &:after { clear: both; } } // Center-align a block level element .center-block() { display: block; margin-left: auto; margin-right: auto; } // Sizing shortcuts // ----------------------------------------------------------------------------- .size(@width; @height) { width: @width; height: @height; } .square(@size) { .size(@size; @size); } // Resize anything // ----------------------------------------------------------------------------- .resizable(@direction) { resize: @direction; // Options: horizontal, vertical, both overflow: auto; // Safari fix } // Scrollable // ----------------------------------------------------------------------------- // TODO: add scrollableX & scrollableY .scrollable() { overflow: auto; -webkit-overflow-scrolling: touch; } // ============================================================================= // Typographic // ============================================================================= // Text overflow // Requires inline-block or block for proper styling // ----------------------------------------------------------------------------- .text-overflow(@display: block) { display: @display; word-wrap: normal; /* for IE */ text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } // CSS image replacement // via: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 // ----------------------------------------------------------------------------- .text-hide() { font: ~"0/0" a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } // Line clamp // http://dropshado.ws/post/1015351370/webkit-line-clamp // ----------------------------------------------------------------------------- .am-line-clamp(@lines, @line-height: 1.3em) { text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: @lines; // number of lines to show overflow: hidden; line-height: @line-height; max-height: @line-height * @lines; } // ============================================================================= // Visual // ============================================================================= // WebKit-style focus .tab-focus() { // Default outline: thin dotted; // WebKit outline: 1px auto -webkit-focus-ring-color; outline-offset: -2px; } // Single side border-radius // ----------------------------------------------------------------------------- .border-top-radius(@radius) { border-top-right-radius: @radius; border-top-left-radius: @radius; } .border-right-radius(@radius) { border-bottom-right-radius: @radius; border-top-right-radius: @radius; } .border-bottom-radius(@radius) { border-bottom-right-radius: @radius; border-bottom-left-radius: @radius; } .border-left-radius(@radius) { border-bottom-left-radius: @radius; border-top-left-radius: @radius; } // Opacity // ----------------------------------------------------------------------------- .opacity(@opacity) { opacity: @opacity; } // GRADIENTS // ----------------------------------------------------------------------------- // Horizontal gradient, from left to right // Creates two color stops, start and end, by specifying a color and position for each color stop. // Color stops are not available in IE9 and below. .gradient-horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { background-image: -webkit-gradient(linear, @start-percent top, @end-percent top, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+ background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1+, Chrome 10+ background-image: -moz-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // FF 3.6+ background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10 background-repeat: repeat-x; filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color), argb(@end-color))); // IE9 and down } // Vertical gradient, from top to bottom // Creates two color stops, start and end, by specifying a color and position for each color stop. // Color stops are not available in IE9 and below. .gradient-vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { background-image: -webkit-gradient(linear, left @start-percent, left @end-percent, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+ background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1+, Chrome 10+ background-image: -moz-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // FF 3.6+ background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10 background-repeat: repeat-x; filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color), argb(@end-color))); // IE9 and down } .gradient-directional(@start-color: #555; @end-color: #333; @deg: 45deg) { background-repeat: repeat-x; background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1+, Chrome 10+ background-image: -moz-linear-gradient(@deg, @start-color, @end-color); // FF 3.6+ background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10 } .gradient-horizontal-3c(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color)); background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); background-image: -moz-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color); background-repeat: no-repeat; filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback } .gradient-vertical-3c(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color)); background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color); background-image: -moz-linear-gradient(top, @start-color, @mid-color @color-stop, @end-color); background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color); background-repeat: no-repeat; filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color), argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback } //放射状 .gradient-radial(@inner-color: #555; @outer-color: #333) { background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@inner-color), to(@outer-color)); background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color); background-image: -moz-radial-gradient(circle, @inner-color, @outer-color); background-image: radial-gradient(circle, @inner-color, @outer-color); background-repeat: no-repeat; } .gradient-striped(@color: rgba(255,255,255,.15); @angle: 45deg) { background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, @color), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, @color), color-stop(.75, @color), color-stop(.75, transparent), to(transparent)); background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); } // Legacy aliases #gradient { .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { .gradient-horizontal(@start-color; @end-color; @start-percent; @end-percent); } .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { .gradient-vertical(@start-color; @end-color; @start-percent; @end-percent); } .directional(@start-color: #555; @end-color: #333; @deg: 45deg) { .gradient-directional(@start-color; @end-color; @deg); } .horizontal-3c(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { .gradient-horizontal-3c(@start-color; @mid-color; @color-stop; @end-color); } .vertical-3c(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { .gradient-vertical-3c(@start-color; @mid-color; @color-stop; @end-color); } //放射状 .radial(@inner-color: #555; @outer-color: #333) { .gradient-radial(@inner-color; @outer-color); } .striped(@color: rgba(255,255,255,.15); @angle: 45deg) { .gradient-striped(@color; @angle); } } // Reset filters for IE // // When you need to remove a gradient background, do not forget to use this to // reset the IE filter for IE9 and below. // ----------------------------------------------------------------------------- .reset-filter() { filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); } // Retina images // Short retina mixin for setting background-image and -size // ----------------------------------------------------------------------------- .retina-bg-img(@file-1x; @file-2x; @width-1x; @height-1x) { background-image: url("@{file-1x}"); @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) { background-image: url("@{file-2x}"); background-size: @width-1x @height-1x; } } // Responsive image // Keep images from scaling beyond the width of their parents. // ----------------------------------------------------------------------------- .img-responsive(@display: block) { display: @display; max-width: 100%; // Part 1: Set a maximum relative to the parent height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching } // ============================================================================= // CSS3 Vendor Prefixes // ============================================================================= // Try to use Autoprefixer replace these mixins // - Animations // - Backface visibility // - Box shadow // - Box sizing // - Content columns // - Hyphens // - Placeholder text // - Transformations // - Transitions // - User Select // Animations // ----------------------------------------------------------------------------- .animation(@animation) { -webkit-animation: @animation; animation: @animation; } .animation-name(@name) { -webkit-animation-name: @name; animation-name: @name; } .animation-duration(@duration) { -webkit-animation-duration: @duration; animation-duration: @duration; } .animation-timing-function(@timing-function) { -webkit-animation-timing-function: @timing-function; animation-timing-function: @timing-function; } .animation-delay(@delay) { -webkit-animation-delay: @delay; animation-delay: @delay; } .animation-iteration-count(@iteration-count) { -webkit-animation-iteration-count: @iteration-count; animation-iteration-count: @iteration-count; } .animation-direction(@direction) { -webkit-animation-direction: @direction; animation-direction: @direction; } .animation-fill-mode(@fill-mode) { -webkit-animation-fill-mode: @fill-mode; animation-fill-mode: @fill-mode; } // Backface visibility // Prevent browsers from flickering when using CSS 3D transforms. // Default value is `visible`, but can be changed to `hidden` // ----------------------------------------------------------------------------- .backface-visibility(@visibility) { -webkit-backface-visibility: @visibility; -moz-backface-visibility: @visibility; backface-visibility: @visibility; } // Box shadows // ----------------------------------------------------------------------------- .box-shadow(@shadow) { -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 & bb7.0 box-shadow: @shadow; } // Box sizing // ----------------------------------------------------------------------------- .box-sizing(@boxmodel) { -webkit-box-sizing: @boxmodel; -moz-box-sizing: @boxmodel; box-sizing: @boxmodel; } // Content Columns // ----------------------------------------------------------------------------- .content-columns(@column-count; @column-gap: @grid-gutter-width) { -webkit-column-count: @column-count; -moz-column-count: @column-count; column-count: @column-count; -webkit-column-gap: @column-gap; -moz-column-gap: @column-gap; column-gap: @column-gap; } // Optional hyphenation // ----------------------------------------------------------------------------- .hyphens(@mode: auto) { word-wrap: break-word; -webkit-hyphens: @mode; -moz-hyphens: @mode; -ms-hyphens: @mode; // IE10+ -o-hyphens: @mode; hyphens: @mode; } // Placeholder text // ----------------------------------------------------------------------------- .placeholder(@color: @input-color-placeholder) { // Firefox &::-moz-placeholder { color: @color; opacity: 1; } // Internet Explorer 10+ &:-ms-input-placeholder { color: @color; } // Safari and Chrome &::-webkit-input-placeholder { color: @color; } } // Transformations // ----------------------------------------------------------------------------- .scale(@ratio) { -webkit-transform: scale(@ratio); -ms-transform: scale(@ratio); // IE9 only -o-transform: scale(@ratio); transform: scale(@ratio); } .scale(@ratioX; @ratioY) { -webkit-transform: scale(@ratioX, @ratioY); -ms-transform: scale(@ratioX, @ratioY); // IE9 only -o-transform: scale(@ratioX, @ratioY); transform: scale(@ratioX, @ratioY); } .scaleX(@ratio) { -webkit-transform: scaleX(@ratio); -ms-transform: scaleX(@ratio); // IE9 only -o-transform: scaleX(@ratio); transform: scaleX(@ratio); } .scaleY(@ratio) { -webkit-transform: scaleY(@ratio); -ms-transform: scaleY(@ratio); // IE9 only -o-transform: scaleY(@ratio); transform: scaleY(@ratio); } .skew(@x; @y) { -webkit-transform: skew(@x, @y); -ms-transform: skewX(@x) skewY(@y); // IE9+ transform: skew(@x, @y); } .translate(@x: 0; @y: 0) { -webkit-transform: translate(@x, @y); -ms-transform: translate(@x, @y); // IE9+ transform: translate(@x, @y); } .translateX(@x: 0) { -webkit-transform: translateX(@x); -ms-transform: translateX(@x); // IE9+ transform: translateX(@x); } .translateY(@y: 0) { -webkit-transform: translateY(@y); -ms-transform: translateY(@y); // IE9+ transform: translateY(@y); } .translate3d(@x:0; @y:0; @z:0) { -webkit-transform: translate3d(@x,@y,@z); -ms-transform: translate3d(@x,@y,@z); transform: translate3d(@x,@y,@z); } .rotate(@degrees) { -webkit-transform: rotate(@degrees); -ms-transform: rotate(@degrees); // IE9+ transform: rotate(@degrees); } .rotateX(@degrees) { -webkit-transform: rotateX(@degrees); -ms-transform: rotateX(@degrees); // IE9+ transform: rotateX(@degrees); } .rotateY(@degrees) { -webkit-transform: rotateY(@degrees); -ms-transform: rotateY(@degrees); // IE9+ transform: rotateY(@degrees); } .perspective(@perspective) { -webkit-perspective: @perspective; -moz-perspective: @perspective; perspective: @perspective; } .perspective-origin(@perspective) { -webkit-perspective-origin: @perspective; -moz-perspective-origin: @perspective; perspective-origin: @perspective; } .transform-origin(@origin) { -webkit-transform-origin: @origin; -ms-transform-origin: @origin; transform-origin: @origin; } .transform(@tramsform) { -webkit-transform: @tramsform; -ms-transform: @tramsform; transform: @tramsform; } // Transitions // ----------------------------------------------------------------------------- .transition(@transition) { -webkit-transition: @transition; transition: @transition; } .transition-property(@transition-property) { -webkit-transition-property: @transition-property; transition-property: @transition-property; } .transition-delay(@transition-delay) { -webkit-transition-delay: @transition-delay; transition-delay: @transition-delay; } .transition-duration(@transition-duration) { -webkit-transition-duration: @transition-duration; transition-duration: @transition-duration; } .transition-timing-function(@timing-function) { -webkit-transition-timing-function: @timing-function; transition-timing-function: @timing-function; } .transition-transform(@transition) { -webkit-transition: -webkit-transform @transition; -moz-transition: -moz-transform @transition; -o-transition: -o-transform @transition; transition: transform @transition; } // User select // For selecting text on the page // Formal syntax: none | text | all | element // ----------------------------------------------------------------------------- .user-select(@select) { -webkit-user-select: @select; -moz-user-select: @select; -ms-user-select: @select; // IE10+ user-select: @select; } // ============================================================================= // Flexbox // ============================================================================= // The spec: http://www.w3.org/TR/css3-flexbox // via: https://gist.github.com/jayj/4012969 // https://github.com/mastastealth/sass-flex-mixin/blob/master/flex.scss // http://codepen.io/adamjohnson/pen/savzI // http://css-tricks.com/old-flexbox-and-new-flexbox/ // http://html5please.com/#flexbox // // NOTE: NEED CODE REVIEW // ----------------------------------------------------------------------------- // Flexbox display // flex | inline-flex .flexbox(@display: flex) { display: -webkit-box; // Old syntax display: ~"-webkit-@{display}"; display: ~"-moz-@{display}"; display: ~"-ms-@{display}box"; // IE10 uses -ms-flexbox display: ~"-ms-@{display}"; // IE11 display: @display; } // The 'flex' shorthand // This shorthand for `flex-grow`, `flex-shrink` and `flex-basis` combined. // The second and third parameters (flex-shrink and flex-basis) are optional. // Default is 0 1 auto. // - applies to: flex items // <positive-number>, initial, auto, or none .flex(@columns: 1) { -webkit-box-flex: @columns; // Old syntax -webkit-flex: @columns; -moz-flex: @columns; -ms-flex: @columns; flex: @columns; } // Flex Flow Direction // - applies to: flex containers // row | row-reverse | column | column-reverse .flex-direction(@direction: row) { -webkit-flex-direction: @direction; -moz-flex-direction: @direction; -ms-flex-direction: @direction; flex-direction: @direction; } // Flex Line Wrapping // - applies to: flex containers // nowrap | wrap | wrap-reverse .flex-wrap(@wrap: nowrap) { -webkit-flex-wrap: @wrap; -moz-flex-wrap: @wrap; -ms-flex-wrap: @wrap; flex-wrap: @wrap; } // Flex Direction and Wrap // The shorthand for `flex-direction` and `flex-wrap` // - applies to: flex containers // <flex-direction> || <flex-wrap> .flex-flow(@flow: ~"row nowrap") { -webkit-flex-flow: @flow; -moz-flex-flow: @flow; -ms-flex-flow: @flow; flex-flow: @flow; } // Axis Alignment // - applies to: flex containers // flex-start | flex-end | center | space-between | space-around .justify-content(@justify: flex-start) { -webkit-justify-content: @justify; -moz-justify-content: @justify; -ms-justify-content: @justify; justify-content: @justify; } // Packing Flex Lines // - applies to: multi-line flex containers // flex-start | flex-end | center | space-between | space-around | stretch .align-content(@align: stretch) { // http://www.w3.org/TR/2012/WD-css3-flexbox-20120322/#flex-pack -webkit-box-pack: @align; // Old syntax: start | end | center | justify | distribute -webkit-align-content: @align; -moz-align-content: @align; -ms-align-content: @align; align-content: @align; } // Cross-axis Alignment // - applies to: flex containers // flex-start | flex-end | center | baseline | stretch .align-items(@align: stretch) { // start | center | end | baseline | stretch -webkit-box-align: @align; // Old syntax -webkit-align-items: @align; -moz-align-items: @align; -ms-align-items: @align; align-items: @align; } // Display Order // - applies to: flex items // <integer> .flex-order(@order: 0) { -webkit-flex-order: @order; // Old syntax -webkit-order: @order; -moz-order: @order; -ms-order: @order; order: @order; } // Flex grow factor // - applies to: flex items // <number> .flex-grow(@grow: 0) { -webkit-flex-grow: @grow; -moz-flex-grow: @grow; -ms-flex-grow: @grow; flex-grow: @grow; } // Flex shr // - applies to: flex itemsink factor // <number> .flex-shrink(@shrink: 1) { -webkit-flex-shrink: @shrink; -moz-flex-shrink: @shrink; -ms-flex-shrink: @shrink; flex-shrink: @shrink; } // Flex basis // - the initial main size of the flex item // - applies to: flex itemsnitial main size of the flex item // <width> .flex-basis(@width: auto) { -webkit-flex-basis: @width; -moz-flex-basis: @width; -ms-flex-basis: @width; flex-basis: @width; } // Cross-axis Alignment // - applies to: flex items // auto | flex-start | flex-end | center | baseline | stretch .align-self(@align: auto) { -webkit-align-self: @align; -moz-align-self: @align; -ms-align-self: @align; align-self: @align; } // ============================================================================= // Caret // NOTE: If using ::before or ::after, `content: ""` is required // ============================================================================= // Caret - down // ----------------------------------------------------------------------------- .caret-down(@size: 6px; @color:#222) { display: inline-block; width: 0; height: 0; vertical-align: middle; border-top: @size solid @color; border-right: @size solid transparent; border-left: @size solid transparent; border-bottom: 0 dotted; transform: rotate(360deg); } // Caret - up // ----------------------------------------------------------------------------- .caret-up(@size:6px; @color:#222) { display: inline-block; width: 0; height: 0; vertical-align: middle; border-bottom: @size solid @color; border-right: @size solid transparent; border-left: @size solid transparent; border-top: 0 dotted; transform: rotate(360deg); } // Caret - left // ----------------------------------------------------------------------------- .caret-left(@size:6px; @color:#222) { display: inline-block; width: 0; height: 0; vertical-align: middle; border-right: @size solid @color; border-top: @size solid transparent; border-bottom: @size solid transparent; border-left: 0 dotted; transform: rotate(360deg); } // Caret - right // ----------------------------------------------------------------------------- .caret-right(@size:6px; @color:#222) { display: inline-block; width: 0; height: 0; vertical-align: middle; border-left: @size solid @color; border-top: @size solid transparent; border-bottom: @size solid transparent; border-right: 0 dotted; transform: rotate(360deg); } // CSS Arrow Mixin // ----------------------------------------------------------------------------- // // @param: 45deg (default) - right // 135deg - down // -45deg - up // -135deg -left // ------------------------------------------------------------------------ .arrow(@color:#DDD; @width:6px; @border-width: 2px; @deg: 45deg) { display: inline-block; width: @width; height: @width; border: @color solid; border-width: @border-width @border-width 0 0; transform: rotate(@deg); } // ============================================================================= // COMPONENT MIXINS // ============================================================================= // Button variants // ============================================================================= .button-variant(@color; @background; @border) { color: @color; background-color: @background; border-color: @border; a&:visited { color: @color; } &:hover, &:focus, &:active, &.@{ns}active, // fixes #872 // dropdown nested in component has `.am-active` state should not active .@{ns}dropdown.@{ns}active &.@{ns}dropdown-toggle { color: @color; border-color: darken(@border, 12%); } &:hover, &:focus { background-color: darken(@background, 7%); } &:active, &.@{ns}active, .@{ns}dropdown.@{ns}active &.@{ns}dropdown-toggle { background-image: none; background-color: darken(@background, 14%); } &.@{ns}disabled, &[disabled], fieldset[disabled] & { &, &:hover, &:focus, &:active, &.@{ns}active { background-color: @background; border-color: @border; } } // for `.@{ns}btn-group` .@{ns}btn-group &, .@{ns}btn-group-stacked & { border-color: darken(@background, 5%); } // TODO: add `hollow` button style } // Button size // ----------------------------------------------------------------------------- .button-size(@font-size) { font-size: @font-size; // line-height: ensure proper height of button next to small input // line-height: @line-height; } // Form // ============================================================================= // Form validation states // ----------------------------------------------------------------------------- .form-field-validation(@text-color: #555; @border-color: #ccc) { // the label and help text color .@{ns}form-help, .am-form-label, .am-radio, .am-checkbox, .am-radio-inline, .am-checkbox-inline, label { color: @text-color; } // feedback icon [class*="icon-"] { color: @text-color; } } .form-field-validation-filed(@text-color: #555; @border-color: #ccc) { border-color: @border-color !important; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); &:focus { //background-color: rgba(red(@border-color), green(@border-color), blue(@border-color), .05) !important; background-color: @input-focus-bg; border-color: darken(@border-color, 10%); @shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 5px lighten(@border-color, 20%) !important; box-shadow: @shadow !important; } } // Form element focus state // ----------------------------------------------------------------------------- .form-field-focus(@color: @input-border-focus) { @color-rgba: rgba(red(@color), green(@color), blue(@color), .3); &:focus { //background-color: rgba(red(@color), green(@color), blue(@color), .05); background-color: @input-focus-bg; border-color: @color; outline: 0; box-shadow: ~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 5px @{color-rgba}"; } } // Grid // ============================================================================= .grid-container(@gutter: @grid-gutter, @gutter-md: @grid-gutter-md, @max-width: @grid-max-width) { box-sizing: border-box; margin-left: auto; margin-right: auto; padding-left: @gutter; padding-right: @gutter; width: 100%; max-width: @max-width; .clearfix; @media @medium-up { padding-left: @gutter-md; padding-right: @gutter-md; } } // Font ICON mixin // ============================================================================= // 1. Allow margin // 2. Prevent inherit font style // 3. Align vertical to text // 4. Correct line-height // 5. Better font rendering in Webkit .am-icon-font() { display: inline-block; // 1 font: normal normal normal @global-font-size/1 "FontAwesome", sans-serif; // shortening font declaration /*font-weight: normal; // 2 font-style: normal; // 2 vertical-align: baseline; // 3 line-height: 1; // 4*/ font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; // 5 -moz-osx-font-smoothing: grayscale; transform: translate(0, 0); // ensures no half-pixel rendering in firefox } // angle // ============================================================================= // TODO: 分隔成小块 .angle-base() { &:before, &:after { position: absolute; display: block; content: ""; width: 0; height: 0; border: 8px dashed transparent; z-index: 1; } } .angle-up-variant(@border-color: #ddd; @bg-color: #fff; @border-width: 8px) { &:before, &:after { border-bottom-style: solid; border-width: 0 @border-width @border-width; } &:before { border-bottom-color: @border-color; bottom: 0; } &:after { border-bottom-color: @bg-color; bottom: -1px; } } .angle-down-variant(@border-color: #ddd; @bg-color: #fff; @border-width: 8px) { bottom: -(@border-width + 1); &:before, &:after { border-top-style: solid; border-width: @border-width @border-width 0; } &:before { border-top-color: @border-color; bottom: 0; } &:after { border-top-color: @bg-color; bottom: 1px; } } .angle-left-variant(@border-color: #ddd; @bg-color: #fff; @border-width: 8px) { left: -(@border-width + 1); &:before, &:after { border-right-style: solid; border-width: @border-width @border-width @border-width 0; } &:before { border-right-color: @border-color; left: 0; } &:after { border-right-color: @bg-color; left: 1px; } } .angle-right-variant(@border-color: #ddd; @bg-color: #fff; @border-width: 8px) { right: 0; &:before, &:after { border-left-style: solid; border-width: @border-width 0 @border-width @border-width; } &:before { border-left-color: @border-color; left: 0; } &:after { border-left-color: @bg-color; left: -1px; } }