code:
@import '_vars.css';
@import '_base.css';

/* Attention seekers  */
@import 'attention_seekers/bounce.css';
@import 'attention_seekers/flash.css';
@import 'attention_seekers/pulse.css';
@import 'attention_seekers/rubberBand.css';
@import 'attention_seekers/shakeX.css';
@import 'attention_seekers/shakeY.css';
@import 'attention_seekers/headShake.css';
@import 'attention_seekers/swing.css';
@import 'attention_seekers/tada.css';
@import 'attention_seekers/wobble.css';
@import 'attention_seekers/jello.css';
@import 'attention_seekers/heartBeat.css';

/* Back entrances */
@import 'back_entrances/backInDown.css';
@import 'back_entrances/backInLeft.css';
@import 'back_entrances/backInRight.css';
@import 'back_entrances/backInUp.css';

/* Back exits */
@import 'back_exits/backOutDown.css';
@import 'back_exits/backOutLeft.css';
@import 'back_exits/backOutRight.css';
@import 'back_exits/backOutUp.css';

/* Bouncing entrances  */
@import 'bouncing_entrances/bounceIn.css';
@import 'bouncing_entrances/bounceInDown.css';
@import 'bouncing_entrances/bounceInLeft.css';
@import 'bouncing_entrances/bounceInRight.css';
@import 'bouncing_entrances/bounceInUp.css';

/* Bouncing exits  */
@import 'bouncing_exits/bounceOut.css';
@import 'bouncing_exits/bounceOutDown.css';
@import 'bouncing_exits/bounceOutLeft.css';
@import 'bouncing_exits/bounceOutRight.css';
@import 'bouncing_exits/bounceOutUp.css';

/* Fading entrances  */
@import 'fading_entrances/fadeIn.css';
@import 'fading_entrances/fadeInDown.css';
@import 'fading_entrances/fadeInDownBig.css';
@import 'fading_entrances/fadeInLeft.css';
@import 'fading_entrances/fadeInLeftBig.css';
@import 'fading_entrances/fadeInRight.css';
@import 'fading_entrances/fadeInRightBig.css';
@import 'fading_entrances/fadeInUp.css';
@import 'fading_entrances/fadeInUpBig.css';
@import 'fading_entrances/fadeInTopLeft.css';
@import 'fading_entrances/fadeInTopRight.css';
@import 'fading_entrances/fadeInBottomLeft.css';
@import 'fading_entrances/fadeInBottomRight.css';

/* Fading exits */
@import 'fading_exits/fadeOut.css';
@import 'fading_exits/fadeOutDown.css';
@import 'fading_exits/fadeOutDownBig.css';
@import 'fading_exits/fadeOutLeft.css';
@import 'fading_exits/fadeOutLeftBig.css';
@import 'fading_exits/fadeOutRight.css';
@import 'fading_exits/fadeOutRightBig.css';
@import 'fading_exits/fadeOutUp.css';
@import 'fading_exits/fadeOutUpBig.css';
@import 'fading_exits/fadeOutTopLeft.css';
@import 'fading_exits/fadeOutTopRight.css';
@import 'fading_exits/fadeOutBottomRight.css';
@import 'fading_exits/fadeOutBottomLeft.css';

/* Flippers */
@import 'flippers/flip.css';
@import 'flippers/flipInX.css';
@import 'flippers/flipInY.css';
@import 'flippers/flipOutX.css';
@import 'flippers/flipOutY.css';

/* Lightspeed */
@import 'lightspeed/lightSpeedInRight.css';
@import 'lightspeed/lightSpeedInLeft.css';
@import 'lightspeed/lightSpeedOutRight.css';
@import 'lightspeed/lightSpeedOutLeft.css';

/* Rotating entrances */
@import 'rotating_entrances/rotateIn.css';
@import 'rotating_entrances/rotateInDownLeft.css';
@import 'rotating_entrances/rotateInDownRight.css';
@import 'rotating_entrances/rotateInUpLeft.css';
@import 'rotating_entrances/rotateInUpRight.css';

/* Rotating exits */
@import 'rotating_exits/rotateOut.css';
@import 'rotating_exits/rotateOutDownLeft.css';
@import 'rotating_exits/rotateOutDownRight.css';
@import 'rotating_exits/rotateOutUpLeft.css';
@import 'rotating_exits/rotateOutUpRight.css';

/* Specials */
@import 'specials/hinge.css';
@import 'specials/jackInTheBox.css';
@import 'specials/rollIn.css';
@import 'specials/rollOut.css';

/* Zooming entrances */
@import 'zooming_entrances/zoomIn.css';
@import 'zooming_entrances/zoomInDown.css';
@import 'zooming_entrances/zoomInLeft.css';
@import 'zooming_entrances/zoomInRight.css';
@import 'zooming_entrances/zoomInUp.css';

/* Zooming exits */
@import 'zooming_exits/zoomOut.css';
@import 'zooming_exits/zoomOutDown.css';
@import 'zooming_exits/zoomOutLeft.css';
@import 'zooming_exits/zoomOutRight.css';
@import 'zooming_exits/zoomOutUp.css';

/* Sliding entrances */
@import 'sliding_entrances/slideInDown.css';
@import 'sliding_entrances/slideInLeft.css';
@import 'sliding_entrances/slideInRight.css';
@import 'sliding_entrances/slideInUp.css';

/* Sliding exits */
@import 'sliding_exits/slideOutDown.css';
@import 'sliding_exits/slideOutLeft.css';
@import 'sliding_exits/slideOutRight.css';
@import 'sliding_exits/slideOutUp.css';


code:
@keyframes bounce {
  from,
  20%,
  53%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    transform: translate3d(0, 0, 0);
  }

  40%,
  43% {
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    transform: translate3d(0, -30px, 0) scaleY(1.1);
  }

  70% {
    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
    transform: translate3d(0, -15px, 0) scaleY(1.05);
  }

  80% {
    transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
    transform: translate3d(0, 0, 0) scaleY(0.95);
  }

  90% {
    transform: translate3d(0, -4px, 0) scaleY(1.02);
  }
}

.bounce {
  animation-name: bounce;
  transform-origin: center bottom;
}

license: mit


code:
@keyframes flash {
  from,
  50%,
  to {
    opacity: 1;
  }

  25%,
  75% {
    opacity: 0;
  }
}

.flash {
  animation-name: flash;
}


code:
@keyframes headShake {
  0% {
    transform: translateX(0);
  }

  6.5% {
    transform: translateX(-6px) rotateY(-9deg);
  }

  18.5% {
    transform: translateX(5px) rotateY(7deg);
  }

  31.5% {
    transform: translateX(-3px) rotateY(-5deg);
  }

  43.5% {
    transform: translateX(2px) rotateY(3deg);
  }

  50% {
    transform: translateX(0);
  }
}

.headShake {
  animation-timing-function: ease-in-out;
  animation-name: headShake;
}


code:
@keyframes heartBeat {
  0% {
    transform: scale(1);
  }

  14% {
    transform: scale(1.3);
  }

  28% {
    transform: scale(1);
  }

  42% {
    transform: scale(1.3);
  }

  70% {
    transform: scale(1);
  }
}

.heartBeat {
  animation-name: heartBeat;
  animation-duration: calc(var(--animate-duration) * 1.3);
  animation-timing-function: ease-in-out;
}


code:
@keyframes jello {
  from,
  11.1%,
  to {
    transform: translate3d(0, 0, 0);
  }

  22.2% {
    transform: skewX(-12.5deg) skewY(-12.5deg);
  }

  33.3% {
    transform: skewX(6.25deg) skewY(6.25deg);
  }

  44.4% {
    transform: skewX(-3.125deg) skewY(-3.125deg);
  }

  55.5% {
    transform: skewX(1.5625deg) skewY(1.5625deg);
  }

  66.6% {
    transform: skewX(-0.78125deg) skewY(-0.78125deg);
  }

  77.7% {
    transform: skewX(0.390625deg) skewY(0.390625deg);
  }

  88.8% {
    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
  }
}

.jello {
  animation-name: jello;
  transform-origin: center;
}


code:
/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */

@keyframes pulse {
  from {
    transform: scale3d(1, 1, 1);
  }

  50% {
    transform: scale3d(1.05, 1.05, 1.05);
  }

  to {
    transform: scale3d(1, 1, 1);
  }
}

.pulse {
  animation-name: pulse;
  animation-timing-function: ease-in-out;
}


code:
@keyframes rubberBand {
  from {
    transform: scale3d(1, 1, 1);
  }

  30% {
    transform: scale3d(1.25, 0.75, 1);
  }

  40% {
    transform: scale3d(0.75, 1.25, 1);
  }

  50% {
    transform: scale3d(1.15, 0.85, 1);
  }

  65% {
    transform: scale3d(0.95, 1.05, 1);
  }

  75% {
    transform: scale3d(1.05, 0.95, 1);
  }

  to {
    transform: scale3d(1, 1, 1);
  }
}

