Animating Icons
Our Styling Toolkit takes the trouble out of sizing, rotating, and stacking icons, so you can make your site pop with animations.
We’ll cover the basics of animations like beat, fade, beat-fade, flip, and spin to your icons, so that you can create more visual interest on your site.
Beat
Use the fa-beat
animation to scale an icon up or down. This is useful for grabbing attention or for use with health/heart-centric icons.
Beat Utilities
Utility | Details |
---|---|
--fa-beat-scale | Set max value that an icon will scale |
Fade
Use the fa-fade
animation to fade an icon in and out visually to grab attention in a subtle (or not so subtle) way.
Fade Utilities
Utility | Details |
---|---|
--fa-fade-opacity | Set lowest opacity value an icon will fade to and from |
Beat-Fade
Use the fa-beat-fade
animation to grab attention by visually scaling and pulsing an icon in and out.
Beat-Fade Utilities
Utility | Details |
---|---|
--fa-beat-fade-opacity | Set lowest opacity value an icon will fade to and from |
--fa-beat-fade-scale | Set max value that an icon will scale |
Bounce
Use the fa-bounce
animation to grab attention by visually bouncing an icon up and down.
Bounce Utilities
Utility | Details |
---|---|
--fa-bounce-rebound | Set the amount of rebound an icon has when landing after the jump |
--fa-bounce-height | Set the max height an icon will jump to when bouncing |
--fa-bounce-start-scale-x | Set the icon’s horizontal distortion (“squish”) when starting to bounce |
--fa-bounce-start-scale-y | Set the icon’s vertical distortion (“squish”) when starting to bounce |
--fa-bounce-jump-scale-x | Set the icon’s horizontal distortion (“squish”) at the top of the jump |
--fa-bounce-jump-scale-y | Set the icon’s vertical distortion (“squish”) at the top of the jump |
--fa-bounce-land-scale-x | Set the icon’s horizontal distortion (“squish”) when landing after the jump |
--fa-bounce-land-scale-y | Set the icon’s vertical distortion (“squish”) when landing after the jump |
Flip
Use the fa-flip
animation to rotate an icon in 3D space. By default, flip rotates an icon about the Y axis 180 degrees. Flipping is helpful for transitions, processing states, or for using physical objects that one flips in the real world.
Flip Utilities
Utility | Details |
---|---|
--fa-flip-x | Set x-coordinate of the vector denoting the axis of rotation (between 0 and 1 ) |
--fa-flip-y | Set y-coordinate of the vector denoting the axis of rotation (between 0 and 1 ) |
--fa-flip-z | Set z-coordinate of the vector denoting the axis of rotation (between 0 and 1 ) |
--fa-flip-angle | Set rotation angle of flip. A positive angle denotes a clockwise rotation, a negative angle a counter-clockwise one. |
Shake
Use the fa-shake
animation to grab attention or note that something is not allowed by shaking an icon back and forth.
Spin
Use the fa-spin
class to get any icon to rotate, and use fa-spin-pulse
to have it rotate with eight steps. This works especially well with fa-spinner
and everything in the spinner icons category. If you would like an icon to spin in reverse (e.g., counter-clockwise), add an additional class of fa-spin-reverse
.
Spin Utilities
Utility | Details |
---|---|
fa-spin | Makes an icon spin 360° clockwise |
fa-spin-pulse | Makes an icon spin 360° clockwise in 8 incremental steps |
fa-spin-reverse | When used in conjunction with fa-spin or fa-spin-pulse , makes an icon spin counter-clockwise. |
Accessibility
Using animations on the web in the most accessible way requires a little extra consideration:
In general, it’s best to use animations on the web in a complementary way rather than the only way to note a state change in UI. Remember to update the text of actions and change elements’ other visual aspects too!
And when it comes to an animation’s timing and duration, avoid changing the state of something at a rate of three times per second or greater - which can trigger photosensitive epilepsy.
All included animations now support and leverage the prefers-reduced-motion
CSS media feature to detect if a user has requested that the system minimize the amount of non-essential motion it uses.
Case | How It Affects Included Animations |
---|---|
No preference set (default) | Animations will render as expected |
Preference set to reduce | Animations will be disabled |
When a prefers-reduced-motion
is set to reduce
, it indicates that the user prefers less motion, which may trigger discomfort for those with vestibular motion disorders on the page.
Customization
We’ve added CSS custom properties to make customizing easier and more efficient, and you can use these custom properties across all of our animations. Define your own values for the following properties to override and customize Font Awesome’s defaults.
CSS Custom Property | Details | Accepted Values |
---|---|---|
--fa-animation-delay | Set an initial delay for animation | Any valid CSS animation-delay value |
--fa-animation-direction | Set direction for animation | Any valid CSS animation-direction value |
--fa-animation-duration | Set duration for animation | Any valid CSS animation-duration value |
--fa-animation-iteration-count | Set number of iterations for animation | Any valid CSS animation-iteration-count value |
--fa-animation-timing | Set how the animation progresses through frames | Any valid CSS animation-timing-function value |
Icon Animation + Wobbles
We’ve worked hard to keep icons perfectly centered when they spin or pulse. However, we’ve seen issues with several browsers with the Web Fonts + CSS method of Font Awesome. This appears to be an issue with web fonts in general and not something we can directly fix. We do have a couple of ways you might be able to work around this:
- Set the display of the animating icon — Use
display: block;
where you can. This seems to help a lot with this issue. - Use multiples of 16px (the base font size) — We’ve noticed the wobble is more noticeable otherwise.
- Switch Frameworks — Switch to the SVG with JavaScript method; it’s working a lot better for this.
Conflicts with animate.css
Older versions of animate.css also used the fast
CSS class selector to control the speed of animations.
Since Font Awesome also uses this class selector, they conflict with each other.
You can fix this by upgrading animate.css to a new version or you can add this exception into your CSS somewhere to work around the issues.