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.
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 ignoredWhy: 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-radiusUnpredictableWhy: 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 ignoredWhy: 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> blocksUnpredictableWhy: 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)UnpredictableWhy: 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)UnpredictableWhy: 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:
<!-- 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>// 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 emailFree plan, 30 previews/day
- •Microsoft Learn: Word HTML and CSS Rendering Capabilities in Outlook
- •Can I Email: CSS support comparison across Outlook Windows and Web
- •Emailens Test Suite: Outlook 2016-2024 Desktop MSO Simulation Engine
Reviewed by Philippe KAM · Last updated: Sep 6, 2026
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.