position
CSS property · 3 supported, 12 partial, 6 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 | Partial |
| Outlook (New) | desktop | Outlook Web | Unsupported |
| Outlook Classic | desktop | Microsoft Word | Unsupported |
| Outlook iOS | mobile | Outlook Mobile | Unsupported |
| Outlook Android | mobile | Outlook Mobile | Partial |
| Outlook for Mac | desktop | WebKit | Supported |
| Apple Mail | desktop | WebKit | Partial |
| Apple Mail iOS | mobile | WebKit | Partial |
| Yahoo Mail | webmail | Yahoo | Partial |
| Yahoo Mail Android | mobile | Yahoo | Partial |
| Yahoo Mail iOS | mobile | Yahoo | Partial |
| Samsung Mail | mobile | Samsung | Partial |
| Thunderbird | desktop | Gecko | Supported |
| HEY Mail | webmail | WebKit | Partial |
| Proton Mail | webmail | Proton | Supported |
| AOL Mail | webmail | AOL | Partial |
| Fastmail | webmail | Fastmail | Partial |
| Superhuman | desktop | Blink | Partial |
Client-by-client behaviour for position
Fully supports position (3): Outlook for Mac, Thunderbird, Proton Mail.
Partial support (12): Outlook 365, Outlook Android, Apple Mail, Apple Mail iOS, Yahoo Mail, Yahoo Mail Android, Yahoo Mail iOS, Samsung Mail, HEY Mail, AOL Mail, Fastmail, 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 (6): Gmail, Gmail Android, Gmail iOS, Outlook (New), Outlook Classic, Outlook iOS. Plan fallbacks for these clients before relying on position in production sends.
Fixes & Workarounds
Gmail
UnsupportedUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Gmail Android
UnsupportedUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Gmail iOS
UnsupportedUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Outlook (New)
UnsupportedUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Outlook Classic
UnsupportedUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Outlook iOS
UnsupportedUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Outlook 365
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Outlook Android
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Apple Mail
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Apple Mail iOS
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Yahoo Mail
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Yahoo Mail Android
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Yahoo Mail iOS
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Samsung Mail
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
HEY Mail
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
AOL Mail
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Fastmail
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Superhuman
PartialUse table-based positioning instead of CSS position.
Before
<div style="position: relative;">
<div style="position: absolute; top: 0; right: 0;">
Badge
</div>
<p>Content</p>
</div>After
<table role="presentation" width="100%" cellpadding="0"
cellspacing="0" border="0">
<tr>
<td valign="top">Content</td>
<td width="80" valign="top" align="right">Badge</td>
</tr>
</table>Use table-based positioning instead of CSS position
Production guidance for position
position is a CSS property. Across the email client matrix, 3 of 15 tracked clients support it fully, 12 only partially, and 6 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 position 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.