// Global Variables //------------------------------------------------------ $modules: () !default; $experimental: true !default; // prefix elements $prefix-webkit: true !global; $prefix-moz: true !global; $prefix-spec: true !global; // color elements $white: #FFF !default; $black: #000 !default; $bluejeans-dark: #4A89DC !default; $bluejeans-light: #5D9CEC !default; $aqua-dark: #3BAFDA !default; $aqua-light: #4FC1E9 !default; $mint-dark: #37BC9B !default; $mint-light: #48CFAD !default; $grass-dark: #8CC152 !default; $grass-light: #A0D468 !default; $sunflower-dark: #F6BB42 !default; $sunflower-light: #FFCE54 !default; $bittersweet-dark: #E9573F !default; $bittersweet-light: #FC6E51 !default; $grapefruit-dark: #DA4453 !default; $grapefruit-light: #ED5565 !default; $lavender-dark: #967ADC !default; $lavender-light: #AC92EC !default; $pinkrose-dark: #D770AD !default; $pinkrose-light: #EC87C0 !default; $lightgray-dark: #E6E9ED !default; $lightgray-light: #F5F7FA !default; $mediumgray-dark: #AAB2BD !default; $mediumgray-light: #CCD1D9 !default; $darkgray-dark: #434A54 !default; $darkgray-light: #656D78 !default; // Global Mixins //------------------------------------------------------ // We use this to loading scss files @mixin exports($name) { @if index($modules, $name) { } @else { $modules: append($modules, $name) !global; @content; } } // We use this to do set opacity @mixin opacity($opacity:50, $filter: true) { opacity: $opacity / 100; @if $filter { filter: alpha(opacity=$opacity); } } // We use this to ellipsis text @mixin ellipsis($width: 100%) { display: inline-block; max-width: $width; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } // We use this to add across browser prefixes @mixin prefixer($property, $value, $prefixes: webkit moz spec) { @if $experimental { @each $prefix in $prefixes { @if $prefix != spec { @if $property == border-top-left-radius and $prefix == moz { @if $prefix-moz { -moz-border-radius-topleft: $value; } } @else if $property == border-top-right-radius and $prefix == moz { @if $prefix-moz { -moz-border-radius-topright: $value; } } @else if $property == border-bottom-right-radius and $prefix == moz { @if $prefix-moz { -moz-border-radius-bottomright: $value; } } @else if $property == border-bottom-left-radius and $prefix == moz { @if $prefix-moz { -moz-border-radius-bottomleft: $value; } } @else { @if $prefix == webkit { @if $prefix-webkit { -webkit-#{$property}: $value; } } @if $prefix == moz { @if $prefix-moz { -moz-#{$property}: $value; } } } } @else { @if $prefix-spec { #{$property}: $value; } } } } } // We use this to add box-sizing across browser prefixes @mixin box-sizing($value: border-box) { @include prefixer($property: box-sizing, $value: $value, $prefixes: webkit moz spec); } // We use this to control border radius. @mixin radius($type: border-radius, $value: $global-radius) { @include prefixer($property: $type, $value: $value, $prefixes: webkit moz spec); } // We use this to control box shadow. @mixin box-shadow($value) { @include prefixer($property: box-shadow, $value: $value, $prefixes: webkit moz spec); } // We use this to creat animation effect. // Examples: // @include keyframes(move-the-object) { // 0% { left: 100px; } // 100% { left: 200px; } // } // .object-to-animate { // @include animation(move-the-object .5s 1); // } @mixin animation ($value...) { @include prefixer($property: animation, $value: $value, $prefixes: webkit moz spec); } // Individual Animation Properties @mixin animation-name ($value...) { @include prefixer($property: animation-name, $value: $value, $prefixes: webkit moz spec); } @mixin animation-duration ($value...) { @include prefixer($property: animation-duration, $value: $value, $prefixes: webkit moz spec); } @mixin animation-timing-function ($value...) { // ease | linear | ease-in | ease-out | ease-in-out @include prefixer($property: animation-timing-function, $value: $value, $prefixes: webkit moz spec); } @mixin animation-iteration-count ($value...) { // infinite | @include prefixer($property: animation-iteration-count, $value: $value, $prefixes: webkit moz spec); } @mixin animation-direction ($value...) { @include prefixer($property: animation-direction, $value: $value, $prefixes: webkit moz spec); } @mixin animation-play-state ($value...) { // running | paused @include prefixer($property: animation-play-state, $value: $value, $prefixes: webkit moz spec); } @mixin animation-delay ($value...) { @include prefixer($property: animation-delay, $value: $value, $prefixes: webkit moz spec); } @mixin animation-fill-mode ($value...) { // none | forwards | backwards | both @include prefixer($property: animation-fill-mode, $value: $value, $prefixes: webkit moz spec); } @mixin keyframes($name) { $original-prefix-webkit: $prefix-webkit; $original-prefix-moz: $prefix-moz; $original-prefix-spec: $prefix-spec; @if $original-prefix-webkit { @include disable-prefix(); $prefix-webkit: true !global; @-webkit-keyframes #{$name} { @content; } } @if $original-prefix-moz { @include disable-prefix(); $prefix-moz: true !global; @-moz-keyframes #{$name} { @content; } } @if $original-prefix-spec { @include disable-prefix(); $prefix-spec: true !global; @keyframes #{$name} { @content; } } $prefix-webkit: $original-prefix-webkit !global; $prefix-moz: $original-prefix-moz !global; $prefix-spec: $original-prefix-spec !global; } // We use this to set transform. @mixin transform($value: none) { // none | @include prefixer($property: transform, $value: $value, $prefixes: webkit moz spec); } @mixin transform-origin($value: 50%) { // x-axis - left | center | right | length | % // y-axis - top | center | bottom | length | % // z-axis - length @include prefixer($property: transform-origin, $value: $value, $prefixes: webkit moz spec); } @mixin transform-style ($value: flat) { @include prefixer($property: transform-style, $value: $value, $prefixes: webkit moz spec); } // We use this to set transition. // example: @include transition (all 2s ease-in-out); // @include transition (opacity 1s ease-in 2s, width 2s ease-out); // @include transition-property (transform, opacity); @mixin transition ($value...) { @if length($value) >= 1 { @include prefixer($property: transition, $value: $value, $prefixes: webkit moz spec); } @else { $value: all 0.15s ease-out 0s; @include prefixer($property: transition, $value: $value, $prefixes: webkit moz spec); } }