.rubberBand {
  animation-name: rubberBand;
}


code:
@keyframes shake {
  from,
  to {
    transform: translate3d(0, 0, 0);
  }

  10%,
  30%,
  50%,
  70%,
  90% {
    transform: translate3d(-10px, 0, 0);
  }

  20%,
  40%,
  60%,
  80% {
    transform: translate3d(10px, 0, 0);
  }
}

.shake {
  animation-name: shake;
}


code:
@keyframes shakeX {
  from,
  to {
    transform: translate3d(0, 0, 0);
  }

  10%,
  30%,
  50%,
  70%,
  90% {
    transform: translate3d(-10px, 0, 0);
  }

  20%,
  40%,
  60%,
  80% {
    transform: translate3d(10px, 0, 0);
  }
}

.shakeX {
  animation-name: shakeX;
}


code:
@keyframes shakeY {
  from,
  to {
    transform: translate3d(0, 0, 0);
  }

  10%,
  30%,
  50%,
  70%,
  90% {
    transform: translate3d(0, -10px, 0);
  }

  20%,
  40%,
  60%,
  80% {
    transform: translate3d(0, 10px, 0);
  }
}

.shakeY {
  animation-name: shakeY;
}


code:
@keyframes swing {
  20% {
    transform: rotate3d(0, 0, 1, 15deg);
  }

  40% {
    transform: rotate3d(0, 0, 1, -10deg);
  }

  60% {
    transform: rotate3d(0, 0, 1, 5deg);
  }

  80% {
    transform: rotate3d(0, 0, 1, -5deg);
  }

  to {
    transform: rotate3d(0, 0, 1, 0deg);
  }
}

.swing {
  transform-origin: top center;
  animation-name: swing;
}


code:
/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */

