Skip to main content

Our email CSS engine is open source. Give it a star on GitHub 

Emailens

Gmail Android email CSS: what breaks, and what to write instead

109 of 300 features work in Gmail Android · 66 partial · 125 not supported. Its closest client, Gmail iOS, agrees on 273 of the 300 features both are tested on.

Works 109 · Partial 66 · Not supported 125 · Untested 0 · of 300

Gmail Mobile · mobile · prefers-color-scheme: not supported

The checker needs a computer screen.

See what breaks ↓

Gmail Android opens with a free account.

A free account opens all 21 clients and keeps your checks for 7 days. Create a free account →

@emailens/engine 0.18.22 · data last changed 10 Nov 2026

Where Gmail Android is the outlier

1 feature work in at least 14 of the other 20 clients and is not supported here.

So an email that looks right in most clients can reach your reader in Gmail Android without them.

What to write instead

10 features Gmail Android does not fully support have a written fix. See them in the table ↓

visibility

The fix for Gmail Android

Use conditional comments or remove hidden content

after
<!-- For screen readers, use font-size: 0 trick -->
<div style="font-size: 0; max-height: 0; overflow: hidden;
            mso-hide: all;" aria-hidden="true">
  Preheader text
</div>
Show the original
before
<div style="visibility: hidden;">
  Hidden content for screen readers
</div>

The checker needs a computer screen.

text-shadow

The fix for Gmail Android

Use font-weight or border-bottom as alternatives to text-shadow

after
.glow {
  /* text-shadow is not supported in Gmail, Outlook, Yahoo.
     Use font-weight or letter-spacing for emphasis instead. */
  font-weight: bold;
  letter-spacing: 0.5px;
}
Show the original
before
.glow {
  text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
}

The checker needs a computer screen.

transform

The fix for Gmail Android

Pre-render transformed states as images or use table layout

The engine still flags this in the fix: An image points to an address no inbox can load (rotated-content.png), so Gmail Android shows a broken image instead.

after
<!-- Pre-render rotated content as an image -->
<img src="rotated-content.png" width="200" height="200"
  alt="Rotated content"
  style="display: block; border: 0;" />
Show the original
before
<div style="transform: rotate(45deg);">
  Rotated content
</div>

The checker needs a computer screen.

Paste your email and see what Gmail Android does to it.

The checker needs a computer screen.

Dark mode in Gmail Android

How to target Gmail Android

Selectors that single out Gmail Android, from the community list the engine ships (howtotarget.email). Copy one and replace .your-class-name.

css
div > u + .body .your-class-name {
  /* Replace this comment with your styles */
}

Gmail changes the doctype to <u></u>.

No longer works (2)
css
_:-webkit-full-screen, :root .your-class-name {
  /* Replace this comment with your styles */
}
css
@media screen and (pointer) { 
  .your-class-name {
    /* Replace this comment with your styles */
  }
}

Build one for several clients →

Before you send to Gmail Android

  • Test with both a Gmail address and a non-Google address in the app. They are the two renderings your Android Gmail readers actually get.
  • Check the layout at common Android widths (360px, 412px) with the media queries removed, since that is what non-Google accounts see.
  • Keep buttons at least 44px tall for comfortable tapping.

Every feature in Gmail Android

Show

HTML Elements · 19 of 48 not supported or partial here

HTML Attributes · 10 of 22 not supported or partial here

HTML & Email Structure · 2 of 8 not supported or partial here

CSS At-Rules · 9 of 10 not supported or partial here

Pseudo-Elements · 6 of 6 not supported or partial here

Pseudo-Classes & Selectors · 34 of 34 not supported or partial here

CSS Functions · 7 of 8 not supported or partial here

CSS Properties · 104 of 164 not supported or partial here

How Gmail Android renders email

Gmail on Android applies the same sanitising as Gmail on the web for Google accounts: a <style> block in the <head> is kept and media queries other than height-based ones work. The difference is accounts. When the app is used to read a non-Google account, such as an Outlook.com or Yahoo address, it drops <style> blocks, media queries and flexbox, and only inline styles reach the reader.

<style> blocks
Kept in the <head> for Google accounts. Removed for non-Google accounts read in the app, so anything critical must also be inline.
@media queries
Supported for Google accounts, except height-based queries. Ignored for non-Google accounts, so a layout must still work at phone width without its breakpoints.
@font-face
Not supported. Always end a font stack in a system font.
  • Because the Gmail app also reads other providers' mail, one audience can see two renderings: Google accounts get your <style> block and breakpoints, everyone else gets inline styles only. Fluid widths (percentage widths with a max-width) are the layout that holds up in both.
  • Flexbox is supported for Google accounts and not for others, for the same reason. Tables remain the safe structure.
  • Touch is the only input, so hover states never show. Buttons must look complete in their resting state.

Get new email CSS fixes by email.

caniemail (MIT) via @emailens/engine 0.18.22 · data last changed 10 Nov 2026