I’m trying to make a loader gif using CSS animation and transforms instead. Unfortunately, the following code converts Firefox’s (and sometimes Chrome’s,Safari’s) CPU usage on my Mac OSX from <10% to >90%.
i.icon-repeat {
display:none;
-webkit-animation: Rotate 1s infinite linear;
-moz-animation: Rotate 1s infinite linear; //**this is the offending line**
animation: Rotate 1s infinite linear;
}
@-webkit-keyframes Rotate {
from {-webkit-transform:rotate(0deg);}
to {-webkit-transform:rotate(360deg);}
}
@-keyframes Rotate {
from {transform:rotate(0deg);}
to {transform:rotate(360deg);}
}
@-moz-keyframes Rotate {
from {-moz-transform:rotate(0deg);}
to {-moz-transform:rotate(360deg);}
}
Note, that without the infinite linear rotation or the -moz- vendor prefix, the “loader gif”-like behavior is lost. That is, the icon doesn’t continuously rotate.
Perhaps this is just a bug or maybe I’m doing something wrong?
I fixed my own problem. Instead of toggling the visibility of the icon, I simply added it then removed it from the DOM. The key thing I hadn’t known about using CSS animations is that
display:nonevs.display:inlineconsumes CPU either way.So instead of that, do this (combined with the CSS in my question above):