本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

MJML.io 和电子邮件内联 CSS - 在元素级别是否需要重复样式?

发布于2021-11-02 11:44     阅读(428)     评论(0)     点赞(29)     收藏(1)


我正在为客户制作一个新的电子邮件模板。我希望它对移动设备友好,并且在尽可能多的电子邮件客户端/浏览器中看起来不错。在网上查看后,MJML.io 在研究这个主题时似乎非常受欢迎和推荐。

我要去 Bootstrap 查找电子邮件。我第一次使用 MJML。它非常漂亮,我只是想知道它生成的 HTML。

我想指出的是,我非常了解 HTML。我知道所有代码是什么和做什么。我不知道 100% 它对各种电子邮件客户端/浏览器的影响以及它们如何处理呈现电子邮件的 HTML。所以我可以把这段代码全部清理干净并删除额外的内联样式,让我的强迫症开心。但是,我不想破坏响应能力。即:我不想删除额外的样式并破坏 Outlook,或破坏 Yahoo 等。

下面是一个例子。有一张主桌,里面有另一张桌子。我明白了。那么整个表格只是一个空行?然后我们有一张有很多 TR 的表。我也明白了。但是,有一个p定义了样式标签,然后span在它内部设置了另一个样式。似乎是多余的。此外,它多次定义基本字体。

我可以通过在父级中设置字体系列、字体大小、字体颜色来简化table吗?或者是否有某种原因在最低元素级别定义了多次?我看着这个,我只想在正文、第一个 div 或主表中设置基本字体,p 用于文本设置,然后spans 用于我需要不同的大小、重量、颜色等。

我只是不知道这是否是电子邮件客户端兼容性魔术酱的一部分,我不想打破它,哈哈。CSS、头部等都是 MJML.io 的库存,我知道有些客户会去掉头部,这意味着那里的样式将被忽略。所以我没有包括它,只是下面重要的部分:

