html在outlook桌面端显示有缝隙的问题
2026年1月4日
·背景
有一个邮件编辑器,类似一个小的建站工具,左边组件,中间渲染,右边属性编辑。可以复制、导出为html,这个html可以直接用来发邮件
场景
用户拿到这个html,通过outlook桌面端可以进行导入整个html
问题:用户在平台依次往下放了几张图片,在平台和浏览器预览是正常的。但是导入到outlook中,两张图片之间不连续,会有一段白的空隙
原因
Outlook 使用 Microsoft Word 渲染引擎:
1. Line-height 问题
Word 引擎会将 <img> 视为行内元素,并根据父元素的 line-height 在图片下方添加空间。
bug.html 中的问题代码:
<td style="width:600px;">
<img ... style="...font-size:13px;" ...>
</td><td>缺少line-height:0图片的
font-size:13px会导致 Outlook 添加额外行高
2. Display:block 不完全生效
虽然图片设置了 display:block,但 Word 引擎不完全遵守这个规则。
3. 表格间距属性
Outlook 需要显式的 mso-line-height-rule:exactly 来强制精确行高控制。
解决
在 MJML 生成阶段为图片组件附加一个固定
css-class,并在<mj-head>中注入 Outlook 专用样式。通过条件注释确保样式只在 Outlook 生效。仅对图片组件生效,避免误伤文本单元格
<mj-raw>
<!--[if mso]>
<style>
.outlook-image-fix { line-height:0; mso-line-height-rule:exactly; }
.outlook-image-fix td { line-height:0; mso-line-height-rule:exactly; }
.outlook-image-fix img { display:block; line-height:0; }
</style>
<![endif]-->
</mj-raw>`