Outlook Ghost Table Generator
Builds columns that sit side by side on desktop and stack on phones with no media query, plus the ghost table Outlook Classic needs. Copy the code; nothing leaves your browser.
@emailens/engine 0.18.22 · data last changed 10 Nov 2026
600px container
Columns stack on their own below the container width. Outlook on Windows reads the ghost table instead.
<div style="max-width:600px;margin:0 auto;background:#ffffff;font-size:0;">
<!--[if mso]>
<table role="presentation" width="600" align="center" cellspacing="0" cellpadding="0" border="0"><tr>
<![endif]-->
<!--[if mso]><td width="200" valign="top"><![endif]-->
<div style="display:inline-block;width:100%;max-width:200px;vertical-align:top;font-size:16px;">
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td style="padding:20px 12px;background:#f6f4ef;font-family:Arial,sans-serif;color:#1a1a1a;line-height:1.5;">
Column 1
</td></tr>
</table>
</div>
<!--[if mso]></td><![endif]-->
<!--[if mso]><td width="200" valign="top"><![endif]-->
<div style="display:inline-block;width:100%;max-width:200px;vertical-align:top;font-size:16px;">
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td style="padding:20px 12px;background:#f6f4ef;font-family:Arial,sans-serif;color:#1a1a1a;line-height:1.5;">
Column 2
</td></tr>
</table>
</div>
<!--[if mso]></td><![endif]-->
<!--[if mso]><td width="200" valign="top"><![endif]-->
<div style="display:inline-block;width:100%;max-width:200px;vertical-align:top;font-size:16px;">
<table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0">
<tr><td style="padding:20px 12px;background:#f6f4ef;font-family:Arial,sans-serif;color:#1a1a1a;line-height:1.5;">
Column 3
</td></tr>
</table>
</div>
<!--[if mso]></td><![endif]-->
<!--[if mso]></tr></table><![endif]-->
</div>Change the layout and the checker opens it with you. Or open the checker and paste your whole email there: five clients, no account.
No signup · Five clients free, Outlook Classic included · All 21 with an account
Which clients need an account
Gmail Android, Gmail iOS, Outlook 365, Outlook iOS, Outlook Android, Outlook for Mac, Apple Mail, Yahoo Mail Android, Yahoo Mail iOS, Samsung Mail, Thunderbird, HEY Mail, Proton Mail, AOL Mail, Fastmail, Superhuman open with a free account.
The checker needs a computer screen.
Your next question
- Does max-width work in Outlook Classic?
Works in 20 of 21 · partial in 1
- Does display:flex work in Outlook Classic?
Works in 18 of 21 · partial in 2 · not supported in 1
Other free tools: HTML Email Checker · CSS Support Lookup · CSS Inliner · Dark Mode Preview · Outlook VML Background Generator · Bulletproof Button Generator · Client Targeting Generator · Email Rendering Playground
Run this check on every email
The open-source CLI checks every template for Outlook layout problems, free: npx @emailens/cli lint email.html
(CLI docs).
GitHub Action (Pro). Pro is $19 a month. The pre-send gate in CI, and the history behind every check. See the plans →
Questions
What is an Outlook ghost table?
A ghost table is a real <table> wrapped in <!--[if mso]> conditional comments, so only Outlook on Windows sees it. Outlook renders with Microsoft Word's engine, which ignores max-width and inline-block, so it needs fixed-width table cells to lay out columns. The ghost table gives it those without affecting any other client.
What is a fluid hybrid layout?
It's the technique this tool generates: columns built as display:inline-block boxes that are width:100% up to a max-width. On a wide screen they sit side by side; on a narrow screen they can't fit and wrap, so they stack, all without a single media query. The ghost table handles Outlook, and the inline-block boxes handle everyone else.
Why not just use a media query to stack columns?
Media queries work in most clients, but several, including some versions of Gmail and Outlook, strip or ignore them. The fluid hybrid pattern stacks based on available width alone, so it degrades gracefully everywhere. You can still layer media queries on top for finer control.
Why is there a font-size:0 on the container?
Inline-block elements render the whitespace between them as a visible gap. Setting font-size:0 on the container collapses that whitespace, and each column cell resets the font size for its content. It's a standard part of the hybrid pattern. Keep it.