@keyframes wobble {
  from {
    transform: translate3d(0, 0, 0);
  }

  15% {
    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
  }

  30% {
    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
  }

  45% {
    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
  }

  60% {
    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
  }

  75% {
    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.wobble {
  animation-name: wobble;
}


code:
@keyframes backInDown {
  0% {
    transform: translateY(-1200px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    transform: scale(1);
    opacity: 1;
  }
}

.backInDown {
  animation-name: backInDown;
}


code:
@keyframes backInLeft {
  0% {
    transform: translateX(-2000px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    transform: scale(1);
    opacity: 1;
  }
}

.backInLeft {
  animation-name: backInLeft;
}


code:
@keyframes backInRight {
  0% {
    transform: translateX(2000px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    transform: scale(1);
    opacity: 1;
  }
}

.backInRight {
  animation-name: backInRight;
}


code:
@keyframes backInUp {
  0% {
    transform: translateY(1200px) scale(0.7);
    opacity: 0.7;
  }

  80% {
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    transform: scale(1);
    opacity: 1;
  }
}

.backInUp {
  animation-name: backInUp;
}


code:
@keyframes backOutDown {
  0% {
    transform: scale(1);
    opacity: 1;
  }

  20% {
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    transform: translateY(700px) scale(0.7);
    opacity: 0.7;
  }
}

.backOutDown {
  animation-name: backOutDown;
}


code:
@keyframes backOutLeft {
  0% {
    transform: scale(1);
    opacity: 1;
  }

  20% {
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    transform: translateX(-2000px) scale(0.7);
    opacity: 0.7;
  }
}

.backOutLeft {
  animation-name: backOutLeft;
}


code:
@keyframes backOutRight {
  0% {
    transform: scale(1);
    opacity: 1;
  }

  20% {
    transform: translateX(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    transform: translateX(2000px) scale(0.7);
    opacity: 0.7;
  }
}

.backOutRight {
  animation-name: backOutRight;
}


code:
@keyframes backOutUp {
  0% {
    transform: scale(1);
    opacity: 1;
  }

  20% {
    transform: translateY(0px) scale(0.7);
    opacity: 0.7;
  }

  100% {
    transform: translateY(-700px) scale(0.7);
    opacity: 0.7;
  }
}

.backOutUp {
  animation-name: backOutUp;
}


code:
@keyframes bounceIn {
  from,
  20%,
  40%,
  60%,
  80%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    transform: scale3d(0.3, 0.3, 0.3);
  }

  20% {
    transform: scale3d(1.1, 1.1, 1.1);
  }

  40% {
    transform: scale3d(0.9, 0.9, 0.9);
  }

  60% {
    opacity: 1;
    transform: scale3d(1.03, 1.03, 1.03);
  }

  80% {
    transform: scale3d(0.97, 0.97, 0.97);
  }

  to {
    opacity: 1;
    transform: scale3d(1, 1, 1);
  }
}

.bounceIn {
  animation-duration: calc(var(--animate-duration) * 0.75);
  animation-name: bounceIn;
}


code:
@keyframes bounceInDown {
  from,
  60%,
  75%,
  90%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    transform: translate3d(0, -3000px, 0) scaleY(3);
  }

  60% {
    opacity: 1;
    transform: translate3d(0, 25px, 0) scaleY(0.9);
  }

  75% {
    transform: translate3d(0, -10px, 0) scaleY(0.95);
  }

  90% {
    transform: translate3d(0, 5px, 0) scaleY(0.985);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.bounceInDown {
  animation-name: bounceInDown;
}


code:
@keyframes bounceInLeft {
  from,
  60%,
  75%,
  90%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  0% {
    opacity: 0;
    transform: translate3d(-3000px, 0, 0) scaleX(3);
  }

  60% {
    opacity: 1;
    transform: translate3d(25px, 0, 0) scaleX(1);
  }

  75% {
    transform: translate3d(-10px, 0, 0) scaleX(0.98);
  }

  90% {
    transform: translate3d(5px, 0, 0) scaleX(0.995);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.bounceInLeft {
  animation-name: bounceInLeft;
}


code:
@keyframes bounceInRight {
  from,
  60%,
  75%,
  90%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  from {
    opacity: 0;
    transform: translate3d(3000px, 0, 0) scaleX(3);
  }

  60% {
    opacity: 1;
    transform: translate3d(-25px, 0, 0) scaleX(1);
  }

  75% {
    transform: translate3d(10px, 0, 0) scaleX(0.98);
  }

  90% {
    transform: translate3d(-5px, 0, 0) scaleX(0.995);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.bounceInRight {
  animation-name: bounceInRight;
}


code:
@keyframes bounceInUp {
  from,
  60%,
  75%,
  90%,
  to {
    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
  }

  from {
    opacity: 0;
    transform: translate3d(0, 3000px, 0) scaleY(5);
  }

  60% {
    opacity: 1;
    transform: translate3d(0, -20px, 0) scaleY(0.9);
  }

  75% {
    transform: translate3d(0, 10px, 0) scaleY(0.95);
  }

  90% {
    transform: translate3d(0, -5px, 0) scaleY(0.985);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.bounceInUp {
  animation-name: bounceInUp;
}


code:
@keyframes bounceOut {
  20% {
    transform: scale3d(0.9, 0.9, 0.9);
  }

  50%,
  55% {
    opacity: 1;
    transform: scale3d(1.1, 1.1, 1.1);
  }

  to {
    opacity: 0;
    transform: scale3d(0.3, 0.3, 0.3);
  }
}

.bounceOut {
  animation-duration: calc(var(--animate-duration) * 0.75);
  animation-name: bounceOut;
}


code:
@keyframes bounceOutDown {
  20% {
    transform: translate3d(0, 10px, 0) scaleY(0.985);
  }

  40%,
  45% {
    opacity: 1;
    transform: translate3d(0, -20px, 0) scaleY(0.9);
  }

  to {
    opacity: 0;
    transform: translate3d(0, 2000px, 0) scaleY(3);
  }
}

.bounceOutDown {
  animation-name: bounceOutDown;
}


code:
@keyframes bounceOutLeft {
  20% {
    opacity: 1;
    transform: translate3d(20px, 0, 0) scaleX(0.9);
  }

  to {
    opacity: 0;
    transform: translate3d(-2000px, 0, 0) scaleX(2);
  }
}

.bounceOutLeft {
  animation-name: bounceOutLeft;
}


code:
@keyframes bounceOutRight {
  20% {
    opacity: 1;
    transform: translate3d(-20px, 0, 0) scaleX(0.9);
  }

  to {
    opacity: 0;
    transform: translate3d(2000px, 0, 0) scaleX(2);
  }
}

.bounceOutRight {
  animation-name: bounceOutRight;
}


code:
@keyframes bounceOutUp {
  20% {
    transform: translate3d(0, -10px, 0) scaleY(0.985);
  }

  40%,
  45% {
    opacity: 1;
    transform: translate3d(0, 20px, 0) scaleY(0.9);
  }

  to {
    opacity: 0;
    transform: translate3d(0, -2000px, 0) scaleY(3);
  }
}

.bounceOutUp {
  animation-name: bounceOutUp;
}


code:
@keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

.fadeIn {
  animation-name: fadeIn;
}


code:
@keyframes fadeInBottomLeft {
  from {
    opacity: 0;
    transform: translate3d(-100%, 100%, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInBottomLeft {
  animation-name: fadeInBottomLeft;
}


code:
@keyframes fadeInBottomRight {
  from {
    opacity: 0;
    transform: translate3d(100%, 100%, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInBottomRight {
  animation-name: fadeInBottomRight;
}


code:
@keyframes fadeInDown {
  from {
    opacity: 0;
    transform: translate3d(0, -100%, 0);
  }

  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInDown {
  animation-name: fadeInDown;
}


code:
@keyframes fadeInDownBig {
  from {
    opacity: 0;
    transform: translate3d(0, -2000px, 0);
  }

  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInDownBig {
  animation-name: fadeInDownBig;
}


code:
@keyframes fadeInLeft {
  from {
    opacity: 0;
    transform: translate3d(-100%, 0, 0);
  }

  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInLeft {
  animation-name: fadeInLeft;
}


code:
@keyframes fadeInLeftBig {
  from {
    opacity: 0;
    transform: translate3d(-2000px, 0, 0);
  }

  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInLeftBig {
  animation-name: fadeInLeftBig;
}


code:
@keyframes fadeInRight {
  from {
    opacity: 0;
    transform: translate3d(100%, 0, 0);
  }

  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInRight {
  animation-name: fadeInRight;
}


code:
@keyframes fadeInRightBig {
  from {
    opacity: 0;
    transform: translate3d(2000px, 0, 0);
  }

  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInRightBig {
  animation-name: fadeInRightBig;
}


code:
@keyframes fadeInTopLeft {
  from {
    opacity: 0;
    transform: translate3d(-100%, -100%, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInTopLeft {
  animation-name: fadeInTopLeft;
}


code:
@keyframes fadeInTopRight {
  from {
    opacity: 0;
    transform: translate3d(100%, -100%, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInTopRight {
  animation-name: fadeInTopRight;
}


code:
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translate3d(0, 100%, 0);
  }

  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInUp {
  animation-name: fadeInUp;
}


code:
@keyframes fadeInUpBig {
  from {
    opacity: 0;
    transform: translate3d(0, 2000px, 0);
  }

  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.fadeInUpBig {
  animation-name: fadeInUpBig;
}


code:
@keyframes fadeOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

.fadeOut {
  animation-name: fadeOut;
}


code:
@keyframes fadeOutBottomLeft {
  from {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    transform: translate3d(-100%, 100%, 0);
  }
}

.fadeOutBottomLeft {
  animation-name: fadeOutBottomLeft;
}


code:
@keyframes fadeOutBottomRight {
  from {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    transform: translate3d(100%, 100%, 0);
  }
}

.fadeOutBottomRight {
  animation-name: fadeOutBottomRight;
}


code:
@keyframes fadeOutDown {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    transform: translate3d(0, 100%, 0);
  }
}

.fadeOutDown {
  animation-name: fadeOutDown;
}


code:
@keyframes fadeOutDownBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    transform: translate3d(0, 2000px, 0);
  }
}

.fadeOutDownBig {
  animation-name: fadeOutDownBig;
}


code:
@keyframes fadeOutLeft {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    transform: translate3d(-100%, 0, 0);
  }
}

.fadeOutLeft {
  animation-name: fadeOutLeft;
}


code:
@keyframes fadeOutLeftBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    transform: translate3d(-2000px, 0, 0);
  }
}

.fadeOutLeftBig {
  animation-name: fadeOutLeftBig;
}


code:
@keyframes fadeOutRight {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    transform: translate3d(100%, 0, 0);
  }
}

.fadeOutRight {
  animation-name: fadeOutRight;
}


code:
@keyframes fadeOutRightBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    transform: translate3d(2000px, 0, 0);
  }
}

.fadeOutRightBig {
  animation-name: fadeOutRightBig;
}


code:
@keyframes fadeOutTopLeft {
  from {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    transform: translate3d(-100%, -100%, 0);
  }
}

.fadeOutTopLeft {
  animation-name: fadeOutTopLeft;
}


code:
@keyframes fadeOutTopRight {
  from {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
  to {
    opacity: 0;
    transform: translate3d(100%, -100%, 0);
  }
}

.fadeOutTopRight {
  animation-name: fadeOutTopRight;
}


code:
@keyframes fadeOutUp {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    transform: translate3d(0, -100%, 0);
  }
}

.fadeOutUp {
  animation-name: fadeOutUp;
}


code:
@keyframes fadeOutUpBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    transform: translate3d(0, -2000px, 0);
  }
}

.fadeOutUpBig {
  animation-name: fadeOutUpBig;
}


code:
@keyframes flip {
  from {
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
    animation-timing-function: ease-out;
  }

  40% {
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -190deg);
    animation-timing-function: ease-out;
  }

  50% {
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
      rotate3d(0, 1, 0, -170deg);
    animation-timing-function: ease-in;
  }

  80% {
    transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
      rotate3d(0, 1, 0, 0deg);
    animation-timing-function: ease-in;
  }

  to {
    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
    animation-timing-function: ease-in;
  }
}

.animated.flip {
  backface-visibility: visible;
  animation-name: flip;
}


code:
@keyframes flipInX {
  from {
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    animation-timing-function: ease-in;
  }

  60% {
    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    opacity: 1;
  }

  80% {
    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
  }

  to {
    transform: perspective(400px);
  }
}

.flipInX {
  backface-visibility: visible !important;
  animation-name: flipInX;
}


code:
@keyframes flipInY {
  from {
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
    animation-timing-function: ease-in;
  }

  60% {
    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
    opacity: 1;
  }

  80% {
    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
  }

  to {
    transform: perspective(400px);
  }
}

.flipInY {
  backface-visibility: visible !important;
  animation-name: flipInY;
}


code:
@keyframes flipOutX {
  from {
    transform: perspective(400px);
  }

  30% {
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    opacity: 1;
  }

  to {
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    opacity: 0;
  }
}

.flipOutX {
  animation-duration: calc(var(--animate-duration) * 0.75);
  animation-name: flipOutX;
  backface-visibility: visible !important;
}


code:
@keyframes flipOutY {
  from {
    transform: perspective(400px);
  }

  30% {
    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
    opacity: 1;
  }

  to {
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    opacity: 0;
  }
}

.flipOutY {
  animation-duration: calc(var(--animate-duration) * 0.75);
  backface-visibility: visible !important;
  animation-name: flipOutY;
}


code:
@keyframes lightSpeedInLeft {
  from {
    transform: translate3d(-100%, 0, 0) skewX(30deg);
    opacity: 0;
  }

  60% {
    transform: skewX(-20deg);
    opacity: 1;
  }

  80% {
    transform: skewX(5deg);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.lightSpeedInLeft {
  animation-name: lightSpeedInLeft;
  animation-timing-function: ease-out;
}


code:
@keyframes lightSpeedInRight {
  from {
    transform: translate3d(100%, 0, 0) skewX(-30deg);
    opacity: 0;
  }

  60% {
    transform: skewX(20deg);
    opacity: 1;
  }

  80% {
    transform: skewX(-5deg);
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.lightSpeedInRight {
  animation-name: lightSpeedInRight;
  animation-timing-function: ease-out;
}


code:
@keyframes lightSpeedOutLeft {
  from {
    opacity: 1;
  }

  to {
    transform: translate3d(-100%, 0, 0) skewX(-30deg);
    opacity: 0;
  }
}

.lightSpeedOutLeft {
  animation-name: lightSpeedOutLeft;
  animation-timing-function: ease-in;
}


code:
@keyframes lightSpeedOutRight {
  from {
    opacity: 1;
  }

  to {
    transform: translate3d(100%, 0, 0) skewX(30deg);
    opacity: 0;
  }
}

.lightSpeedOutRight {
  animation-name: lightSpeedOutRight;
  animation-timing-function: ease-in;
}


code:
@keyframes rotateIn {
  from {
    transform: rotate3d(0, 0, 1, -200deg);
    opacity: 0;
  }

  to {
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}

.rotateIn {
  animation-name: rotateIn;
  transform-origin: center;
}


code:
@keyframes rotateInDownLeft {
  from {
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }

  to {
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}

.rotateInDownLeft {
  animation-name: rotateInDownLeft;
  transform-origin: left bottom;
}


code:
@keyframes rotateInDownRight {
  from {
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}

.rotateInDownRight {
  animation-name: rotateInDownRight;
  transform-origin: right bottom;
}


code:
@keyframes rotateInUpLeft {
  from {
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}

.rotateInUpLeft {
  animation-name: rotateInUpLeft;
  transform-origin: left bottom;
}


code:
@keyframes rotateInUpRight {
  from {
    transform: rotate3d(0, 0, 1, -90deg);
    opacity: 0;
  }

  to {
    transform: translate3d(0, 0, 0);
    opacity: 1;
  }
}

.rotateInUpRight {
  animation-name: rotateInUpRight;
  transform-origin: right bottom;
}


code:
@keyframes rotateOut {
  from {
    opacity: 1;
  }

  to {
    transform: rotate3d(0, 0, 1, 200deg);
    opacity: 0;
  }
}

.rotateOut {
  animation-name: rotateOut;
  transform-origin: center;
}


code:
@keyframes rotateOutDownLeft {
  from {
    opacity: 1;
  }

  to {
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }
}

.rotateOutDownLeft {
  animation-name: rotateOutDownLeft;
  transform-origin: left bottom;
}


code:
@keyframes rotateOutDownRight {
  from {
    opacity: 1;
  }

  to {
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}

.rotateOutDownRight {
  animation-name: rotateOutDownRight;
  transform-origin: right bottom;
}


code:
@keyframes rotateOutUpLeft {
  from {
    opacity: 1;
  }

  to {
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}

.rotateOutUpLeft {
  animation-name: rotateOutUpLeft;
  transform-origin: left bottom;
}


code:
@keyframes rotateOutUpRight {
  from {
    opacity: 1;
  }

  to {
    transform: rotate3d(0, 0, 1, 90deg);
    opacity: 0;
  }
}

.rotateOutUpRight {
  animation-name: rotateOutUpRight;
  transform-origin: right bottom;
}


code:
@keyframes slideInDown {
  from {
    transform: translate3d(0, -100%, 0);
    visibility: visible;
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.slideInDown {
  animation-name: slideInDown;
}


code:
@keyframes slideInLeft {
  from {
    transform: translate3d(-100%, 0, 0);
    visibility: visible;
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.slideInLeft {
  animation-name: slideInLeft;
}


code:
@keyframes slideInRight {
  from {
    transform: translate3d(100%, 0, 0);
    visibility: visible;
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.slideInRight {
  animation-name: slideInRight;
}


code:
@keyframes slideInUp {
  from {
    transform: translate3d(0, 100%, 0);
    visibility: visible;
  }

  to {
    transform: translate3d(0, 0, 0);
  }
}

.slideInUp {
  animation-name: slideInUp;
}


code:
@keyframes slideOutDown {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    transform: translate3d(0, 100%, 0);
  }
}

.slideOutDown {
  animation-name: slideOutDown;
}


code:
@keyframes slideOutLeft {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    transform: translate3d(-100%, 0, 0);
  }
}

.slideOutLeft {
  animation-name: slideOutLeft;
}


code:
@keyframes slideOutRight {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    transform: translate3d(100%, 0, 0);
  }
}

.slideOutRight {
  animation-name: slideOutRight;
}


code:
@keyframes slideOutUp {
  from {
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    transform: translate3d(0, -100%, 0);
  }
}

.slideOutUp {
  animation-name: slideOutUp;
}


code:
@keyframes hinge {
  0% {
    animation-timing-function: ease-in-out;
  }

  20%,
  60% {
    transform: rotate3d(0, 0, 1, 80deg);
    animation-timing-function: ease-in-out;
  }

  40%,
  80% {
    transform: rotate3d(0, 0, 1, 60deg);
    animation-timing-function: ease-in-out;
    opacity: 1;
  }

  to {
    transform: translate3d(0, 700px, 0);
    opacity: 0;
  }
}

.hinge {
  animation-duration: calc(var(--animate-duration) * 2);
  animation-name: hinge;
  transform-origin: top left;
}


code:
@keyframes jackInTheBox {
  from {
    opacity: 0;
    transform: scale(0.1) rotate(30deg);
    transform-origin: center bottom;
  }

  50% {
    transform: rotate(-10deg);
  }

  70% {
    transform: rotate(3deg);
  }

  to {
    opacity: 1;
    transform: scale(1);
  }
}

.jackInTheBox {
  animation-name: jackInTheBox;
}


code:
/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */

@keyframes rollIn {
  from {
    opacity: 0;
    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
  }

  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}

.rollIn {
  animation-name: rollIn;
}


code:
/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */

@keyframes rollOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
  }
}

.rollOut {
  animation-name: rollOut;
}


code:
@keyframes zoomIn {
  from {
    opacity: 0;
    transform: scale3d(0.3, 0.3, 0.3);
  }

  50% {
    opacity: 1;
  }
}

.zoomIn {
  animation-name: zoomIn;
}


code:
@keyframes zoomInDown {
  from {
    opacity: 0;
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}

.zoomInDown {
  animation-name: zoomInDown;
}


code:
@keyframes zoomInLeft {
  from {
    opacity: 0;
    transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}

.zoomInLeft {
  animation-name: zoomInLeft;
}


code:
@keyframes zoomInRight {
  from {
    opacity: 0;
    transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}

.zoomInRight {
  animation-name: zoomInRight;
}


code:
@keyframes zoomInUp {
  from {
    opacity: 0;
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  60% {
    opacity: 1;
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}

.zoomInUp {
  animation-name: zoomInUp;
}


code:
@keyframes zoomOut {
  from {
    opacity: 1;
  }

  50% {
    opacity: 0;
    transform: scale3d(0.3, 0.3, 0.3);
  }

  to {
    opacity: 0;
  }
}

.zoomOut {
  animation-name: zoomOut;
}


code:
@keyframes zoomOutDown {
  40% {
    opacity: 1;
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  to {
    opacity: 0;
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}

.zoomOutDown {
  animation-name: zoomOutDown;
  transform-origin: center bottom;
}


code:
@keyframes zoomOutLeft {
  40% {
    opacity: 1;
    transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
  }

  to {
    opacity: 0;
    transform: scale(0.1) translate3d(-2000px, 0, 0);
  }
}

.zoomOutLeft {
  animation-name: zoomOutLeft;
  transform-origin: left center;
}


code:
@keyframes zoomOutRight {
  40% {
    opacity: 1;
    transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
  }

  to {
    opacity: 0;
    transform: scale(0.1) translate3d(2000px, 0, 0);
  }
}

.zoomOutRight {
  animation-name: zoomOutRight;
  transform-origin: right center;
}


code:
@keyframes zoomOutUp {
  40% {
    opacity: 1;
    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
  }

  to {
    opacity: 0;
    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
  }
}

.zoomOutUp {
  animation-name: zoomOutUp;
  transform-origin: center bottom;
}


code:
# CSShake [![npm version](https://badge.fury.io/js/csshake.svg)](http://badge.fury.io/js/csshake)

> Some CSS classes to move your DOM!

### [Live Demo](http://elrumordelaluz.github.io/csshake/)

### [Download Center](https://csshake.surge.sh/)

You could download the complete `csshake.css` file or separated files for each shake animation (i.e `csshake-little.css`).
Each one expanded or minified.

## Why

I had to do a 'shake-animation' for a big project. First, I did it in vanilla CSS.
After finish it I discover [this](http://jackrugile.com/jrumble/) cool jQuery plugin by [@jackrugile](https://twitter.com/jackrugile).
Then I started to think in made _[this little CSS project](http://elrumordelaluz.github.io/csshake/)_

## Install

Fork this repo

```
  $ git clone https://github.com/elrumordelaluz/csshake.git
```

or via Bower

```
  $ bower install csshake
```

or via npm

```
  $ npm i csshake
```

#### scripts

```
  $ npm run watch
  $ npm run build:raw
  $ npm run build:min
```

### CDN

Now is also available in `cdnjs` for each shake animation: https://cdnjs.com/libraries/csshake

## How to use

First include the CSS file

```html
<link rel="stylesheet" type="text/css" href="csshake.css" />`
```

Then call the different classes on the element you want to shake!

```html
<div class="shake"></div>
<div class="shake shake-hard"></div>
<div class="shake shake-slow"></div>
<div class="shake shake-little"></div>
<div class="shake shake-horizontal"></div>
<div class="shake shake-vertical"></div>
<div class="shake shake-rotate"></div>
<div class="shake shake-opacity"></div>
<div class="shake shake-crazy"></div>
```

Add also classes to control the `animation-play-state`.

```html
<!-- Freeze the animation at that point when :hover -->
<div class="shake shake-freeze"></div>
<!-- Continuous animation instead on :hover -->
<div class="shake shake-constant"></div>
<!-- and stop when :hover -->
<div class="shake shake-constant shake-constant--hover"></div>
```

## Customize

You could customize the Sass @mixins to create new shaking animations, yeah!
Editing the `do-shake` mixin in `scss/_tools.scss` file

```scss
.my-custom-shake {
  @include do-shake(
    $name: 'my-custom-shake',
    $h: 5px,
    $v: 5px,
    $r: 3deg,
    $dur: 100ms,
    $precision: 0.02,
    $opacity: false,
    $q: infinite,
    $t: ease-in-out,
    $delay: null,
    $chunk: 100%
  );
}
```

`$name` {String} is the name for the keyframes animation

`$h` {Number} is the max number for random to assign in x axis

`$v` {Number} is the max number for random to assign in y axis

`$r` {Number} is the max number for random rotation

`$dur` {Number} is the `animation-duration` time value

`$precision` {Number} is the precision of the keyframes animation. For example `.02` generates keyframes each 2% and `.1` each 10%. The calculation is `$step: 100 * $precision;`

`$opacity` {Boolean} to apply random animation also in the opacity property

`$q` {String} is the `animation-iteration-count` value

`$t` {String} `animation-timing-function` value

`$delay` {Number} `animation-delay` time value

`$chunk` {Number} is the part of the keyframes where apply the animation

### Use with Webpack 2.x

When installed with `npm`, import `csshake` inside your css|stylus|sass files with `~` prefix to trigger webpack's module resolving:

```scss
@import '~csshake';
```

This will get you non-minified plain css.

##### Import source sass files

Include full path relative to your `node_modules` folder with csshake installation

```scss
@import '~csshake/scss/csshake-hard.scss';
```

=======

### Changelog

#### [v1.5.0](https://github.com/elrumordelaluz/csshake/releases/tag/v1.5) (October 5, 2015)

- Improve the core mixin for a better output code
- Generate the entire 'shake' animation from only one [@mixin](https://github.com/elrumordelaluz/csshake/blob/master/scss/_tools.scss#L30). Easier to cerate custom shakes animations classes.
- Add a [new argument](https://github.com/elrumordelaluz/csshake/blob/master/scss/_tools.scss#L41) to allow animate only part of the 100% of keyframes. Solves [issue #25](https://github.com/elrumordelaluz/csshake/issues/25)
- Add a [class](https://github.com/elrumordelaluz/csshake/blob/master/scss/_tools.scss#L3) to allow fire animation from a parent element. Solves [issue #16](https://github.com/elrumordelaluz/csshake/issues/16)
- Update semanthics on modifiers classes
- Export separated stylesheets for each animation. Solves [issue #20](https://github.com/elrumordelaluz/csshake/issues/20)

======

Made with ♥ by [@elrumordelaluz](http://twitter.com/elrumordelaluz) using [Sass](http://sass-lang.com/).


csshake

description: Some CSS classes to move your DOM!

keywords: csshake css animations transitions shake

license: MIT


code:
@charset "UTF-8";
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
  font: inherit;
  font-size: 100%;
  vertical-align: baseline; }

html {
  line-height: 1; }

*, *:before, *:after {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box; }

body {
  background: #2ab8ac;
  overflow-x: hidden; }

.new-banner {
  position: absolute;
  left: 30px;
  top: 20px;
  z-index: 10;
  width: 250px;
  font-family: 'Dancing Script', cursive;
  font-size: 1em;
}

.new-banner:before {
  content: 'new!';
  position: absolute;
  left: -13px;
  top: -7px;
  background-color: #e96144;
  padding: .2em .5em;
  color: white;
  border-radius: 4px;
  transform: rotate(-15deg);
}

.new-banner a {
  text-decoration: none;
  color: rgba(0, 0, 0, 0.7);
  cursor: pointer;
}

.new-banner a:hover {
  color: rgba(0, 0, 0, 0.5);
}

.new-banner strong {
  font-size: 2em;
}

.section {
  color: white;
  padding: 85px 50px;
  text-align: center;
  min-height: 100vh;
  position: relative; }
  .section h1 {
    font-family: 'Dancing Script', cursive;
    font-size: 3.4em;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap; }
  .section h4 {
    font-size: 1.4em;
    font-family: 'Gentium Basic', serif;
    line-height: 1.5;
    margin-bottom: 1.5em; }
  .section > p {
    margin-top: 25px;
    line-height: 1.5em; }
  .section a {
    color: rgba(0, 0, 0, 0.5); }
    .section a:link {
      text-decoration: none; }
    .section a:hover {
      color: rgba(0, 0, 0, 0.85); }
  .section footer {
    position: absolute;
    bottom: 10px;
    width: 100%;
    left: 0;
    line-height: 1.3em; }

a[href^="#"] {
  position: relative;
  display: inline-block;
  overflow: visible;
}

a[href^="#"] h1[id] {
  padding-right: .1em;
  padding-left: .1em;
}

a[href^="#"],
a[href^="#"]:hover {
  color: inherit;
}

a[href^="#"]:hover:before {
  opacity: 1;
}

a[href^="#"]:before {
  content: '#';
  position: absolute;
  top: 0;
  right: 100%;
  font-size: 2em;
  font-family: 'Dancing Script', cursive;
  opacity: 0;
  transition: opacity .25s;
}

.home {
  width: 100%;
  position: relative;
  text-align: center; }
  .home h1,
  .home h4 {
    color: white;
    margin-top: .5em; }
  .home h1:after {
    content: attr(title);
    position: absolute;
    font-size: .25em;
    margin-left: -1em;
    color: rgba(255, 255, 255, 0.7); }

.glass {
  position: relative;
  display: inline-block;
  border-top: 169px solid white;
  border-left: 9px solid transparent;
  border-right: 9px solid transparent;
  height: 0;
  margin-top: 10em;
  width: 70px; }
  .glass:before, .glass:after {
    content: '';
    position: absolute;
    border-left: 9px solid transparent;
    border-right: 9px solid transparent;
    height: 0;
    left: -9px;
    width: 70px; }
  .glass:before {
    border-top: 169px solid rgba(0, 0, 0, 0.07);
    top: -169px;
    width: 58px; }
  .glass:after {
    border-top: 94px solid rgba(0, 0, 0, 0.05);
    transform: rotate(180deg); }

.bubble {
  position: absolute;
  width: 25px;
  height: 25px;
  background-color: #fff;
  border-radius: 50%; }
  .bubble.big {
    width: 34px;
    height: 34px; }
  .bubble.small {
    width: 16px;
    height: 16px; }
  .bubble:nth-of-type(1) {
    box-shadow: inset 0 -3px 0 rgba(64, 83, 102, 0.1); }
  .bubble:nth-of-type(2) {
    box-shadow: inset 0 -2px 0 rgba(64, 83, 102, 0.1); }
  .bubble:nth-of-type(3) {
    box-shadow: inset 0 -3px 0 rgba(64, 83, 102, 0.1); }
  .bubble:nth-of-type(4) {
    box-shadow: inset 0 0px 0 rgba(64, 83, 102, 0.1); }
  .bubble:nth-of-type(5) {
    box-shadow: inset 0 -1px 0 rgba(64, 83, 102, 0.1); }
  .bubble:nth-of-type(6) {
    box-shadow: inset 0 -2px 0 rgba(64, 83, 102, 0.1); }
  .bubble:nth-of-type(7) {
    box-shadow: inset 0 -2px 0 rgba(64, 83, 102, 0.1); }
  .bubble:nth-of-type(8) {
    box-shadow: inset 0 0px 0 rgba(64, 83, 102, 0.1); }
  .bubble:nth-of-type(9) {
    box-shadow: inset 0 0px 0 rgba(64, 83, 102, 0.1); }
  .bubble:nth-of-type(10) {
    box-shadow: inset 0 -3px 0 rgba(64, 83, 102, 0.1); }

.bubble:nth-child(1) {
  top: -180px;
  left: -12px; }

.bubble:nth-child(2) {
  top: -200px;
  left: -5px; }

.bubble:nth-child(3) {
  top: -172px;
  left: 10px; }

.bubble:nth-child(4) {
  top: -193px;
  left: 25px; }

.bubble:nth-child(5) {
  top: -184px;
  left: 20px; }

.bubble:nth-child(6) {
  top: -178px;
  left: 40px; }

.bubble:nth-child(7) {
  top: -182px;
  left: 60px; }

.bubble:nth-child(8) {
  top: -182px;
  left: 55px; }

.bubble:nth-child(9) {
  top: -205px;
  left: 25px; }

.bubble:nth-child(10) {
  top: -170px;
  left: -20px; }

.straw {
  position: absolute;
  width: 10px;
  height: 140px;
  background-color: red;
  top: -300px;
  left: 61px;
  transform: rotate(7deg);
  z-index: -1;
  background-color: #e96144;
  background-image: repeating-linear-gradient(45deg, transparent, transparent 16px, rgba(255, 255, 255, 0.9) 16px, rgba(255, 255, 255, 0.9) 32px);
  box-shadow: inset -5px 0 0 rgba(0, 0, 0, 0.1); }

.arrow {
  position: absolute;
  bottom: 2.5em;
  left: 50%;
  margin-left: -10px;
  width: 0;
  height: 0;
  border-left: 15px solid transparent;
  border-right: 15px solid transparent;
  border-top: 15px solid rgba(255, 255, 255, 0.3); }
  .arrow:before {
    content: '';
    position: absolute;
    top: -18px;
    left: -12px;
    width: 0;
    height: 0;
    border-left: 12px solid transparent;
    border-right: 12px solid transparent; }
    .section.shamrock .arrow:before {
      border-top: 14px solid #2ab8ac; }
    .section.carrot .arrow:before {
      border-top: 14px solid #ffab52; }
    .section.amethyst .arrow:before {
      border-top: 14px solid #9c55a5; }
    .section.scooter .arrow:before {
      border-top: 14px solid #57cadd; }
    .section.dolly .arrow:before {
      border-top: 14px solid #fff68d; }
    .section.shamrock .arrow:before {
      border-top: 14px solid #2ab8ac; }
    .section.pear .arrow:before {
      border-top: 14px solid #cce033; }

.section.carrot {
  background-color: #ffab52; }
.section.amethyst {
  background-color: #9c55a5; }
.section.scooter {
  background-color: #57cadd; }
.section.dolly {
  background-color: #fff68d;
  color: #2C3E50; }
.section.shamrock {
  background-color: #2ab8ac; }
.section.pear {
  background-color: #cce033; }

.color-carrot {
  color: #ffab52; }

.color-amethyst {
  color: #9c55a5; }

.color-scooter {
  color: #57cadd; }

.color-dolly {
  color: #fff68d; }

.color-shamrock {
  color: #2ab8ac; }

.color-pear {
  color: #cce033; }

.previews {
  display: block;
  list-style: none;
  width: 85%;
  margin: 34px auto 0; }
  .previews li {
    display: inline-block;
    width: 150px;
    padding: 20px;
    vertical-align: middle; }
  .previews.smalls {
    display: inline-block;
    width: auto;
    padding: 34px 25px;
    border: 1px solid rgba(255, 255, 255, 0.3);
    border-radius: 15px; }
  .previews.smalls li {
    padding: 5px;
    width: auto; }
  .previews.bigs li {
    max-width: 250px;
    width: 100%; }

.preview-item {
  font-family: 'Dancing Script', cursive;
  font-size: 70px;
  line-height: 100px;
  position: relative;
  width: 100px;
  height: 100px;
  border-radius: 15px;
  color: rgba(255, 255, 255, 0.3);
  margin: auto; }
  .preview-item.big {
    width: 100%;
    height: 0;
    font-size: 110px;
    line-height: 100%;
    padding-bottom: 100%; }
  .preview-item.small {
    display: inline-block;
    width: 40px;
    height: 40px;
    line-height: 40px; }
    .preview-item.small:after {
      display: none; }
  .section.carrot .preview-item {
    background-color: #ffc485; }
  .section.amethyst .preview-item {
    background-color: #b075b8; }
  .section.scooter .preview-item {
    background-color: #81d7e6; }
  .section.dolly .preview-item {
    background-color: #fffac0; }
  .section.shamrock .preview-item {
    background-color: #41d4c7; }
  .section.pear .preview-item {
    background-color: #d7e75f; }
  .preview-item.transp {
    color: white;
    background-color: transparent!important; }
  .preview-item:after {
    content: "";
    width: 0;
    height: 0;
    border-left: 33px solid transparent;
    position: absolute;
    bottom: 0px;
    right: 0px; }
    .section.carrot .preview-item:after {
      border-bottom: 33px solid #ffab52; }
    .section.amethyst .preview-item:after {
      border-bottom: 33px solid #9c55a5; }
    .section.scooter .preview-item:after {
      border-bottom: 33px solid #57cadd; }
    .section.dolly .preview-item:after {
      border-bottom: 33px solid #fff68d; }
    .section.shamrock .preview-item:after {
      border-bottom: 33px solid #2ab8ac; }
    .section.pear .preview-item:after {
      border-bottom: 33px solid #cce033; }

.preview-item.small[class*="shake"]:before {
  content: 'A';
  position: absolute;
  top: 0;
  left: 0;
  font-size: 20px;
  text-align: center;
  width: 100%;
  color: rgba(0, 0, 0, 0.4); }

.preview-icon {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%); }

.flip {
  position: absolute;
  right: 0;
  bottom: 0;
  width: 0;
  height: 0;
  border-right: 30px solid transparent; }
  .section.carrot .flip {
    border-top: 30px solid #ffd09f; }
  .section.amethyst .flip {
    border-top: 30px solid #ba86c1; }
  .section.scooter .flip {
    border-top: 30px solid #97deea; }
  .section.dolly .flip {
    border-top: 30px solid #fffcda; }
  .section.shamrock .flip {
    border-top: 30px solid #56d8cd; }
  .section.pear .flip {
    border-top: 30px solid #ddea75; }
  .flip:after {
    content: "";
    width: 0;
    height: 0;
    border-bottom: 30px solid rgba(0, 0, 0, 0.15);
    border-left: 30px solid transparent;
    position: absolute;
    bottom: 0;
    left: -30px; }

.preview-desc {
  margin-top: 20px;
  font-family: 'Gentium Basic', serif; }

.dropdown {
  position: relative;
  margin: 25px auto;
  height: 50px;
  max-width: 300px; }
  .dropdown::after {
    content: "➘";
    position: absolute;
    right: 11px;
    top: 13px;
    color: rgba(0, 0, 0, 0.2);
    font-size: 25px; }

.dropdown-select {
  position: relative;
  width: 100%;
  margin: 0;
  padding: 6px 8px 6px 10px;
  height: 50px;
  line-height: 25px;
  font-family: 'Dancing Script', cursive;
  font-size: 25px;
  color: rgba(0, 0, 0, 0.5);
  background-color: rgba(255, 255, 255, 0.1);
  transition: background-color .3s;
  border: none;
  outline: none;
  border: 0;
  border-radius: 0;
  -webkit-appearance: none; }
  .dropdown-select:hover, .dropdown-select:active {
    background-color: rgba(255, 255, 255, 0.5); }
  .dropdown-select > option {
    margin: 3px;
    padding: 6px 8px;
    text-shadow: none;
    border-radius: 3px;
    cursor: pointer; }

.btn {
  position: relative;
  font-family: 'Dancing Script', cursive;
  font-size: 40px;
  padding: 10px 20px;
  margin-top: 34px;
  display: inline-block;
  transition: background-color, .3s; }
  .btn.carrot {
    background-color: #ffab52; }
  .btn.amethyst {
    background-color: #9c55a5; }
  .btn.light:hover {
    background-color: rgba(0, 0, 0, 0.1); }

.btn + small {
  font-family: 'Gentium Basic', serif;
  font-size: 85%;
  margin-top: 1.5em;
  display: block; }

.badge {
  position: absolute;
  top: -.5rem;
  right: -.5rem;
  border-radius: 5px;
  background-color: #cce033;
  font-family: 'Helvetica Neue', 'Arial', sans;
  font-size: .7rem;
  padding: 0 .5rem;
}

pre[class*="shake"][class*="language"] {
  padding: .3em .5em;
  margin: .85em .5em;
  display: block; }
  pre[class*="shake"][class*="language"] code {
    font-size: .85em; }

@media (min-width: 40em) {
  pre[class*="shake"][class*="language"] {
    display: inline-block; }

  .section h1 {
    font-size: 5em; }

.u-mt2 {
  margin-top: 1rem; }

.u-mt3 {
  margin-top: 2rem; }

.u-mt4 {
  margin-top: 4rem; }

.dib {
  display: inline-block;
}


code:
<!DOCTYPE html>

    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta
      name="description"
      content="Some CSS classes to move your DOM! Easy-to-use classes that will add different kind of shake to each part of your site."
    />
    <title>CSShake</title>
    <link
      href="https://fonts.googleapis.com/css?family=Gentium+Basic"
      rel="stylesheet"
      type="text/css"
    />
    <link
      href="https://fonts.googleapis.com/css?family=Dancing+Script"
      rel="stylesheet"
      type="text/css"
    />
    <link rel="stylesheet" type="text/css" href="csshake.css" />
    <link rel="stylesheet" type="text/css" href="demo.css" />
    <link
      rel="stylesheet"
      type="text/css"
      href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.9.0/themes/prism-okaidia.min.css"
    />

        reshake
CSShake as a React functional
          Component

          CSShake

          Some CSS classes to move your DOM!

Classes

The basic collection

              Bs

Basic Shake

              Ss

Slow Shake

              Ls

Little Shake

              Hs

Hard Shake

              ⇄

Fixed Horizontal

              ⇵

Fixed Vertical

              ↻

Fixed Rotation

              Os

Opacity Shake

              ✌

Crazy Shake

              ℇ

Constant Shake

              %

Chunk Shake

          Launch the animations from the parent with class 'shake-trigger'
          (customizable)

Install

Get started...

$ git clone https://github.com/elrumordelaluz/csshake.git

or

$ bower install csshake

or

$ npm i csshake

          or

          Download Center

Download separated files for each shake animation, expanded or
          minified.

            cdnjs.com
            New

How to use

Include the css file then apply classes to elements

<link rel="stylesheet" type="text/css" href="csshake.min.css">
<!-- or from surge.sh -->
<link rel="stylesheet" type="text/css" href="https://csshake.surge.sh/csshake.min.css">

<div class="shake"></div>

<div class="shake-hard"></div>

<div class="shake-slow"></div>

<div class="shake-little"></div>

<div class="shake-horizontal"></div>

<div class="shake-vertical"></div>

<div class="shake-rotate"></div>

<div class="shake-opacity"></div>

<div class="shake-crazy"></div>

<div class="shake-chunk"></div>

<ul class="shake-trigger">
 <li class="shake-slow"></li>
 <li></li>
 <li></li>
 <li class="shake-hard"></li>
 <li></li>
 <li class="shake"></li>
</ul>

<!-- To include only some csshake animations use this syntax -->
<link rel="stylesheet" type="text/css" href="csshake-slow.min.css">
<!-- or from surge.sh -->
<link rel="stylesheet" type="text/css" href="http://csshake.surge.sh/csshake-slow.min.css">

Variations

Some things you could add...

              🙊

Freezed after Shake

              🙈

Constant and stops on :hover

          <select class="dropdown-select" id="shake-type">
            <option value="" disabled selected>Select a shake</option>
            <option value="shake-hard">Hard Shake</option>
            <option value="shake-slow">Slow Shake</option>
            <option value="shake-little">Little Shake</option>
            <option value="shake-horizontal">Horizontal Shake</option>
            <option value="shake-vertical">Vertical Shake</option>
            <option value="shake-rotate">Rotate Shake</option>
            <option value="shake-opacity">Opacity Shake</option>
            <option value="shake-crazy">Crazy Shake</option>
          </select>

<!-- To shake constant -->
<div class="shake-slow shake-constant"></div>
<!-- and stops on :hover -->
<div class="shake-slow shake-constant shake-constant--hover"></div>

<!-- Freeze animation at that point when :hover -->
<div class="shake-crazy shake-freeze"></div>

More flexibility

The do-shake @mixin, and so on...

.my-custom-shake {
  @include do-shake(
        $name: 'my-custom-shake', /* {String} is the name for the keyframes animation */
        $h: 5px, /*  {Number} is the max number for random to assign in x axis */
        $v: 5px, /* {Number} is the max number for random to assign in y axis */
        $r: 3deg, /* {Number} is the max number for random rotation */
        $dur: 100ms, /* {Number} is the animation-duration time value */
        $precision: .02, /* {Number} is the precision of the keyframes animation. For example .02 generates keyframes each 2% and .1 each 10%. The calculation is $step: 100 * $precision; */
        $opacity: false,
        $q: infinite, /* {String} is the animation-iteration-count value */
        $t: ease-in-out, /* {String} animation-timing-function value */
        $delay: null, /* {Number} animation-delay time value */
        $chunk: 100%); /* {Number} is the part of the keyframes where apply the animation */
}

/* Example shake-crazy */
.shake-crazy {
	@include do-shake('shake-crazy', 40, 40, 20, 100ms, .1, $opacity: true);
}

Last words

          The about, the idea, and the desire to hear from you to improve the
          code...

          I had to make a shake animation for a big project. I did it in vanilla
          CSS at the begining.
After I finished it I discovered
          this
          cool jQuery plugin by
          @jackrugile.

          Then I started to think I should make this little CSS project.

        Download

        Fork me on Github

          Tweet

          Made with ♥ by
          @elrumordelaluz, using Sass.
This site uses
          Prism.js by
          Lea Verou


code:
const pug = require('pug')
const gzipSize = require('gzip-size')
const prettyBytes = require('pretty-bytes')
const fs = require('fs')
const version = require('./package.json').version

const compiledFunction = pug.compileFile('template-downloads.pug', {
  pretty: true,
})

fs.readdir('dist', (err, files) => {
  const cssFiles = files.filter(file => file.indexOf('.css') !== -1)
  const gzips = Promise.all(cssFiles.map(file => gzipSize.file(`dist/${file}`)))
  gzips.then(gz => {
    // [0] file name, [1] file size
    const sizes = gz.map((itemSize, i) => ([
      cssFiles[i], prettyBytes(itemSize),
    ]))
    fs.writeFile('dist/index.html', compiledFunction({ sizes, version }), err => {
      if (err) throw err
      console.log('The download index has been saved!')
    })
  })
})


description: Some CSS classes to move your DOM!

start: npm run build

build: npm run build:raw && npm run build:min && npm run build:docs && node downloadIndex.js

build:docs: sass scss/csshake.scss:docs/csshake.css --style compressed

build:raw: sass scss/:dist/

build:min: mkdir -p dist/min && sass --style compressed scss/:dist/min && npm run suffix && npm run move

suffix: for file in dist/min/*.css; do mv "$file" "${file%.css}.min.css"; done

move: mv dist/min/*.css dist && rm -r dist/min

type: git

keywords: css transitions animations

author: Lionel T <elrumordelaluz@hotmail.com> (http://elrumordelaluz.com)


Csshake

tagline: CSS classes to move your DOM!

body:
csshake
=======

CSS classes to move your DOM!

note: Don't delete this file! It's used internally to help with page regeneration.


CSS Shake

description: Some CSS classes to move your DOM!


code:
// Variables
$prefix: 'shake' !default;
$trigger: 'shake-trigger' !default;

// Placeholders
%shake {
  display: inherit;
  transform-origin: center center;
}

%paused   { animation-play-state: paused; }
%running  { animation-play-state: running; }

@function apply-random($input) {
  @return if($input != 0, random($input) - $input*0.5, 0);
}

/// Do The Shake
/// @param {String}  $name ['shake']              - Name for the keyframes animation
/// @param {Number}  $h [5px]                     - Max number for random to assign in x axis
/// @param {Number}  $v [5px]                     - Max number for random to assign in y axis
/// @param {Number}  $r [3deg]                    - Max number for random rotation
/// @param {Number}  $dur [100ms]                 - animation-duration; valid time value
/// @param {Number}  $precision [.1]              - Precision of the keyframes animation (i.e 2 > 2%, 4%, 6%...)
/// @param {Boolean} $opacity [false]             - To apply random animation also in the opacity property
/// @param {String}  $q [infinite]                - animation-iteration-count; valid value
/// @param {String}  $t [ease-in-out]             - animation-timing-function; valid value
/// @param {Number}  $delay [null]                - animation-delay; valid time value
/// @param {Number}  $chunk [100%]                - Part of 100% where apply the animation
@mixin do-shake(
  $name: 'shake',
  $h: 5px,
  $v: 5px,
  $r: 3deg,
  $dur: 100ms,
  $precision: .02,
  $opacity: false,
  $q: infinite,
  $t: ease-in-out,
  $delay: null,
  $chunk: 100%
  ) {

  $rotate: 0;
  $move-x: 0;
  $move-y: 0;

  $h: if(unitless($h) and $h != 0, $h * 1px, $h);
  $v: if(unitless($v) and $v != 0, $v * 1px, $v);
  $r: if(unitless($r) and $r != 0, $r * 1deg, $r);

  // Keyframes
  @at-root {
    @keyframes #{$name} {
      $interval: if($precision > 0 and $precision < 1, 100 * $precision, 10);
      $step: $interval * 1%;

      @while $step < $chunk {
        $rotate: apply-random($r);
        $move-x: apply-random($h);
        $move-y: apply-random($v);

        #{$step} {
          transform: translate($move-x, $move-y) rotate($rotate);
          @if $opacity { opacity: random(100) * 0.01; }
        }

        $step: $step + $interval;
      }

      #{ if($chunk < 100%, (0%, $chunk, 100%), (0%, 100%)) } {
        transform: translate(0, 0) rotate(0);
      }

    }
  }

  @extend %shake;

  &:hover,
  .#{$trigger}:hover &,
  &.#{$prefix}-freeze,
  &.#{$prefix}-constant {
    @if $delay { animation-delay: $delay; }
    animation-name: #{$name};
    animation-duration: $dur;
    animation-timing-function: $t;
    animation-iteration-count: $q;
  }

  &:hover,
  .#{$trigger}:hover & { @extend %running; }

}

.#{$prefix}-freeze,
.#{$prefix}-constant.#{$prefix}-constant--hover:hover,
.#{$trigger}:hover .#{$prefix}-constant.#{$prefix}-constant--hover {
  @extend %paused;
}

.#{$prefix}-freeze:hover,
.#{$trigger}:hover .#{$prefix}-freeze { @extend %running; }


code:
/*! * * * * * * * * * * * * * * * * * * * *\
  CSShake :: shake-crazy
  v1.6.0
  CSS classes to move your DOM
  (c) 2015 @elrumordelaluz
  http://elrumordelaluz.github.io/csshake/
  Licensed under MIT
\* * * * * * * * * * * * * * * * * * * * */
@import 'tools';

.shake-crazy { @include do-shake('shake-crazy', 40, 40, 20, 100ms, .1, $opacity: true); }


code:
/*! * * * * * * * * * * * * * * * * * * * *\
  CSShake :: shake
  v1.6.0
  CSS classes to move your DOM
  (c) 2015 @elrumordelaluz
  http://elrumordelaluz.github.io/csshake/
  Licensed under MIT
\* * * * * * * * * * * * * * * * * * * * */
@import 'tools';

.shake            { @include do-shake(); }


code:
/*! * * * * * * * * * * * * * * * * * * * *\
  CSShake :: shake-hard
  v1.6.0
  CSS classes to move your DOM
  (c) 2015 @elrumordelaluz
  http://elrumordelaluz.github.io/csshake/
  Licensed under MIT
\* * * * * * * * * * * * * * * * * * * * */
@import 'tools';

.shake-hard { @include do-shake('shake-hard', 20, 20, 7); }


code:
/*! * * * * * * * * * * * * * * * * * * * *\
  CSShake :: shake-horizontal
  v1.6.0
  CSS classes to move your DOM
  (c) 2015 @elrumordelaluz
  http://elrumordelaluz.github.io/csshake/
  Licensed under MIT
\* * * * * * * * * * * * * * * * * * * * */
@import 'tools';

.shake-horizontal { @include do-shake('shake-horizontal', 20, 0, 0); }


code:
/*! * * * * * * * * * * * * * * * * * * * *\
  CSShake :: shake-little
  v1.6.0
  CSS classes to move your DOM
  (c) 2015 @elrumordelaluz
  http://elrumordelaluz.github.io/csshake/
  Licensed under MIT
\* * * * * * * * * * * * * * * * * * * * */
@import 'tools';

.shake-little { @include do-shake('shake-little', 2, 2, 1); }


code:
/*! * * * * * * * * * * * * * * * * * * * *\
  CSShake :: shake-rotate
  v1.6.0
  CSS classes to move your DOM
  (c) 2015 @elrumordelaluz
  http://elrumordelaluz.github.io/csshake/
  Licensed under MIT
\* * * * * * * * * * * * * * * * * * * * */
@import 'tools';

.shake-rotate { @include do-shake('shake-rotate', 0, 0, 15); }


code:
/*! * * * * * * * * * * * * * * * * * * * *\
  CSShake :: shake-slow
  v1.6.0
  CSS classes to move your DOM
  (c) 2015 @elrumordelaluz
  http://elrumordelaluz.github.io/csshake/
  Licensed under MIT
\* * * * * * * * * * * * * * * * * * * * */
@import 'tools';

.shake-slow { @include do-shake('shake-slow', 20, 20, 7, 5s); }


code:
/*! * * * * * * * * * * * * * * * * * * * *\
  CSShake :: shake-vertical
  v1.6.0
  CSS classes to move your DOM
  (c) 2015 @elrumordelaluz
  http://elrumordelaluz.github.io/csshake/
  Licensed under MIT
\* * * * * * * * * * * * * * * * * * * * */
@import 'tools';

.shake-vertical { @include do-shake('shake-vertical', 0, 20, 0); }


code:
/*! * * * * * * * * * * * * * * * * * * * *\
  CSShake :: Package
  v1.6.0
  CSS classes to move your DOM
  (c) 2015 @elrumordelaluz
  http://elrumordelaluz.github.io/csshake/
  Licensed under MIT
\* * * * * * * * * * * * * * * * * * * * */
@import 'tools';

.shake            { @include do-shake(); }
.shake-little     { @include do-shake('shake-little', 2, 2, 1); }
.shake-slow       { @include do-shake('shake-slow', 20, 20, 7, 5s); }
.shake-hard       { @include do-shake('shake-hard', 20, 20, 7); }
.shake-horizontal { @include do-shake('shake-horizontal', 20, 0, 0); }
.shake-vertical   { @include do-shake('shake-vertical', 0, 20, 0); }
.shake-rotate     { @include do-shake('shake-rotate', 0, 0, 15); }
.shake-opacity    { @include do-shake('shake-opacity', 10, 10, 5, .5s, .1, $opacity: true); }
.shake-crazy      { @include do-shake('shake-crazy', 40, 40, 20, 100ms, .1, $opacity: true); }
.shake-chunk      { @include do-shake('shake-chunk', 30, 30, 30, 4s, $chunk: 40%); }


code:
doctype html
html(lang="en")
  head
    title CSS Shake :: Download center
    link(href="https://fonts.googleapis.com/css?family=Dancing+Script", rel="stylesheet", type="text/css")
    link(href="https://fonts.googleapis.com/css?family=Open+Sans:400,300", rel="stylesheet", type="text/css")
    link(href="csshake.min.css", rel="stylesheet", type="text/css")
    style(type="text/css").
      body {
        background-color: #2ab8ac;
        color: white;
        font-family: 'Open Sans', sans-serif;
        font-weight: 300;
        text-align: center;
      }
      h1,
      h3 {
        font-family: 'Dancing Script', cursive;
        font-weight: 100;
      }
      h1 { font-size: 4em }
      h3 { font-size: 2em }
      a { color: inherit; }
      .main-title:after {
          content: attr(title);
          position: absolute;
          font-size: .25em;
          margin-left: -1em;
          color: rgba(255, 255, 255, 0.7);
      }
      .btn {
        display: inline-block;
        background-color: transparent;
        border: 1px solid;
        color: white;
        font-size: 14px;
        letter-spacing: 1px;
        line-height: 1;
        margin: .5em;
        text-decoration: none;
        text-transform: uppercase;
        transition: .3s;
        padding: 1.3em;
        position: relative;
      }
      .btn:hover {
        background-color: white;
        border-color: white;
        color: #2ab8ac;
      }
      .btn:after {
        bottom: .5em;
        content: attr(href);
        font-size: 70%;
        left: 50%;
        position: absolute;
        text-transform: none;
        transform: translateX(-50%);
      }
      h1 small {
        font-size: 25%;
        font-family: 'Open Sans', sans-serif;
      }
      footer { margin-top: 2rem }
      footer p { font-size: 85% }
      footer a { text-decoration: none }
    script.
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
      ga('create', 'UA-48410558-2', 'auto');
      ga('send', 'pageview');
  body
    h1.main-title(title=`v${version}`) CSShake
    h3.shake-slow.shake-constant.shake-constant--hover Download center
    br
    - const isMainFile = filename => filename === 'csshake.css' || filename === 'csshake.min.css'
    - const isMinified = val => val.indexOf('.min') !== -1
    - const getCls = val => val.replace(/(^cs|\.css|\.min|-default)/gi, '')
    each val in sizes
      if isMainFile(val[0])
        - const cls = getCls(val[0])
        - const isMin = isMinified(val[0])
        a.btn.shake(
          onclick=`ga('send', 'event', 'download', ${cls}, ${isMin ? 'minified' : 'expanded'})`,
          href=val[0]
        ) cs#{cls} #{isMin ? 'minified' : ''} Pack (#{val[1]})
        br
    br
    - let current = ''
    each val in sizes
      if !isMainFile(val[0])
        - const cls = getCls(val[0])
        a.btn(
          class=cls,
          onclick=`ga('send', 'event', 'download', ${cls}, ${isMinified(val[0]) ? 'minified' : 'expanded'})`,
          href=val[0]
        ) #{val[0].replace('-', ' ')} (#{val[1]})
        if current === cls
          br
        - current = cls
    footer
      p Made with <3 by
        a(href="https://twitter.com/elrumordelaluz") @elrumordelaluz
        | |
        a(href="http://elrumordelaluz.github.io/csshake/") Demo
        | |
        a(href="https://github.com/elrumordelaluz/csshake") Repository


hexa-animation

description: css animation library