animation
CSS property · 6 supported, 1 partial, 14 unsupported across 21 clients
Client Support
| Client | Category | Engine | Support |
|---|---|---|---|
| Gmail | webmail | Gmail Web | Unsupported |
| Gmail Android | mobile | Gmail Mobile | Unsupported |
| Gmail iOS | mobile | Gmail Mobile | Unsupported |
| Outlook 365 | webmail | Outlook Web | Unsupported |
| Outlook (New) | desktop | Outlook Web | Unsupported |
| Outlook Classic | desktop | Microsoft Word | Unsupported |
| Outlook iOS | mobile | Outlook Mobile | Unsupported |
| Outlook Android | mobile | Outlook Mobile | Unsupported |
| Outlook for Mac | desktop | WebKit | Supported |
| Apple Mail | desktop | WebKit | Supported |
| Apple Mail iOS | mobile | WebKit | Supported |
| Yahoo Mail | webmail | Yahoo | Unsupported |
| Yahoo Mail Android | mobile | Yahoo | Unsupported |
| Yahoo Mail iOS | mobile | Yahoo | Unsupported |
| Samsung Mail | mobile | Samsung | Supported |
| Thunderbird | desktop | Gecko | Unsupported |
| HEY Mail | webmail | WebKit | Supported |
| Proton Mail | webmail | Proton | Unsupported |
| AOL Mail | webmail | AOL | Unsupported |
| Fastmail | webmail | Fastmail | Supported |
| Superhuman | desktop | Blink | Partial |
Client-by-client behaviour for animation
Fully supports animation (6): Outlook for Mac, Apple Mail, Apple Mail iOS, Samsung Mail, HEY Mail, Fastmail.
Partial support (1): Superhuman. Expect rendering quirks unique to each engine. Partial support typically means a subset of values, an ignored shorthand, or sanitizer-specific rewrites.
No support (14): Gmail, Gmail Android, Gmail iOS, Outlook 365, Outlook (New), Outlook Classic, Outlook iOS, Outlook Android, Yahoo Mail, Yahoo Mail Android, Yahoo Mail iOS, Thunderbird, Proton Mail, AOL Mail. Plan fallbacks for these clients before relying on animation in production sends.
Fixes & Workarounds
Gmail
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Gmail Android
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Gmail iOS
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Outlook 365
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Outlook (New)
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Outlook Classic
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Outlook iOS
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Outlook Android
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Yahoo Mail
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Yahoo Mail Android
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Yahoo Mail iOS
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Thunderbird
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Proton Mail
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
AOL Mail
UnsupportedCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Superhuman
PartialCSS animations are not supported. Use animated GIFs instead.
Before
<style>
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }
.badge { animation: pulse 2s infinite; }
</style>
<span class="badge">New!</span>After
<!-- Use an animated GIF for the effect -->
<img src="https://example.com/badge-animated.gif"
width="60" height="24" alt="New!"
style="display: inline-block; border: 0;" />Replace CSS animation with an animated GIF
Production guidance for animation
animation is a CSS property. Across the email client matrix, 6 of 15 tracked clients support it fully, 1 only partially, and 14 not at all. The clients most likely to require a workaround for this feature are Gmail, Gmail Android, Gmail iOS. Each of them needs a tailored fallback. See the per-client examples above for the specific code fix Emailens recommends.
When in doubt, ship a baseline that renders without animation and treat it as progressive enhancement on clients where support is verified. Emailens automatically detects cross-client divergence on this feature when you preview an email, so you can see exactly which template paths break before a campaign goes out.
Related Features
Test your email across all 21 clients
Preview rendering, catch CSS issues, and get actionable fixes. Free.
Try Emailens FreeSupport data last updated Apr 27, 2026 · synced from caniemail.com via @emailens/engine.