【问题标题】:HTML Emails: The Use Case for Nested TablesHTML 电子邮件:嵌套表的用例
【发布时间】:2022-02-10 15:34:41
【问题描述】:

我对 HTML 电子邮件开发相对较新,我正试图围绕嵌套表格,特别是何时嵌套表格、创建 tr 标记对或添加 td 标记对。 下面是来自位于此 URL 的 HTML 电子邮件的真实示例的代码 sn-p,以说明我的困惑的基础:https://reallygoodemails.com/emails/save-30-for-our-winter-sale/live

<body style="margin:0; padding:0; min-width:100%; background-color:transparent;">
    <div style="display:none;font-size:1px;line-height:1px;max-height:0px;max-width:0px;opacity:0;overflow:hidden;mso-hide:all;">Our Winter Sale gets better</div>
    <div style="display:none;font-size:1px;line-height:1px;max-height:0px;max-width:0px;opacity:0;overflow:hidden;mso-hide:all;">&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;
      &nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;</div>
    <table width="100%" class="body" cellpadding="0" cellspacing="0" border="0" role="presentation">
      <tr>
        <td style="background-color:transparent;">
          <table width="100%" class="Wrapper" cellpadding="0" cellspacing="0" border="0" role="presentation">
            <tr>
              <td align="center" style="background-color:transparent; border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none; border-top-width: 0px; border-bottom-width: 0px; border-right-width: 0px; border-left-width: 0px; border-color: #222222;">

                <!--[if(gte mso 9)|(IE)]><table width="600" cellpadding="0" cellspacing="0" border="0" style="width: 600px;" role="presentation"> <tr> <td align="center"><![endif]-->
                <table width="100%" class="Container" cellpadding="0" cellspacing="0" border="0" style="max-width:600px;" role="presentation">
                  <tr>
                    <td align="center" style="background-color:#000000">
                      <table width="100%" class="Column-1 " cellpadding="0" cellspacing="0" border="0" role="presentation">
                        <tr>
                          <td align="center">
                            <table width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation">
                              <tr class="text">
                                <td style="padding: 10px 10px 10px 10px; border-width: 0px; border-style: none; font-family: 'soehne-web-buch', Arial, Helvetica, sans-serif; font-size: 12px; font-weight: normal; color: #222222; line-height: 1.5; text-align: center">
                                  <p style="margin: 0px; padding: 0px;"><span style="color:rgb(255, 255, 255); font-family:neusanextpro-condensedlight,arial,helvetica,sans-serif"><span style="letter-spacing:2px"><i><a href="http://enews.saxxunderwear.com/q/R9jim0BXYC7rm0Xq39_vyPg_M10yCZNUNEHZcLOJbWF0dGhld0ByZWFsbHlnb29kZW1haWxzLmNvbcOIPt_chqcYdIroPVYZqAC1RDbf1A" style="color:#ffffff;text-decoration:none;" target=
"_blank" title="SET UP AN ACCOUNT TO BE ELIGIBLE FOR FREE SHIPPING" data-link-name="WINTER SALE: 30% OFF.">WINTER SALE: 30% OFF.</a>&nbsp;FREE SHIPPING AVAILABLE WITH AN ACCOUNT. <a href="http://enews.saxxunderwear.com/q/fyo89AKFHe5xD0XpfKsqmahpuN9CevUgh5UZcOJbWF0dGhld0ByLZWFsbHlnb29kZW1haWxzLmNvbcOIQzNjZV5Pcr0eVO1_pLw6d0szaw" style="color:#ffffff;text-decoration:underline;" target="_blank" title=
"" data-link-name="LEARN MORE"><u>LEARN MORE</u></a><a href="http://enews.saxxunderwear.com/q/YSTmkctvfNwLo0XGaNue3OjIVQObNHs2jWDZcOJbWF0dLGhld0ByZWFsbHlnb29kZW1haWxzLmNvbcOIlmZZNFUuc7bp4ycY1kS-E55mUQ" style="color:#ffffff;text-decoration:underline;" target="_blank" title="" data-link-name="."><u>.</u></a></i></span></span></p>
                                </td>
                              </tr>
                            </table>
                          </td>
                        </tr>
                      </table>
                    </td>
                  </tr>
                </table>

这里有 6 个表,虽然我了解表 1 和表 6 的作用,但其他四个表令人困惑。

  • 表 2 看起来像是定义了页面的包装器。但是表 1 不是已经这样做了吗?如果有,为什么会在那里?

  • 表 3 和表 4 看起来都充当 HTML 电子邮件模板的主要容器,因为它们都定义了主表的宽度。但是我不明白为什么在表4指定相同宽度的600px的情况下还需要表3?

  • 表 5 有一个类“Column-1”,但在文档头部的样式表中没有一个标记为“Column-1”的类,那为什么会有呢?

