Email production

Why your email looks broken in Outlook — and the rules that fix it

Outlook for Windows does not render your email with a browser. It renders it with Microsoft Word. This is the list of what Word throws away, in the order it bites — and the table-based patterns that survive it.

17 August 2026 10 min read Backed by the rules in our Email QA tool

1. Outlook is Word, not a browser

Every other client you test in is a browser engine wearing a mail client's clothes. Gmail's web app, Apple Mail, Yahoo, Outlook.com — all of them parse your HTML with something descended from a rendering engine built for the web, then strip a documented list of things they do not allow.

Classic Outlook for Windows is different in kind, not degree. Since Outlook 2007, Microsoft has rendered HTML email using the Word layout engine — the same one behind .docx. It was a deliberate choice about security and authoring consistency, and the practical consequence is that your email is being laid out by a word processor that has never heard of the last fifteen years of CSS.

The one-line version

If a layout technique feels modern, Word does not have it. Flexbox, grid, position, max-width, border-radius, box-shadow, CSS background images, SVG — all absent. What Word does have is tables, fixed widths, and flow.

2. Which Outlook are we talking about?

This is where most "but it works for me" arguments come from. "Outlook" is at least four different renderers sharing one brand, and only some of them are the problem.

The same brand name, four different rendering engines. Only the first row is the Word engine.
ClientEngineWhat it means for you
Outlook 2007–2019 & classic Microsoft 365 desktop (Windows)Microsoft WordThe hard one No modern CSS. Build for this and the rest follow.
"New Outlook" for WindowsWeb (Edge/Chromium-based)Behaves like webmail Renders much closer to Outlook.com.
Outlook.com (browser)WebBehaves like webmail Also does its own dark-mode colour swapping.
Outlook for Mac / Outlook mobileWebKit-basedBehaves like a browser Rarely the source of a rendering complaint.

So when a client says "it's broken in Outlook", the useful first question is which one. If the screenshot shows square corners where you drew rounded ones and Times New Roman where you specified a brand font, you are looking at the Word engine — and everything below applies.

3. The properties Word silently drops

Nothing errors. Nothing warns you. The declaration is simply not applied, and your email renders as though you never wrote it. These are the nineteen properties our Outlook profile strips, because the Word engine does not honour them:

The drop list our Email QA tool applies when it renders the Outlook profile — each entry is a property the Word engine ignores.
PropertyWhat Outlook does instead
border-radiusDraws square corners. Your pill button becomes a rectangle.
box-shadowNo shadow. Cards lose their separation from the background.
max-widthIgnored — only fixed width attributes rule. This is the big one.
min-width / max-height / min-heightIgnored.
positionNo CSS positioning at all — tables and normal flow only.
floatIgnored on most elements. Two columns become one.
opacityIgnored. A 50%-tinted overlay renders at full strength.
transformIgnored. Rotated or scaled elements sit flat.
transition / animationIgnored. There is no motion in the Word engine.
filterIgnored.
text-shadowIgnored.
object-fitIgnored. Images do not crop to their box.
gapIgnored — it belongs to layout modes Word does not have.
overflowIgnored. Nothing is clipped or scrolled.
background-size / background-positionIgnored without a VML fallback (see §6).

Read that list again with one question in mind: how much of my layout depends on any of these? If the answer is "the whole card component", that component needs a table-based twin for Outlook.

4. The Times New Roman trap

This is the single most reported Outlook surprise, and the mechanism is worth understanding because the fix is one line.

Outlook resolves font-family against fonts Word knows. Our Outlook profile keeps only these, and drops everything else from the stack:

Arial, Helvetica, Helvetica Neue, Verdana, Tahoma, Georgia, Times, Times New Roman, Courier, Courier New, Trebuchet MS, Segoe UI, Calibri, Cambria, Garamond, Book Antiqua, Palatino — plus the generic families sans-serif, serif, monospace and cursive.

Now the trap. If your stack is font-family:'Brand Sans', 'Brand Sans Fallback' and neither name survives, Outlook does not pick a reasonable default sans-serif. It renders Times New Roman. Your clean modern email arrives looking like a 1997 memo, and only in Outlook — so it passes every other check you ran.

/* breaks in Outlook — no Word-safe name anywhere in the stack */
font-family: 'Brand Sans', 'Brand Sans Text';

/* survives — the last two names are always resolvable */
font-family: 'Brand Sans', Arial, Helvetica, sans-serif;

Web fonts are a separate matter: Outlook, Gmail and Yahoo do not load @font-face or fonts.googleapis.com at all. Declare them if you like, but the fallback is what most of your list will actually see — so choose it as deliberately as you chose the brand face.

