Outlook 2007完全忽略表格单元格中元素的宽度和高度。

3
我正在尝试制作HTML电子邮件模板,并努力使其在Outlook中看起来合适,但我快要崩溃了。
我有一个基本的表格设置:三列,所有内容都在中间的一列中。两侧的列只是为了留出空间。该表格的宽度为100%,因此它占据了阅读窗口的整个宽度。因此,基本上是这样的(省略了所有特定于Outlook的东西):
<table>
    <tbody>
        <tr>
            <td class="leftsidespacer"></td>
            <td class="maincontent">
                <p>All the content here</p>
                <div class="thisisabox">
                    <p>Something here too</p>
                </div>
            </td>
            <td class="rightsidespacer"></td>
        </tr>
    </tbody>
</table>

在任何普通的电子邮件客户端中,设置中间列的宽度就可以了。但是Outlook 2007(以及可能其他版本)会将所有三列合并在一起,使中间列占据整个正文宽度的100%。基本上,给表格单元格设置宽度没有效果。
好吧,那我就退回到非常老式的方法,在空单元格中添加图像来强制它们具有一些宽度。丑陋而愚蠢,但至少它还有点用。
现在我面临的问题是,无论我做什么,放在td中的任何元素始终都是单元格宽度的100%和内容高度。这个问题在网上神秘地没有被提到。
例如,上面示例中带有类“thisisabox”的div始终只有一行文本高度,而且宽度总是表格单元格的100%,即使我这样定义:
<div width="200" height="200"
    style="display: block;
    width: 200px;
    height: 200px;
    background: red;">

我的直觉告诉我这段代码应该会生成一个200×200像素的红色框,但实际上并没有。它完全被忽略了。

据我所知,我的样式表中没有任何可能影响它的内容。以上HTML片段的所有样式声明只有这些:

table {
    width: 100%;
    margin: 0;
    padding: 0;
}

table, tr, td {
    border-collapse: collapse;
}

td {
    padding: 35px 0;
    border: 0;
}

在发送之前,Premailer API会将其内联并转化为HTML属性,因此不是因为样式仅在中声明。

有没有一种方法可以使Outlook注意表单元格内元素的指定宽度和高度?

或者我错过了一些明显的东西,这导致Outlook以这种令人恼火的方式运作?

2个回答

0

Outlook与div不兼容,并且在某些情况下忽略padding

解决这个问题的方法很简单,而且适用于任何电子邮件客户端:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled</title>
</head>
<body>

<table width="200" height="200" cellpadding="0" cellspacing="0">
<tbody>
    <tr>
        <td class="leftsidespacer" width="30"></td>
        <td class="maincontent" width="140">
            <p>All the content here</p>
            <div class="thisisabox">
                <p>Something here too</p>
            </div>
        </td>
        <td class="rightsidespacer" width="30"></td>
    </tr>
</tbody>
</table>

</body>
</html>

我会创建一个样式表,并添加大多数现代电子邮件客户端都能识别的值,但Outlook桌面版本(如2007-2016)需要一些内联辅助功能才能正常运行。

编辑:Outlook 2007中的基本表格

这是在上面发布的没有额外CSS的Outlook 2007中的基本表格:

Outlook 2007 Base Table

这张图片来自Litmus。

我只使用了我上面发布的代码。如果你没有看到这个,那么你的CSS或HTML中有一些问题。

祝你好运。


1
Outlook 2007通常不会忽略填充(尽管它似乎相当一致地忽略边距声明),不是的。这里td元素上的填充效果很好。我遇到的问题是,无论单元格内的元素是div还是其他东西,其声明的宽度和高度都统一被忽略。您在此处的示例执行了不同的操作(使整个包含表格为200×200而不是单元格内的框),但即使嵌套表格也不起作用:表格的宽度变为包含单元格的100%。 - Janus Bahs Jacquet
我在Litmus上发布了我在Outlook 2007中运行的代码,并在我的回答中附上了结果的图片。我真正理解Outlook带来的困扰。希望这有所帮助。 - gwally
哦,还有@JanusBahsJacquet,虽然无关紧要,但是你在Shelob上的回答真是太棒了。她确实不是任何人的宠物。 - gwally

0

这里有个你可以尝试的东西。

Code:

<table cellpadding="0" cellspacing="0" width="200" height="200" bgcolor="#000000">
<tbody>
    <tr>
 <td height="200"></td>
        <td valign="top" style="color:#ffffff;">
            All content here

        </td>
    </tr>
</table>

Outlook版本1803的结果(测试日期:2018年4月20日)

enter image description here

我所做的是给表格元素和其中一个单元格添加了高度。你可以在左列中填充一个空白图像,或者保持原样。
注意:如果你愿意,你可以不使用左列,但请添加高度。
希望这是你寻找的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接