Skip to content

Instantly share code, notes, and snippets.

@Integralist
Created October 22, 2012 14:10
Show Gist options
  • Save Integralist/3931680 to your computer and use it in GitHub Desktop.
Save Integralist/3931680 to your computer and use it in GitHub Desktop.
Sass Mixin for CSS3 Animations
@include keyframe(fadeout) {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@include keyframe(changecolour) {
0% {
color: #000;
}
100% {
color: #FFF;
}
}
@mixin keyframe ($animation_name) {
@-webkit-keyframes $animation_name {
@content;
}
@-moz-keyframes $animation_name {
@content;
}
@-o-keyframes $animation_name {
@content;
}
@keyframes $animation_name {
@content;
}
}
/*
Example usage:
@include animation(10s, 5s, changecolour)
*/
@mixin animation ($delay, $duration, $animation) {
-webkit-animation-delay: $delay;
-webkit-animation-duration: $duration;
-webkit-animation-name: $animation;
-webkit-animation-fill-mode: forwards; /* this prevents the animation from restarting! */
-moz-animation-delay: $delay;
-moz-animation-duration: $duration;
-moz-animation-name: $animation;
-moz-animation-fill-mode: forwards; /* this prevents the animation from restarting! */
-o-animation-delay: $delay;
-o-animation-duration: $duration;
-o-animation-name: $animation;
-o-animation-fill-mode: forwards; /* this prevents the animation from restarting! */
animation-delay: $delay;
animation-duration: $duration;
animation-name: $animation;
animation-fill-mode: forwards; /* this prevents the animation from restarting! */
}
@awesomephant
Copy link

You don't need the -o- prefix here. There was literally never a browser that used it. http://caniuse.com/#feat=css-animation

@VAggrippino
Copy link

The generated CSS will have all of the prefixed animation properties duplicated in all of the keyframes blocks. For example, @-webkit-keyframes will contain -moz-animation-* properties and @-moz-keyframes will contain -webkit-animation-*. I'm sure that works, but I wonder if there's a creative way to avoid that duplication.

@aaron-album
Copy link

@awesomephant opera 12 used -o- in the same page referenced http://caniuse.com/#feat=css-animation

@aaron-album
Copy link

@Ghodmode The animation include is not supposed to be placed in the keyframes mixin so we shouldn't see the problem you describe.

Nonetheless, any calls like @include transform(rotate(90deg)); within the keyframes mixing will show up with all the prefixes. That's unfortunate.

@mds
Copy link

mds commented Jan 16, 2014

Trying to use this here http://sassmeister.com/gist/8458511 but $animation-name isn't compiling properly. Any ideas?

@mds
Copy link

mds commented Jan 16, 2014

Figured it out. With Sass you have to use #{$animation-name} to force the correct output

@smuuf
Copy link

smuuf commented Jul 1, 2014

mds: Geez, Thank you! I've been searching for this one (#{$animation-name}) for the last hour.

@shoxty
Copy link

shoxty commented May 26, 2015

<3 this. thanks.

@terrancesmith98
Copy link

Why not let something like gulp-autoprefixer do the prefixing heavy-lifting for you and only insert the basic properties into the mixin?

@thrillcode
Copy link

I know this is a pretty old res, though it's missing animation-iteration-count, eg. use of infinite

@mrengy
Copy link

mrengy commented Dec 2, 2017

I was having an error with this outputting the literal $animation_name into the CSS. The accepted answer to this StackOverflow question resolved it for me. You might consider incorporating it into the gist.

@afroguy16
Copy link

I don't understand the examples or their relationship

@DevKareemReda
Copy link

Thank you very much

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment