amazeui
Version:
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
1,060 lines (895 loc) • 31.2 kB
text/less
// 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 ;
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%) ;
box-shadow: @shadow ;
}
}
// 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;
}
}