【问题标题】:HTML email: top and bottom aligned contentHTML 电子邮件:顶部和底部对齐的内容
【发布时间】:2014-05-24 11:13:54
【问题描述】:

问题

我正在处理包含项目列表的 HTML 电子邮件,考虑到电子邮件客户端的限制,我想知道下面的设计是否可行。

目前,我有一个包含两个单元格的每个项目的表格(我们称之为item-table)。第一个单元格 (info-cell) 高度可变,包含项目信息和链接。第二个单元格 (image-cell) 包含一个图像,并且高度也是可变的。这个问题与第一个单元格有关。

我有一个嵌套在info-cell 中的表格,有两行,每行有一个单元格。我们将这些单元格称为info-cell-topinfo-cell-bottom

期望的结果

期望的结果是让info-cell-topinfo-cell 的顶部对齐,info-cell-bottominfo-cell 的底部对齐,而不管item-table 的高度如何。

我尝试过的

由于这是电子邮件标记,我无法在 image-cell 上使用 rowspan="2" 来解决此问题。虽然它适用于某些桌面电子邮件客户端,但对于移动客户端,图像单元格会完全消失。

我还尝试使用height="100%"height="1" 将内表拉伸到info-cell 的全高。

这两种解决方案在浏览器中看起来都很好,但不适用于电子邮件。

代码

也可以在 jsfiddle 上玩。

<table cellspacing="0" cellpadding="0" border="0" width="100%" style="border-top: 1px solid #bbbbbb;">
    <tbody>
        <tr>
            <td style="padding: 16px 0px; border-bottom: 1px solid #bbbbbb;">
                <table cellspacing="0" cellpadding="0" border="0" width="100%" height="1">
                    <tbody>
                        <tr>
                            <td style="vertical-align: top;">
                                <table cellspacing="0" cellpadding="0" border="0" width="100%" height="100%">
                                    <tbody>
                                        <tr>
                                            <td style="vertical-align: top;">
                                                <strong><a href="#" style="color: #000000; text-decoration: none;">Top aligned</a></strong>

                                                <br>Price
                                                <br>Size
                                                <br>
                                                <br>Wishlist comment - Phasellus sollicitudin consequat consectetur. Morbi a elit leo. Aliquam velit nibh, aliquet quis posuere at, vestibulum nec orci.
                                            </td>
                                        </tr>
                                        <tr>
                                            <td style="vertical-align: bottom;">
                                                <br>
                                                <br> <strong><a href="#" style="color: #000000; text-decoration: none;">Bottom aligned</a>
                                        &nbsp;&nbsp;&nbsp;<a href="#" style="color: #000000; text-decoration: none;">Add to cart</a>
                                        </strong>

                                            </td>
                                        </tr>
                                    </tbody>
                                </table>
                            </td>
                            <td width="120px" valign="bottom" style="padding-left: 16px;">
                                <div style="text-align: center; background: #ddd; height: 200px;padding: 30px 10px;box-sizing: border-box;"><b>Image with variable height</b>
                                    <br>
                                    <br>(may be shorter than left column)
                                </div>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
    </tbody>
</table>

请求

对于我可以做些什么来实现我想要的结果有什么建议吗?你能帮忙吗?

【问题讨论】:

  • 棘手的问题,但措辞得当。这并不理想,但由于您不会让height: 100% 跨电子邮件客户端工作,因此可能值得在您的infocelltop 内容之后添加一些&lt;br&gt;s。只要你有你的valigns,底部单元格中的内容就会粘在表格的底部,前提是infocelltop中的内容比旁边图像的高度长。
  • 是的,我有几个&lt;br&gt;s 作为两个部分之间的道具。不能保证info-cellinfo-image 长——实际上,在我的测试中,它只发生了大约一半的时间。我曾希望我的图表有助于说明这一点,但正如你所说......这很难解释。 ;)

标签: html css email html-email vertical-alignment


【解决方案1】:

将 td 中的 CSS vertical-align:top; 替换为:&lt;td valign="top"&gt;

valign 接受 top|middle|bottom 值,而align(水平)接受 left|center|right。

对于这种布局,您还需要行跨度或固定高度,因为嵌套表格(您的 2 行文本)不会推到容器单元格的最大高度。

这是一个同时应用 valign 和 rowspan 的基本示例:

<table width="600" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="400" height="200" valign="top" bgcolor="#EEEEEE">Align Top
    </td>
    <td width="200" rowspan="2" valign="middle" bgcolor="#777777">
      <img alt="image" src="" width="200" height="300" style="margin: 0; border: 0; padding: 0; display: block;">
    </td>
  </tr>
  <tr>
    <td width="400" height="300" valign="bottom" bgcolor="#CCCCCC">Align Bottom
    </td>
  </tr>
</table>

它有助于在行跨单元格上设置高度,因为 Outlook 有时会猜测并弄乱您的行跨断点。更多关于 here 的信息(虽然它指的是 colspan,但同样适用)

【讨论】:

  • 嗨,约翰,感谢您的回答,但在我的问题中,我澄清说必须允许我的单元格使用流体高度(阅读:无法修复),并且 rowspan 不是有效的解决方案(它会破坏在一些电子邮件客户端中,而不仅仅是 Outlook)。我注意到使用 valign 属性而不是 vertical-align - 干杯!
  • 它们是您想要做的仅有的 2 个选项,因此您需要选择一个。由于您不想修复,html 电子邮件中完成您所追求的唯一方法是使用行跨度。在我的示例中,我在跨单元格上设置了高度,但您可以将它们视为最小高度 - 如果需要,您的文本会使它们更高。删除高度也可以满足您的需求。 Rowspan 服务于所有主要客户。您可以在 Litmus 中查看我的示例 - 它适用于除黑莓以外的所有设备。
  • 固定高度和行跨度都不是一个选项。我的问题是“这可能吗”,所以答案似乎是否定的。不过感谢您的调查!绝大多数情况下,社区警告要避免行跨度,所以我也会这样做:stackoverflow.com/a/2229940/1846329
  • 我刚刚在 Litmus 中对其进行了测试,它确实有效 - 证明“这可能”是真的。该帖子中提到的“奇怪的间距问题”很可能与 Outlook 有关。我在the link I included 中解决了这种情况(虽然它关注的是colspan,但同样的怪癖也适用于rowspan)。当您调整顶部/底部时,可能的间距问题可能与您的场景无关。此外,Stack Overflow 社区中的大部分人都对 html 电子邮件有误解——它们来自网络背景。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多