5. Layout: why your div collapsed

Three separate behaviours combine into the classic "my beautiful two-column layout stacked and lost all its spacing" bug report:

  1. display:flex and display:grid fall back to block. Every child stacks full width, in source order. No columns, no alignment, no gap.
  2. Padding on a <div>, <p> or <span> is dropped. Word applies padding to table cells. Your careful 24px interior spacing vanishes and the text runs to the edge.
  3. max-width is ignored. A fluid container that relies on max-width:600px to stop growing will happily fill the whole reading pane.

The rules that survive all three are unglamorous and completely reliable: lay out with nested tables, set widths with the HTML width attribute as well as CSS, and put your padding on <td> elements.

<!-- padding on the div: gone in Outlook -->
<div style="max-width:600px;padding:24px;">…</div>

<!-- padding on the cell, width declared twice: renders everywhere -->
<table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0"
       style="width:600px;">
  <tr><td style="padding:24px;">…</td></tr>
</table>

role="presentation" is not decoration. It tells screen readers this table is a layout device, not data — see the accessibility article for why that one attribute changes how the whole email is announced.

6. Background images need VML

A CSS background image is not a background image to Word. Both background-image:url(…) and the url() half of the background shorthand are dropped outright. If you set a hero image as a background and put your headline on top of it, Outlook shows the headline on a blank area — and if you never set a background colour, that headline may be white text on white.

The fix is VML: Vector Markup Language, an old Microsoft vector format the Word engine still draws. Wrapped in an Outlook-only conditional, it paints the image behind your content for Outlook while every other client uses your normal CSS.

<td background="hero.jpg" bgcolor="#0d3f9e"
    style="background-image:url('hero.jpg');background-size:cover;">
  <!--[if gte mso 9]>
  <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true"
          stroke="false" style="width:600px;height:320px;">
    <v:fill type="frame" src="hero.jpg" color="#0d3f9e" />
    <v:textbox inset="0,0,0,0"><![endif]-->
    <div>…your headline and CTA…</div>
  <!--[if gte mso 9]></v:textbox></v:rect><![endif]-->
</td>

Note the bgcolor and the color on the fill. Always set a solid colour behind a background image anyway — it is what shows when the image is blocked, which in Outlook is the default state.

A limit worth knowing

Our Outlook preview activates VML the way Outlook does, but a browser cannot draw VML shapes — so an email that leans heavily on it may show blank areas in the simulated view where real Outlook would paint the image. The tool says so on screen when it detects v: markup, rather than letting you read a blank box as a bug.

7. Conditional comments and ghost tables

Conditional comments are the escape hatch that makes all of the above workable. They are ordinary HTML comments to every client except Outlook, which reads them as instructions:

  • <!--[if mso]> … <![endif]--> — content only Outlook sees. Every other client treats it as a comment and skips it.
  • <!--[if !mso]><!--> … <!--<![endif]--> — content everyone except Outlook sees.

The most common use is the ghost table: a fixed-width table that exists purely to give Outlook the container it needs, wrapped around a fluid div that every modern client uses instead. This is the fluid-hybrid pattern, and it is how one build serves both worlds.

<!--[if mso]>
<table role="presentation" width="600" cellpadding="0" cellspacing="0"><tr><td>
<![endif]-->

  <div style="max-width:600px;margin:0 auto;">…</div>

<!--[if mso]>
</td></tr></table>
<![endif]-->

Look closely at that markup and you will see the trap: the opening <table><tr><td> and its closing tags live in two different comments, with your content between them. The HTML is only valid once Outlook activates both blocks and the fragments meet. Get the count wrong — one opening ghost table, no closing block — and Outlook renders a broken tree while every other client, which ignored both comments, looks perfect.

Check the balance, not just the syntax

Because of that split, an unbalanced conditional is invisible in every preview you have. It is one of the checks the Email QA tool runs: it counts opening and closing mso blocks and flags a mismatch before the send, not after.

8. SVG, GIF and the first-frame rule

Two image behaviours catch people out on the day of the send.

SVG does not render in the Word engine — at all. An <img src="logo.svg"> becomes an empty box the size of its declared dimensions, showing the alt text if you wrote any and nothing if you did not. Inline <svg> markup is stripped too (Gmail strips it as well). Export logos and icons to PNG for email, however tempting a crisp vector is.

Animated GIFs show only their first frame in Outlook 2007–2019. Not a fallback image — literally frame one of the animation. If your GIF builds to the offer over four frames, Outlook subscribers see the setup and never the punchline. Put the offer, the price and the CTA in the first frame, always.

9. mso-hide and your preheader

