Skip to main content
CSS Properties

position

CSS property · 1 supported, 8 partial, 6 unsupported across 15 clients

Client Support

ClientCategoryEngineSupport
GmailwebmailGmail WebUnsupported
Gmail AndroidmobileGmail MobileUnsupported
Gmail iOSmobileGmail MobileUnsupported
Outlook 365webmailOutlook WebPartial
Outlook (New)desktopOutlook WebUnsupported
Outlook ClassicdesktopMicrosoft WordUnsupported
Outlook iOSmobileOutlook MobileUnsupported
Outlook AndroidmobileOutlook MobilePartial
Apple MaildesktopWebKitPartial
Apple Mail iOSmobileWebKitPartial
Yahoo MailwebmailYahooPartial
Samsung MailmobileSamsungPartial
ThunderbirddesktopGeckoSupported
HEY MailwebmailWebKitPartial
SuperhumandesktopBlinkPartial

Client-by-client behaviour for position

Fully supports position (1): Thunderbird.

Partial support (8): Outlook 365, Outlook Android, Apple Mail, Apple Mail iOS, Yahoo Mail, Samsung Mail, HEY Mail, 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

Unsupported

Use 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

Unsupported

Use 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

Unsupported

Use 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)

Unsupported

Use 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

Unsupported

Use 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

Unsupported

Use 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

Partial

Use 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

Partial

Use 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

Partial

Use 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

Partial

Use 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

Partial

Use 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

Partial

Use 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

Partial

Use 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

Partial

Use 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, 1 of 15 tracked clients support it fully, 8 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 15 clients

Preview rendering, catch CSS issues, and get actionable fixes — free.

Try Emailens Free

Support data last updated Apr 27, 2026 · synced from caniemail.com via @emailens/engine.