<body style="background: #bedae6;">
  <div style="background-color:#bedae6;">
    <!--[if mso | IE]>
    <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="600" align="center" style="width:600px;">
      <tr>
        <td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
    <![endif]-->
    <table role="presentation" cellpadding="0" cellspacing="0" style="font-size:0px;width:100%;" border="0">
      <tbody>
        <tr>
          <td>
            <div style="margin:0px auto;max-width:600px;">
              <table role="presentation" cellpadding="0" cellspacing="0" style="font-size:0px;width:100%;" align="center" border="0">
                <tbody>
                  <tr>
                    <td style="text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:20px 0px;padding-bottom:10px;padding-top:10px;">
                      <!--[if mso | IE]>
                        <table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td style="vertical-align:middle;width:600px;">
                      <![endif]-->
                      <div aria-labelledby="mj-column-per-100" class="mj-column-per-100 outlook-group-fix" style="vertical-align:middle;display:inline-block;direction:ltr;font-size:13px;text-align:left;width:100%;">
                        <table role="presentation" cellpadding="0" cellspacing="0" style="vertical-align:middle;" width="100%" border="0">
                          <tbody>
                            <tr>
                              <td style="word-break:break-word;font-size:0px;padding:10px 25px;padding-top:0px;padding-bottom:0px;padding-right:25px;padding-left:25px;" align="center">
                                <div style="cursor:auto;color:#000000;font-family:'Open Sans', Ubuntu, Arial, sans-serif;font-size:11px;line-height:22px;text-align:center;">
                                  <p style="font-size: 11px"><span></span>
                                  </p>
                                </div>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </div>
                      <!--[if mso | IE]>
                        </td></tr></table>
                      <![endif]-->
                    </td>
                  </tr>
                </tbody>
              </table>
            </div>
          </td>
        </tr>
      </tbody>
    </table>
    <!--[if mso | IE]>
      </td></tr></table>
    <![endif]-->
    <!--[if mso | IE]>
    <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="600" align="center" style="width:600px;">
      <tr>
        <td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
    <![endif]-->
    <div style="margin:0px auto;max-width:600px;background:#ffffff;">
      <table role="presentation" cellpadding="0" cellspacing="0" style="font-size:0px;width:100%;background:#ffffff;" align="center" border="0">
        <tbody>
          <tr>
            <td style="text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:20px 0px;padding-bottom:20px;padding-top:10px;">
              <!--[if mso | IE]>
                <table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td style="vertical-align:top;width:600px;">
              <![endif]-->
              <div aria-labelledby="mj-column-per-100" class="mj-column-per-100 outlook-group-fix" style="vertical-align:top;display:inline-block;direction:ltr;font-size:13px;text-align:left;width:100%;">
                <table role="presentation" cellpadding="0" cellspacing="0" style="vertical-align:top;" width="100%" border="0">
                  <tbody>
                    <tr>
                      <td style="word-break:break-word;font-size:0px;padding:10px 25px;padding-top:10px;padding-bottom:10px;padding-right:25px;padding-left:25px;" align="left">
                        <div style="cursor:auto;color:#000000;font-family:'Open Sans', Ubuntu, Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;">
                          <span style="display: block; font-size: 28px; font-weight: bold;">
                            <span style="font-size:14.666666666666666px;font-family:'Open Sans', Ubuntu, Arial, sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">
                              <strong>
                                <span style="font-size: 20px;">
                                  <span style="color: rgb(81, 45, 11);">Hello {{NAME}},</span>
                          </span>
                          </strong>
                          </span>
                          </span>
                        </div>
                      </td>
                    </tr>
                    <tr>
                      <td style="word-break:break-word;font-size:0px;padding:10px 25px;padding-top:10px;padding-bottom:10px;padding-right:25px;padding-left:25px;" align="left">
                        <div style="cursor:auto;color:#000000;font-family:'Open Sans', Ubuntu, Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;">
                          <p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;">
                            <span style="font-size:14.666666666666666px;font-family:'Open Sans', Ubuntu, Arial, sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;">
                              <span style="font-size: 18px;">This is the body of my email.</span>
                            </span>
                          </p>
                        </div>
                      </td>
                    </tr>
                    <tr>
                      <td style="word-break:break-word;font-size:0px;padding:10px 25px;" align="left">
                        <table cellpadding="0" cellspacing="0" style="cellspacing:0px;color:#000;font-family:'Open Sans', Ubuntu, Arial, sans-serif;font-size:13px;line-height:22px;table-layout:auto;" width="100%" border="0">
                          <tr>
                            <td style="padding: 0 15px 0 0;">1995</td>
                            <td style="padding: 0 15px;">PHP</td>
                            <td style="padding: 0 0 0 15px;">C, Shell Unix</td>
                          </tr>
                          <tr>
                            <td style="padding: 0 15px 0 0;">1995</td>
                            <td style="padding: 0 15px;">JavaScript</td>
                            <td style="padding: 0 0 0 15px;">Scheme, Self</td>
                          </tr>
                        </table>
                      </td>
                    </tr>
                    <tr>
                      <td style="word-break:break-word;font-size:0px;padding:25px 30px;padding-top:10px;padding-bottom:10px;padding-right:25px;padding-left:25px;" align="center">
                        <table role="presentation" cellpadding="0" cellspacing="0" style="border-collapse:separate;" align="center" border="0">
                          <tbody>
                            <tr>
                              <td style="border:none;border-radius:0px;color:#FFFFFF;cursor:auto;padding:10px 25px;" align="center" valign="top" bgcolor="#8bb420">
                                <a href="https://mjml.io" style="text-decoration:none;line-height:100%;background:#8bb420;color:#FFFFFF;font-family:'Open Sans', Ubuntu, Arial, sans-serif;font-size:16px;font-weight:normal;text-transform:none;margin:0px;" target="_blank">
                                  <strong>Click here to go now !</strong>
                                </a>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </td>
                    </tr>
                    <tr>
                      <td style="word-break:break-word;font-size:0px;padding:10px 25px;padding-top:10px;padding-bottom:10px;padding-right:25px;padding-left:25px;" align="left">
                        <div style="cursor:auto;color:#000000;font-family:'Open Sans', Ubuntu, Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;">
                          <p></p>
                          <p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:'Open Sans', Ubuntu, Arial, sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;">Thank You,</span>
                          </p>
                          <p></p>
                          <span style="font-size:14.666666666666666px;font-family:'Open Sans', Ubuntu, Arial, sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;">{{COMPANY_NAME}}</span>
                          <p></p>
                        </div>
                      </td>
                    </tr>
                  </tbody>
                </table>
              </div>
              <!--[if mso | IE]>
                </td></tr></table>
              <![endif]-->
            </td>
          </tr>
        </tbody>
      </table>
    </div>
    <!--[if mso | IE]>
      </td></tr></table>
    <![endif]-->
    <!--[if mso | IE]>
    <table role="presentation" border="0" cellpadding="0" cellspacing="0" width="600" align="center" style="width:600px;">
      <tr>
        <td style="line-height:0px;font-size:0px;mso-line-height-rule:exactly;">
    <![endif]-->
    <table role="presentation" cellpadding="0" cellspacing="0" style="font-size:0px;width:100%;" border="0">
      <tbody>
        <tr>
          <td>
            <div style="margin:0px auto;max-width:600px;">
              <table role="presentation" cellpadding="0" cellspacing="0" style="font-size:0px;width:100%;" align="center" border="0">
                <tbody>
                  <tr>
                    <td style="text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:20px 0px;padding-bottom:10px;padding-top:10px;">
                      <!--[if mso | IE]>
                        <table role="presentation" border="0" cellpadding="0" cellspacing="0"><tr><td style="vertical-align:middle;width:600px;">
                      <![endif]-->
                      <div aria-labelledby="mj-column-per-100" class="mj-column-per-100 outlook-group-fix" style="vertical-align:middle;display:inline-block;direction:ltr;font-size:13px;text-align:left;width:100%;">
                        <table role="presentation" cellpadding="0" cellspacing="0" style="vertical-align:middle;" width="100%" border="0">
                          <tbody>
                            <tr>
                              <td style="word-break:break-word;font-size:0px;padding:10px 25px;padding-top:0px;padding-bottom:0px;padding-right:25px;padding-left:25px;" align="center">
                                <div style="cursor:auto;color:#000000;font-family:'Open Sans', Ubuntu, Arial, sans-serif;font-size:11px;line-height:22px;text-align:center;">
                                  <p style="font-size: 11px"><span></span>
                                  </p>
                                </div>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </div>
                      <!--[if mso | IE]>
                        </td></tr></table>
                      <![endif]-->
                    </td>
                  </tr>
                </tbody>
              </table>
            </div>
          </td>
        </tr>
      </tbody>
    </table>
    <!--[if mso | IE]>
      </td></tr></table>
    <![endif]-->
  </div>
