Skip to content

Body Container

Once the head boilerplate is in place, the body wraps everything you can see: a <body> reset, an outer <div> for direction control, and a single outermost <table role="presentation"> that hosts every row of the email.

Paste this directly under the closing </head> tag.

body-container.html
<body style="padding:0 !important; margin:0 !important; display:block !important; min-width:100% !important; width:100% !important; background:#ffffff; -webkit-text-size-adjust:none;">
<div style="display:block !important; min-width:100% !important; width:100% !important; background:#ffffff; -webkit-text-size-adjust:none; direction: ltr !important;">
<!-- Main -->
<table role="presentation" width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#ffffff"
style="border-spacing:0; border-collapse:collapse; direction: ltr;">
<!-- Header / Body / Footer rows go here -->
</table>
</div>
</body>

Switch direction: ltr to direction: rtl on both the wrapper <div> and the main <table> for right-to-left layouts. See RTL Support for the full reversal pattern.

Outlook adds its own padding to every <td> if you don’t explicitly zero it out. Set it inline on every cell, even ones that have no padding:

<td style="padding:0;">…</td>

When you DO want padding, override it on that cell only:

<td style="padding: 24px 16px;">…</td>

For vertical breathing room between sections, use spacer <tr> rows with mso-line-height-rule:exactly so Outlook for Windows renders the height pixel-perfect:

<!-- 24px vertical spacer -->
<tr>
<td style="line-height:24px; height:24px; mso-line-height-rule:exactly;">
&nbsp;
</td>
</tr>

For horizontal spacers (inside a row of side-by-side cells), use a spacer <td> with width + font-size:

<td style="width:16px; min-width:16px; font-size:0; line-height:0;">&nbsp;</td>

The &nbsp; is required — empty cells collapse in some clients.

The main table now needs three rows: Header, Body, Footer. Each is a self-contained <tr> that nests its own table.