//============================================================ // // SCSS CSS3 Mixins // // @description CSS3 mixins for projects using SCSS // @see http://sass-lang.com/ // @version 2.00 // // @author Matthew Wagerfield // @see http://matthew.wagerfield.com // @see http://twitter.com/mwagerfield // // ---------- INDEX ---------- // // Display: // @mixin display-box // @mixin box-orient // @mixin box-pack // @mixin box-align // @mixin box-flex // @mixin box-sizing // @mixin user-select // @mixin appearance // // Decoration: // @mixin border-radius // @mixin box-shadow // @mixin text-shadow // @mixin linear-gradient // @mixin radial-gradient // // Transformation: // @mixin transform // @mixin transform-origin // @mixin transform-style // @mixin perspective // @mixin perspective-origin // @mixin backface-visibility // @mixin matrix // @mixin translate // @mixin scale // @mixin rotate // @mixin skew // // Animation: // @mixin transition // @mixin animation // @mixin easing // //============================================================ // Default Browser Support $defaultWebkitSupport: true; $defaultFirefoxSupport: true; $defaultExplorerSupport: true; $defaultOperaSupport: false; //============================================================ // // prefix-property // // @param property : String // @param value : String // @param supportWebkit : Boolean // @param supportFirefox : Boolean // @param supportExplorer : Boolean // @param supportOpera : Boolean // //============================================================ @mixin prefix-property($property, $value, $supportWebkit: $defaultWebkitSupport, $supportFirefox: $defaultFirefoxSupport, $supportExplorer: $defaultExplorerSupport, $supportOpera: $defaultOperaSupport) { @if $supportWebkit { -webkit-#{$property}: $value; } @if $supportFirefox { -moz-#{$property}: $value; } @if $supportExplorer { -ms-#{$property}: $value; } @if $supportOpera { -o-#{$property}: $value; } #{$property}: $value; } //============================================================ // // prefix-value // // @param property : String // @param value : String // @param supportWebkit : Boolean // @param supportFirefox : Boolean // @param supportExplorer : Boolean // @param supportOpera : Boolean // //============================================================ @mixin prefix-value($property, $value, $supportWebkit: $defaultWebkitSupport, $supportFirefox: $defaultFirefoxSupport, $supportExplorer: $defaultExplorerSupport, $supportOpera: $defaultOperaSupport) { @if $supportWebkit { #{$property}: -webkit-#{$value}; } @if $supportFirefox { #{$property}: -moz-#{$value}; } @if $supportExplorer { #{$property}: -ms-#{$value}; } @if $supportOpera { #{$property}: -o-#{$value}; } #{$property}: $value; } //============================================================ // // display-box // // @see http://www.w3.org/TR/css3-flexbox/ // @see http://www.html5rocks.com/en/tutorials/flexbox/quick/ // //============================================================ @mixin display-box { @include prefix-value(display, box); } //============================================================ // // box-orient // // @param value : horizontal | // vertical | // inherit // // @see http://www.w3.org/TR/css3-flexbox/ // @see http://www.html5rocks.com/en/tutorials/flexbox/quick/ // //============================================================ @mixin box-orient($arguments) { @include prefix-property(box-orient, unquote($arguments)); } //============================================================ // // box-pack // // @param value : start | // end | // center | // justify // // @see http://www.w3.org/TR/css3-flexbox/ // @see http://www.html5rocks.com/en/tutorials/flexbox/quick/ // //============================================================ @mixin box-pack($arguments) { @include prefix-property(box-pack, unquote($arguments)); } //============================================================ // // box-align // // @param value : start | // end | // center | // baseline | // stretch // // @see http://www.w3.org/TR/css3-flexbox/ // @see http://www.html5rocks.com/en/tutorials/flexbox/quick/ // //============================================================ @mixin box-align($arguments) { @include prefix-property(box-align, unquote($arguments)); } //============================================================ // // box-flex // // @param value : 0 | Integer // // @see http://www.w3.org/TR/css3-flexbox/ // @see http://www.html5rocks.com/en/tutorials/flexbox/quick/ // //============================================================ @mixin box-flex($arguments) { @include prefix-property(box-flex, unquote($arguments)); } //============================================================ // // box-sizing // // @param value : content-box | // padding-box | // border-box | // inherit // // @see http://www.w3.org/TR/css3-ui/#box-sizing // //============================================================ @mixin box-sizing($arguments) { @include prefix-property(box-sizing, unquote($arguments)); } //============================================================ // // user-select // // @param value : none | // text | // toggle | // element | // elements | // all | // inherit // // @see http://www.w3.org/TR/2000/WD-css3-userint-20000216#user-select // //============================================================ @mixin user-select($arguments) { @include prefix-property(user-select, unquote($arguments)); @include prefix-property(touch-callout, unquote($arguments), true, false, false, false); } //============================================================ // // appearance // // @param value : button | // push-button | // hyperlink | // radio-button | // checkbox | // pop-up-menu | // list-menu | // radio-group | // checkbox-group | // field | // password | // normal | // inherit | // none // // @see http://www.w3.org/TR/css3-ui/#appearance // @see http://www.cssportal.com/css-properties/appearance.htm // @see https://developer.mozilla.org/en/CSS/-moz-appearance // //============================================================ @mixin appearance($arguments) { @include prefix-property(appearance, unquote($arguments), true, true, false, false); } //============================================================ // // border-radius // // @param top-left-radius : px, em, % // @param top-right-radius : px, em, % // @param bottom-right-radius : px, em, % // @param bottom-left-radius : px, em, % // // @see http://www.w3.org/TR/css3-background/#border-radius // //============================================================ @mixin border-radius($arguments) { @include prefix-property(border-radius, unquote($arguments)); //@include prefix-property(background-clip, padding-box, true, true, false, false); } //============================================================ // // box-shadow // // @param color : #000, rgba, hsla // @param horizontal-offset : px, em // @param vertical-offset : px, em // @param blur-radius : px, em // @param spread-distance : px, em // @param inset : inset // // @see http://www.w3.org/TR/css3-background/#box-shadow // //============================================================ @mixin box-shadow($arguments) { @include prefix-property(box-shadow, unquote($arguments)); } //============================================================ // // text-shadow // // @param color : #000, rgba, hsla // @param horizontal-offset : px, em // @param vertical-offset : px, em // @param blur-radius : px, em // // @see http://www.w3.org/TR/css3-text/#text-shadow // //============================================================ @mixin text-shadow($arguments) { @include prefix-property(text-shadow, unquote($arguments), false, false, false, false); } //============================================================ // // linear-gradient // // @param angle : top, left, 90deg // @param colorA : #000 0%, red 0% // @param colorB : #000 50%, red 50% // @param colorC : #000 100%, red 100% // // @example @include linear-gradient("top, crimson 0%, black 100%"); // // @see http://dev.w3.org/csswg/css3-images/#linear-gradients // //============================================================ @mixin linear-gradient($arguments) { @include prefix-value(background-image, linear-gradient(unquote($arguments))); } //============================================================ // // radial-gradient // // @param position : center, left top, 50% 50% // @param shape : circle, ellipse, 100% 75% // @param size : closest-side | // farthest-side | // closest-corner | // farthest-corner | // @param colorA : #000 0%, red 0% // @param colorB : #000 50%, red 50% // @param colorC : #000 100%, red 100% // // @example @include radial-gradient("50% 50%, circle, crimson 0%, black 100%"); // // @see http://dev.w3.org/csswg/css3-images/#radial-gradients // //============================================================ @mixin radial-gradient($arguments) { @include prefix-value(background-image, radial-gradient(unquote($arguments))); } //============================================================ // // transform // // @param functions : matrix() // : translate() // : scale() // : rotate() // : skew() // // @see http://www.w3.org/TR/css3-2d-transforms/ // //============================================================ @mixin transform($arguments) { @include prefix-property(transform, unquote($arguments)); } //============================================================ // // transform-origin // // @param value : 50% 50% | // left | // center | // right | // px | // em | // % // // @see http://www.w3.org/TR/css3-3d-transforms/#transform-origin-property // //============================================================ @mixin transform-origin($arguments) { @include prefix-property(transform-origin, unquote($arguments)); } //============================================================ // // transform-style // // @param value : preserve-3d | flat // // @see http://www.w3.org/TR/css3-3d-transforms/#transform-style-property // //============================================================ @mixin transform-style($arguments) { @include prefix-property(transform-style, unquote($arguments)); } //============================================================ // // perspective // // @param value : none | 0, 1, 100, 1000, etc // // @see http://www.w3.org/TR/css3-3d-transforms/#perspective-property // //============================================================ @mixin perspective($arguments) { @include prefix-property(perspective, unquote($arguments)); } //============================================================ // // perspective-origin // // @param value : left | // center | // right | // px | // em | // % // // @see http://www.w3.org/TR/css3-3d-transforms/#perspective-origin-property // //============================================================ @mixin perspective-origin($arguments) { @include prefix-property(perspective-origin, unquote($arguments)); } //============================================================ // // backface-visibility // // @param value : visible | hidden // // @see http://www.w3.org/TR/css3-3d-transforms/#backface-visibility-property // //============================================================ @mixin backface-visibility($arguments) { @include prefix-property(backface-visibility, unquote($arguments)); } //============================================================ // // matrix // // @param a : Number // @param b : Number // @param c : Number // @param d : Number // @param e : Number // @param f : Number // // http://www.w3.org/TR/css3-3d-transforms/#transform-functions // //============================================================ @mixin matrix($arguments) { @include transform(matrix(unquote($arguments))); } //============================================================ // // translate // // @param translate-x : px // @param translate-y : px // // http://www.w3.org/TR/css3-3d-transforms/#transform-functions // //============================================================ @mixin translate($arguments) { @include transform(translate(unquote($arguments))); } //============================================================ // // scale // // @param scale-x : 0.5, 2, etc // @param scale-y : 0.5, 2, etc // // http://www.w3.org/TR/css3-3d-transforms/#transform-functions // //============================================================ @mixin scale($arguments) { @include transform(scale(unquote($arguments))); } //============================================================ // // rotate // // @param angle : 0deg // // http://www.w3.org/TR/css3-3d-transforms/#transform-functions // //============================================================ @mixin rotate($arguments) { @include transform(rotate(unquote($arguments))); } //============================================================ // // skew // // @param angle-x : 0deg // @param angle-y : 0deg // // http://www.w3.org/TR/css3-3d-transforms/#transform-functions // //============================================================ @mixin skew($arguments) { @include transform(skew(unquote($arguments))); } //============================================================ // // transition // // @param property : all, left, opacity, etc // @param duration : 1s, 1000ms // @param timing-function : linear, ease-in-out, etc // @param delay : 1s, 1000ms // // @see http://www.w3.org/TR/css3-transitions/ // //============================================================ @mixin transition($arguments) { @include prefix-property(transition, unquote($arguments)); } //============================================================ // // animation // // @param name : String // @param duration : 0.5s, 1.8s, 2000ms // @param timing-function : ease | // linear | // ease-in | // ease-out | // ease-in-out | // step-start | // step-end | // cubic-bezier // @param delay : 0.5s, 1.8s, 2000ms // @param iteration-count : infinite | // number // @param direction : normal | // reverse | // alternate | // alternate-reverse // @param fill mode : none | // forwards | // backwards | // both // // @see http://www.w3.org/TR/css3-animations/ // //============================================================ @mixin animation($arguments) { @include prefix-property(animation, unquote($arguments)); } @mixin text-overflow() { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } //============================================================ // // easing // // Thanks to Robert Penner for his sterling work on easing, // and to Matthew Lein for converting these functions into // approximated cubic-bezier functions. Respect. // // @see http://robertpenner.com/ // @see http://matthewlein.com/ceaser/ // //============================================================ // Cubic $easeInCubic : cubic-bezier(0.550, 0.055, 0.675, 0.190); $easeOutCubic : cubic-bezier(0.215, 0.610, 0.355, 1.000); $easeInOutCubic : cubic-bezier(0.645, 0.045, 0.355, 1.000); // Circ $easeInCirc : cubic-bezier(0.600, 0.040, 0.980, 0.335); $easeOutCirc : cubic-bezier(0.075, 0.820, 0.165, 1.000); $easeInOutCirc : cubic-bezier(0.785, 0.135, 0.150, 0.860); // Expo $easeInExpo : cubic-bezier(0.950, 0.050, 0.795, 0.035); $easeOutExpo : cubic-bezier(0.190, 1.000, 0.220, 1.000); $easeInOutExpo : cubic-bezier(1.000, 0.000, 0.000, 1.000); // Quad $easeInQuad : cubic-bezier(0.550, 0.085, 0.680, 0.530); $easeOutQuad : cubic-bezier(0.250, 0.460, 0.450, 0.940); $easeInOutQuad : cubic-bezier(0.455, 0.030, 0.515, 0.955); // Quart $easeInQuart : cubic-bezier(0.895, 0.030, 0.685, 0.220); $easeOutQuart : cubic-bezier(0.165, 0.840, 0.440, 1.000); $easeInOutQuart : cubic-bezier(0.770, 0.000, 0.175, 1.000); // Quint $easeInQuint : cubic-bezier(0.755, 0.050, 0.855, 0.060); $easeOutQuint : cubic-bezier(0.230, 1.000, 0.320, 1.000); $easeInOutQuint : cubic-bezier(0.860, 0.000, 0.070, 1.000); // Sine $easeInSine : cubic-bezier(0.470, 0.000, 0.745, 0.715); $easeOutSine : cubic-bezier(0.390, 0.575, 0.565, 1.000); $easeInOutSine : cubic-bezier(0.445, 0.050, 0.550, 0.950); // Back $easeInBack : cubic-bezier(0.600, -0.280, 0.735, 0.045); $easeOutBack : cubic-bezier(0.175, 0.885, 0.320, 1.275); $easeInOutBack : cubic-bezier(0.680, -0.550, 0.265, 1.550);