//Defaults @defaultDuration : 0.25s; @defaultEasing : ease; //Animates all properties on an element .animateAll(@duration : @defaultDuration, @easing : @defaultEasing) { -webkit-transition : all @duration @easing; -moz-transition : all @duration @easing; -o-transition : all @duration @easing; transition : all @duration @easing; } //Animates Specific property .animate(@prop, @duration : @defaultDuration, @easing : @defaultEasing) { -webkit-transition : @prop @duration @easing; -moz-transition : @prop @duration @easing; -o-transition : @prop @duration @easing; transition : @prop @duration @easing; } .animateMany(...) { @value: ~`"@{arguments}".replace(/[\[\]]|\,\sX/g, '')`; -webkit-transition-property : @value; -moz-transition-property : @value; -o-transition-property : @value; transition-property : @value; .animateDuration(); .animateEasing(); } .animateDuration(@duration : @defaultDuration) { -webkit-transition-duration : @duration; -moz-transition-duration : @duration; -o-transition-duration : @duration; transition-duration : @duration; } .animateEasing(@easing : @defaultEasing) { -webkit-transition-timing-function : @easing; -moz-transition-timing-function : @easing; -o-transition-timing-function : @easing; transition-timing-function : @easing; } .transition (@prop, @duration: @defaultDuration) { -webkit-transition : @prop @duration, -webkit-transform @duration; -moz-transition : @prop @duration, -moz-transform @duration; -o-transition : @prop @duration, -o-transform @duration; -ms-transition : @prop @duration, -ms-transform @duration; transition : @prop @duration, transform @duration; } .transform (@transform) { -webkit-transform : @transform; -moz-transform : @transform; -o-transform : @transform; -ms-transform : @transform; transform : @transform; } .delay(@delay) { -webkit-transition-delay : @delay; transition-delay : @delay; -webkit-animation-delay : @delay; animation-delay : @delay; } .keep() { -webkit-animation-fill-mode : forwards; -moz-animation-fill-mode : forwards; -ms-animation-fill-mode : forwards; -o-animation-fill-mode : forwards; animation-fill-mode : forwards; } .sequentialDelay(@delayInc : 0.2s, @initialDelay : 0s) { &:nth-child(1) {.delay(0*@delayInc + @initialDelay); } &:nth-child(2) {.delay(1*@delayInc + @initialDelay); } &:nth-child(3) {.delay(2*@delayInc + @initialDelay); } &:nth-child(4) {.delay(3*@delayInc + @initialDelay); } &:nth-child(5) {.delay(4*@delayInc + @initialDelay); } &:nth-child(6) {.delay(5*@delayInc + @initialDelay); } &:nth-child(7) {.delay(6*@delayInc + @initialDelay); } &:nth-child(8) {.delay(7*@delayInc + @initialDelay); } &:nth-child(9) {.delay(8*@delayInc + @initialDelay); } &:nth-child(10) {.delay(9*@delayInc + @initialDelay); } &:nth-child(11) {.delay(10*@delayInc + @initialDelay); } &:nth-child(12) {.delay(11*@delayInc + @initialDelay); } &:nth-child(13) {.delay(12*@delayInc + @initialDelay); } &:nth-child(14) {.delay(13*@delayInc + @initialDelay); } &:nth-child(15) {.delay(14*@delayInc + @initialDelay); } &:nth-child(16) {.delay(15*@delayInc + @initialDelay); } &:nth-child(17) {.delay(16*@delayInc + @initialDelay); } &:nth-child(18) {.delay(17*@delayInc + @initialDelay); } &:nth-child(19) {.delay(18*@delayInc + @initialDelay); } &:nth-child(20) {.delay(19*@delayInc + @initialDelay); } } .createFrames(@name, @from, @to) { @frames: { from { @from(); } to { @to(); } }; @-webkit-keyframes @name {@frames();} @-moz-keyframes @name {@frames();} @-ms-keyframes @name {@frames();} @-o-keyframes @name {@frames();} @keyframes @name {@frames();} } .createAnimation(@name, @duration : @defaultDuration, @easing : @defaultEasing) { -webkit-animation-name : @name; -moz-animation-name : @name; -ms-animation-name : @name; animation-name : @name; -webkit-animation-duration : @duration; -moz-animation-duration : @duration; -ms-animation-duration : @duration; animation-duration : @duration; -webkit-animation-timing-function : @easing; -moz-animation-timing-function : @easing; -ms-animation-timing-function : @easing; animation-timing-function : @easing; } /*************************** Standard Animations ****************************/ .fadeIn(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeIn; @duration; @easing); .createFrames(fadeIn, { opacity : 0; }, { opacity : 1; } ); } .fadeInDown(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeInDown; @duration; @easing); .createFrames(fadeInDown, { opacity : 0; .transform(translateY(20px));}, { opacity : 1; .transform(translateY(0px));} ); } .fadeInTop(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeInTop; @duration; @easing); .createFrames(fadeInTop, { opacity : 0; .transform(translateY(-20px)); }, { opacity : 1; .transform(translateY(0px));} ); } .fadeInLeft(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeInLeft; @duration; @easing); .createFrames(fadeInLeft, { opacity: 0; .transform(translateX(-20px));}, { opacity: 1; .transform(translateX(0));} ); } .fadeInRight(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeInRight; @duration; @easing); .createFrames(fadeInRight, { opacity: 0; .transform(translateX(20px));}, { opacity: 1; .transform(translateX(0));} ); } .fadeOut(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeOut; @duration; @easing); .createFrames(fadeOut, { opacity : 1; }, { opacity : 0; } ); } .fadeOutDown(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeOutDown; @duration; @easing); .createFrames(fadeOutDown, { opacity : 1; .transform(translateY(0)); visibility: visible;}, { opacity : 0; .transform(translateY(20px)); visibility: hidden;} ); } .fadeOutTop(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeOutTop; @duration; @easing); .createFrames(fadeOutTop, { opacity : 1; .transform(translateY(0)); }, { opacity : 0; .transform(translateY(-20px)); } ); } .fadeOutLeft(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeOutLeft; @duration; @easing); .createFrames(fadeOutLeft, { opacity : 1; .transform(translateX(0));}, { opacity : 0; .transform(translateX(-20px));} ); } .fadeOutRight(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(fadeOutRight; @duration; @easing); .createFrames(fadeOutRight, { opacity : 1; .transform(translateX(0));}, { opacity : 0; .transform(translateX(20px));} ); } /*************************** Fun Animations ****************************/ .spin(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(spin, @duration, @easing); .spinKeyFrames() { from { .transform(rotate(0deg)); } to { .transform(rotate(360deg)); } } @-webkit-keyframes spin {.spinKeyFrames();} @-moz-keyframes spin {.spinKeyFrames();} @-ms-keyframes spin {.spinKeyFrames();} @-o-keyframes spin {.spinKeyFrames();} @keyframes spin {.spinKeyFrames();} } .bounce(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(bounce, @duration, @easing); .bounceKeyFrames() { 0%, 20%, 50%, 80%, 100% { .transform(translateY(0));} 40% { .transform(translateY(-30px));} 60% { .transform(translateY(-15px));} } @-webkit-keyframes bounce {.bounceKeyFrames();} @-moz-keyframes bounce {.bounceKeyFrames();} @-ms-keyframes bounce {.bounceKeyFrames();} @-o-keyframes bounce {.bounceKeyFrames();} @keyframes bounce {.bounceKeyFrames();} } .pulse(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(pulse, @duration, @easing); .pulseKeyFrames() { 0% { .transform(scale(1));} 50% { .transform(scale(1.4));} 100% { .transform(scale(1));} } @-webkit-keyframes pulse {.pulseKeyFrames();} @-moz-keyframes pulse {.pulseKeyFrames();} @-ms-keyframes pulse {.pulseKeyFrames();} @-o-keyframes pulse {.pulseKeyFrames();} @keyframes pulse {.pulseKeyFrames();} } .rubberBand(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(rubberBand, @duration, @easing); .rubberBandKeyFrames() { 0% {.transform(scale(1));} 30% {.transform(scaleX(1.25) scaleY(0.75));} 40% {.transform(scaleX(0.75) scaleY(1.25));} 60% {.transform(scaleX(1.15) scaleY(0.85));} 100% {.transform(scale(1));} } @-webkit-keyframes rubberBand {.rubberBandKeyFrames();} @-moz-keyframes rubberBand {.rubberBandKeyFrames();} @-ms-keyframes rubberBand {.rubberBandKeyFrames();} @-o-keyframes rubberBand {.rubberBandKeyFrames();} @keyframes rubberBand {.rubberBandKeyFrames();} } .shake(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(shake, @duration, @easing); .shakeKeyFrames() { 0%, 100% {.transform( translateX(0));} 10%, 30%, 50%, 70%, 90% {.transform( translateX(-10px));} 20%, 40%, 60%, 80% {.transform( translateX(10px));} } @-webkit-keyframes shake {.shakeKeyFrames();} @-moz-keyframes shake {.shakeKeyFrames();} @-ms-keyframes shake {.shakeKeyFrames();} @-o-keyframes shake {.shakeKeyFrames();} @keyframes shake {.shakeKeyFrames();} } .swing(@duration : @defaultDuration, @easing : @defaultEasing) { -webkit-transform-origin : top center; -ms-transform-origin : top center; transform-origin : top center; .createAnimation(swing, @duration, @easing); .swingKeyFrames() { 20% {.transform(rotate(15deg));} 40% {.transform(rotate(-10deg));} 60% {.transform(rotate(5deg));} 80% {.transform(rotate(-5deg));} 100% {.transform(rotate(0deg));} } @-webkit-keyframes swing {.swingKeyFrames();} @-moz-keyframes swing {.swingKeyFrames();} @-ms-keyframes swing {.swingKeyFrames();} @-o-keyframes swing {.swingKeyFrames();} @keyframes swing {.swingKeyFrames();} } .twist(@duration : @defaultDuration, @easing : @defaultEasing) { -webkit-transform-origin : center center; -ms-transform-origin : center center; transform-origin : center center; .createAnimation(swing, @duration, @easing); .swingKeyFrames() { 20% {.transform(rotate(15deg));} 40% {.transform(rotate(-10deg));} 60% {.transform(rotate(5deg));} 80% {.transform(rotate(-5deg));} 100% {.transform(rotate(0deg));} } @-webkit-keyframes swing {.swingKeyFrames();} @-moz-keyframes swing {.swingKeyFrames();} @-ms-keyframes swing {.swingKeyFrames();} @-o-keyframes swing {.swingKeyFrames();} @keyframes swing {.swingKeyFrames();} } .wobble(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(wobble, @duration, @easing); .wobbleKeyFrames() { 0% {.transform(translateX(0%));} 15% {.transform(translateX(-25%) rotate(-5deg));} 30% {.transform(translateX(20%) rotate(3deg));} 45% {.transform(translateX(-15%) rotate(-3deg));} 60% {.transform(translateX(10%) rotate(2deg));} 75% {.transform(translateX(-5%) rotate(-1deg));} 100% {.transform(translateX(0%));} } @-webkit-keyframes wobble {.wobbleKeyFrames();} @-moz-keyframes wobble {.wobbleKeyFrames();} @-ms-keyframes wobble {.wobbleKeyFrames();} @-o-keyframes wobble {.wobbleKeyFrames();} @keyframes wobble {.wobbleKeyFrames();} } .popIn(@duration : @defaultDuration, @easing : @defaultEasing) { .createAnimation(popIn, @duration, @easing); .popInKeyFrames() { 0% { .transform(scale(0));} 70% { .transform(scale(1.4));} 100% { .transform(scale(1));} } @-webkit-keyframes popIn {.popInKeyFrames();} @-moz-keyframes popIn {.popInKeyFrames();} @-ms-keyframes popIn {.popInKeyFrames();} @-o-keyframes popIn {.popInKeyFrames();} @keyframes popIn {.popInKeyFrames();} }