One Microsoft-only property genuinely works, and it matters: mso-hide:all actually hides an element in Outlook. That is how hidden preheader text — the line that shows in the inbox list next to the subject, but not in the email body — stays hidden there.

A preheader typically stacks several tricks so that every client hides it: display:none, a zero or 1px font size, zero max-height, opacity:0, white-on-white colour, and mso-hide:all for Outlook. That combination is deliberate, not a bug — worth remembering when a checker flags white text on a white background. Ours deliberately does not: hidden blocks are excluded from the contrast check for exactly this reason.

10. The rules, as a checklist

Everything above, compressed into the things to actually do:

  1. Lay out with nested tables, not divs with flexbox. Add role="presentation" to every layout table.
  2. Declare width twice — the HTML width attribute and CSS width — and never rely on max-width alone.
  3. Put padding on <td>, never on the div or paragraph inside it.
  4. End every font stack with a web-safe face and a generic family, or Outlook hands you Times New Roman.
  5. Build buttons as tables, not as CSS-rounded links — square corners in Outlook are the giveaway that you did not.
  6. Give every background image a VML fallback and a solid bgcolor underneath it.
  7. Balance your [if mso] blocks, and count them — the failure is invisible outside Outlook.
  8. No SVG. First frame of every GIF carries the message.
  9. Inline your CSS. Outlook drops linked stylesheets and @import, and reads none of your @media queries on the desktop client.
  10. Check the email, not the design — run the built HTML through a pre-flight before it reaches a real inbox.
Check yours in the browser

Paste your HTML and see what Outlook keeps.

Our free Email QA tool runs 40 pre-send checks and flags the Outlook-unsupported CSS it finds, then re-renders your email through a rule-based Outlook profile that lists exactly what the Word engine stripped. Rule-based simulations built from documented CSS support — not real screenshots, and no substitute for a real render farm.

Run the email QA
What this is honest about

The Outlook, Gmail and dark-mode views are simulations: your HTML re-rendered through each client's documented CSS support, with a list of every change made. They are not screenshots from real copies of those clients, and they cannot be. Where you need true inbox rendering across dozens of real clients and devices, that is what Litmus and Email on Acid are for — we say the same on our comparison page.

Most creative processing happens locally in your browser. Files are uploaded only when you explicitly use sharing, transfer or team features.

Frequently asked questions

Why does my email look fine in Gmail but broken in Outlook?
Because they are not the same kind of renderer. Gmail uses a browser engine and strips a defined list of things (web fonts, position, linked stylesheets). Outlook for Windows renders your HTML with the Microsoft Word layout engine, which has no modern CSS at all — no flexbox or grid, no border-radius, no max-width, no CSS background images without a VML fallback. A layout that leans on any of those looks correct everywhere else and collapses in Outlook.
Which versions of Outlook actually use Word?
The classic Windows desktop builds — Outlook 2007 through 2019 and the classic Microsoft 365 desktop client. "New Outlook" for Windows and Outlook.com render like webmail, and Outlook for Mac uses a WebKit-based engine. So "does it work in Outlook?" has more than one answer: build for the Word engine and the others follow, not the other way round.
Do I still need table-based layout in 2026?
For the classic Windows desktop client, yes. The Word engine lays out with tables and flow; display:flex and display:grid fall back to block, and padding on a <div> or <p> is dropped because Word pads table cells. The common compromise is a fluid-hybrid build: a <div> with max-width for every modern client, wrapped in an Outlook-only "ghost table" inside <!--[if mso]> conditionals.
Why did my font turn into Times New Roman?
Because nothing in your font stack was a font Word recognises. When Outlook cannot resolve any font in the list — a web font, or a stack of custom names with no web-safe fallback — it does not fall back to a sensible sans-serif; it falls back to Times New Roman. Always end every font-family with a web-safe face (Arial, Helvetica, Georgia, Tahoma, Verdana) and a generic family.
Can I test this without buying Litmus or Email on Acid?
You can catch the predictable problems for free. Our Email QA tool parses your HTML, flags the Outlook-unsupported CSS it finds, and re-renders the email through a rule-based Outlook profile that lists what the Word engine strips. It is a simulation built from documented CSS support — not a real screenshot from a real copy of Outlook. For true inbox rendering across dozens of real clients, Litmus and Email on Acid do something this does not replace.
Do these tools use credits or tokens?
No — never. Every tool is free to use with sample or daily limits, and PRO is a flat $25/mo or $199/yr for unlimited use of every tool: no credit packs, no top-ups, no per-use fees. See tools pricing.

Stop finding Outlook bugs in the inbox.

Run the pre-flight before you send — free, in your browser, nothing uploaded. Or hand the build to the team that codes these for agencies every day.