除其他外,这些观察让我意识到,无论何时涉及嵌套表,HTML 电子邮件开发中都会存在大量变化。如此之多,以至于很难得出 table、tr 和 td 使用的一般经验法则。但据我所见:

  • 表格用于将页面切割成块并指定这些块的大小。
  • Tr 标记对用于定义 HTML 电子邮件模板中的单独部分。
  • Td 标记对用于内容放置(在子表中)或内容格式化(在父表中)。

谁能验证我的观察,或者更好的是,给我一个更详细的解释,说明何时在 HTML 电子邮件开发的上下文中创建新表、tr 或 td?

提前致谢!

附:如果我的任何观察有误,请纠正我。我真的很想尽我所能了解这个领域的细微差别。

【问题讨论】:

    标签: html html-table html-email


    【解决方案1】:

    我们今天仍然需要在 HTML 电子邮件中使用表格的唯一原因是……Outlook。更具体地说:Windows 上的 Outlook。更具体地说:Outlook on Windows,2007 及更高版本

    2007 年,Microsoft 决定将 Outlook 的渲染引擎从 Internet Explorer 更改为... Word。而且 Word 不太擅长渲染 HTML 和 CSS。它不仅只支持 2007 年之前的部分 CSS(所以没有 flexbox,没有border-radius 等),而且它通常在它应该支持的方面做得很差。例如,padding 属性有效,但不适用于 &lt;div&gt; 元素。

    随着时间的推移,我开始只在以下情况下使用表格:

    • 为元素设置固定宽度(使用&lt;table style="width:600px"&gt;)。
    • 并排设置两个元素(使用两个兄弟&lt;td&gt;)。
    • 设置paddingbackground-colorborder 样式。

    回到您的帖子和示例,您对表 1-6 的所有观察对我来说似乎都是正确的。代码看起来真的很臃肿(也有很多不必要的样式)。我的猜测是这来自这封电子邮件的构建过程。要么它是从需要所有这些表的先前模板手动编码的,而且开发人员没有足够的冒险精神来删除它们中的任何一个。或者,电子邮件可能是电子邮件构建器的输出(通常会添加太多代码,因为他们的目标是使用类似的输出代码覆盖尽可能多的选项)。考虑到文本中的代码(所有嵌套的&lt;span&gt;&lt;span&gt;&lt;u&gt;&lt;i&gt;&lt;a&gt;),第二个选项对我来说似乎更有可能。

    我尝试重新编码您在上面复制的示例。这就是它的样子。

    <!--[if mso]><table cellpadding="0" cellspacing="0" border="0" style="width:600px;" role="presentation"><tr><td><![endif]-->
      <div style="margin:0 auto; width:100%; max-width:600px;">
        <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%; background:#000;">
          <tr>
            <td style="padding:10px;">
              <p style="margin:0; text-align:center; letter-spacing:2px; color:#fff; font:italic 12px/18px neusanextpro-condensedlight, sans-serif;">
                <a href="https://www.example.com" target="_blank" style="color:#fff; text-decoration:none;">WINTER SALE: 30% OFF.</a>&nbsp;FREE SHIPPING AVAILABLE WITH AN ACCOUNT. <a href="https://www.example.com" target="_blank" style="color:#fff; text-decoration:underline;">LEARN MORE.</a>
              </p>
            </td>
          </tr>
        </table>
      </div>
      <!--[if mso]></td></tr></table><![endif]-->
    

    只需要两张表。第一个专门用于条件注释中的 Outlook。它用于设置容器的宽度。第二个用于background:#000;padding:10px

    如果您想了解有关 Outlook 和 HTML 电子邮件的更多信息,我写了以下帖子:

    我不能推荐足够多的 #emailgeeks Slack 及其 #email-code 频道,这里充满了热情的电子邮件开发人员互相帮助和学习。

    【讨论】:

    • 35 行代码的工作方式与 13 行相同。这就是我喜欢电子邮件并帮助解决代码问题的原因。 (你打败了我)
    【解决方案2】:

    通常在 HTML 中,使用表格来创建布局被认为是一种不好的做法,但我想在电子邮件 HTML 中它更容易接受,因为对旧应用程序的支持非常重要,因此使用现代布局工具是有问题的。

    简单地说,&lt;table&gt;&lt;/table&gt; 标签定义整个表格(或表格布局),&lt;tr&gt; 标签定义表格行,&lt;td&gt; 标签定义一行中的单个单元格。您永远不能将内容直接放在一行中,它始终是表格 -> 行 -> 单元格,即使它是只有一个单元格的行。

    单元格内的嵌套表格允许将该单元格切割成更小的区域。

    【讨论】:

    • 感谢您花时间编写答案,但我已经了解每个标签的基本功能。我的困惑在于它们在 HTML 电子邮件开发上下文中的用例,即何时应该编写一个新的嵌套表而不是一组新的 tr 或 td 标签。
    猜你喜欢
    • 2012-06-17
    • 2012-06-18
    • 2018-07-09
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多