Skip to main content
Emailens
Blog
PK
·Founder, Emailens
Feb 24, 2026·7 min read

Why Outlook Ignores Your CSS (and What to Do About It)

Outlook's rendering engine is Microsoft Word. That sentence explains everything, and nothing feels right once you know it. Here's exactly what breaks, why, and the fixes that actually work in React Email, MJML, and raw HTML.

Quick Answer: The Outlook MSO Rule

Outlook on Windows (2007-2024) renders emails using Microsoft Word rather than a web browser. Modern CSS properties like display: flex, grid, border-radius, and background-size are completely ignored. To achieve robust cross-client designs, wrap modern layouts in conditional ghost tables (<!--[if mso]>) and use VML shapes for rounded buttons.

The root cause

Microsoft Outlook for Windows (2007 through 2021) renders HTML emails using the same engine that powers Microsoft Word, not a browser engine. This was a deliberate decision in 2007 when Microsoft replaced the Internet Explorer rendering engine with Word's. It has never been reversed.

The consequence: any CSS property that Word doesn't understand is silently dropped. No error, no fallback, no warning. The email just looks broken and you only find out if you test.

Outlook on Mac (2019+) and the web version of Outlook behave differently and have much better CSS support. The problematic clients are Outlook 2007-2021 on Windows, and mobile Outlook apps, which account for roughly 4% of global email opens, but often a much higher percentage in enterprise and B2B contexts where Windows is dominant.

The six things that break most often

These are ordered by how often they cause visible breakage, in our testing across production email templates.

display: flex / gridSilently ignored

Why: Outlook uses Microsoft Word's rendering engine (since 2007). Word has no concept of flexbox or grid. It simply ignores both declarations.

Fix: Use tables. In MJML, <mj-section> and <mj-column> compile to tables automatically. In React Email, use <Row> and <Column>.

border-radiusUnpredictable

Why: Word's rendering engine doesn't support CSS border-radius. The property is parsed but has no effect on rendered output.

Fix: Use a VML (Vector Markup Language) fallback inside conditional comments, or accept that Outlook will render sharp corners.

background-imageSilently ignored

Why: Outlook strips CSS background images on most elements. Images must be placed as actual <img> tags or use VML for background images on <td> elements.

Fix: Use <v:rect> VML inside <!--[if mso]> conditional comments for hero background images in Outlook.

<style> blocksUnpredictable

Why: Outlook on Windows respects <style> blocks, but Gmail strips them entirely, and this inconsistency trips up many developers who forget to test both.

Fix: Inline all critical styles. Use a tool that inlines automatically, or restrict <style> to non-critical declarations only.

margin: auto (centering)Unpredictable

Why: Outlook respects margin: auto on block elements in some contexts but ignores it on <td> elements and in others. Centering behaviour is unpredictable.

Fix: Use align="center" on the containing <table> element, not CSS margin on inner elements.

Web fonts (@font-face)Unpredictable

Why: Outlook on Windows and mobile Outlook apps do not support @font-face or Google Fonts. Only system fonts are guaranteed to render.

Fix: Always include a system font fallback stack: font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif

What the fix looks like in practice

The most common mistake is trying to use flexbox for layout. Here's what to do in MJML and React Email instead:

MJML
17 lines
<!-- This breaks in Outlook -->
<mj-section>
  <mj-column>
    <mj-text css-class="hero">Welcome!</mj-text>
  </mj-column>
</mj-section>

<mj-style>
  .hero { display: flex; align-items: center; }
</mj-style>

<!-- Do this instead , MJML compiles to tables automatically -->
<mj-section>
  <mj-column vertical-align="middle">
    <mj-text>Welcome!</mj-text>
  </mj-column>
</mj-section>
React Email
17 lines
// This breaks in Outlook
<div style={{ display: 'flex', gap: '16px' }}>
  <img src="logo.png" />
  <p>Welcome to our app</p>
</div>

// Do this instead
import { Row, Column, Img, Text } from '@react-email/components';

<Row>
  <Column>
    <Img src="logo.png" width="48" height="48" />
  </Column>
  <Column>
    <Text>Welcome to our app</Text>
  </Column>
</Row>

The reliable approach

Rather than remembering every Outlook quirk by hand, the reliable approach is to test every email against Outlook before it ships. Emailens runs your HTML, MJML, or React Email source through a per-client transformation layer, flags every property that Outlook will ignore, and generates fix snippets in the same framework you're already using.

The compatibility score for Outlook is almost always the lowest of the 21 clients, which is why it's worth fixing first. If you already scoped Gmail-only CSS with u + .body, a matrix that still blames Outlook is wrong; see email client targeting CSS. For complex multi-column layouts, see our guide to Outlook ghost tables, check our deep-dive into Outlook CSS fallbacks for border-radius and gradients, master dark mode color shifting with our complete Dark Mode Email CSS guide, or explore our production-ready Outlook email templates.

Frequently Asked Questions

Why does Outlook on Windows ignore modern CSS like flexbox and grid?

Since 2007, Microsoft Outlook for Windows uses the Microsoft Word rendering engine (MSO) to parse and display HTML emails. Word was designed as a print document processor and has no layout engine support for CSS flexbox, grid, calc(), or position properties.

Does the 'New Outlook for Windows' fix these CSS issues?

The 'New Outlook for Windows' (a web-based PWA wrapper) runs on modern Chromium web technologies and supports standard modern CSS. However, corporate IT environments and millions of enterprise users remain on Classic Desktop Outlook 2016-2024, requiring MSO fallbacks.

How do I create rounded buttons in Outlook emails?

Because Outlook ignores CSS border-radius, you must use Microsoft Vector Markup Language (VML) with a <v:roundrect> element wrapped inside conditional comments (<!--[if mso]>), or use table cells with background images / square corner fallbacks.

Why does Outlook add mysterious 1px lines across table columns?

This is Outlook's 1px horizontal line bug caused by display scaling (e.g. 125% or 150% DPI on high-res Windows monitors). Fix it by ensuring all font-sizes and line-heights are even pixel integers and setting style='border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt;' on all tables.

See exactly what Outlook breaks in your email

Paste your email and get a full compatibility report across 12 clients, including Outlook-specific fix snippets for your framework.

Preview your email

Free plan, 30 previews/day

Sources & Primary References:

Reviewed by Philippe KAM · Last updated: Sep 6, 2026

PK

Philippe KAM

Founder & Lead Engineer at Emailens

Building next-generation email preview and QA infrastructure for developers. Focused on reverse-engineering rendering engines across Outlook (Word MSO & New Outlook), Gmail, and Apple Mail to eliminate email rendering bugs before dispatch.