</body>

——

我想清理它,从 body 和内部 div 开始,通过设置字体、背景、填充等一次......

<body style="background: #bedae6; color:#000000; font-family:'Open Sans', Ubuntu, Arial, sans-serif; font-size:11px; line-height:22px">
  <div>
    // ....
  </div>
</body>

另一个例子,它将字体大小设置为 0,然后在子元素中设置实际字体大小,声明两次填充..到底是什么:

<tr>
    <td style="font-size:0px;padding:10px 25px;padding-top:10px;padding-bottom:10px;padding-right:25px;padding-left:25px;" align="left">
        <div style="cursor:auto;color:#000000;font-family:'Open Sans', Ubuntu, Arial, sans-serif;font-size:13px;line-height:22px;text-align:left;">
            <p></p>
            <p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;"><span style="font-size:14.666666666666666px;font-family:'Open Sans', Ubuntu, Arial, sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;">Thank You,</span>
            </p>
            <p></p>
            <span style="font-size:14.666666666666666px;font-family:'Open Sans', Ubuntu, Arial, sans-serif;color:#000000;background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap;">{{COMPANY_NAME}}</span>
            <p></p>
        </div>
    </td>
</tr>

解决方案


我会尽力解决你所有的顾虑!

所以基本上有些客户端不允许在某些元素中使用 css,例如旧版 Outlook 和某些 Gmail 变体。像 Padding 仅支持 Outlook 的 P & 表格元素。最重要的是,一些客户端处理 css 继承非常糟糕,因此您必须确保最深的节点具有 css,而不是将其分组到父节点中。关于字体大小 0,这是避免块之间的空间的技巧

这就是为什么您有一些看起来多余的 css,它们在这里是为了确保模板在所有受支持的客户端上看起来都一样。

MJML 有一些默认的 MJ 属性(您可以使用 mj-head 中的 mj-attributes 覆盖),这些属性将转换为 CSS 属性。就像你说的 padding 一样,padding 和 padding-top/bottom/right/left 都可以使用,它们可以单独使用,但使用一个不会覆盖另一个。

如果你想清理它,你可以使用 mj-attributes“重置”默认属性。

您所关心的其他问题是为空行生成的 HTML 的复杂性。您有多种使用 MJML 处理此问题的方法(带有空白部分、填充、带有列和 mj-spacer 的空白部分,有时甚至是带有 mj-raw 的“原始”html),这取决于您正在处理的设计。

保持跨设备和客户端的高度兼容性需要在输出 HTML 的可读性方面做出一些牺牲。但是,我们正在尽最大努力清理输出 HTML,因为某些客户端(如 Gmail)对电子邮件有一些大小限制




所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.qianduanheidong.com/blog/article/215242/ddeb92a1c18dd3ba57ee/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

29 0
收藏该文
已收藏

评论内容:(最多支持255个字符)