美文网首页程序员
HTML Email Boilerplate 开发

HTML Email Boilerplate 开发

作者: 犯迷糊的小羊 | 来源:发表于2017-08-09 21:40 被阅读133次

    前言

    在进行 HTML Email Boilerplate 开发时遇到的最常见的问题就是样式渲染和资源引入问题,这些问题的产生往往是各大主流邮件客户端(手机、桌面或是网页版)对样式支持或是资源引入的限制。


    目录

    • 模板开发
    • 工具推荐
    • 参考资料

    模板开发

    首先,简明扼要提炼几个邮件模板开发时的关注点:

    1. CSS 元素的有限支持
    部分邮件客户端不支持 <style> in <head> 或 <style> in <link>;
    2. 外部引入的资源只能是图片,不可以是 stylesheets, fonts 和 vedio 等
    3. 通常使用 table 进行页面布局

    • doctype
      有一部分邮件客户端( Gmail 和 Hotmail )会移除 doctype,当然大多数会保留你的 doctype,使用 XHTML1.0 的 doctype 兼容性最好以及出现最少开发者意想之外的情形;
      XHTML 1.0 的 doctype 代码如下:
    <!DOCTYPE html 
         PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
        <title>Virtual Library</title>
      </head>
      <body>
        <p>Moved to <a href="http://example.org/">example.org</a>.</p>
      </body>
    </html>
    <!-- origin from XHTML 1.0 -->
    
    • layout
      撰写页面的起步通常是通过 HTML 元素进行页面内容布局,但是我们无法随心所欲的使用一些常用的元素,比如 HTML5 的 <canvas><audio><vedio>的兼容性就极差;
    HTML5 support for email clients
    此外,由于部分客户端对 CSS 的一些布局样式的支持较差,比如 positionfloat 等,导致常用的 float + position的布局方法失效; CSS support for email clients

    因此,HTML Email Boilerplate 常用的通用布局方法是采用 tables

    table support for email clients
    通过嵌套的 table 可以实现复杂的布局;
      <table>
        <tr>
          <td width="50%"> 33.33% </td>
          <td width="25%"> 33.33% </td>
          <td width="25%"> 33.33% </td>
        </tr>
        <tr>
          <td colspan="3"> 100% </td>
        </tr>
      </table>
    
    table-layout-01

    笔者一开始使用 table 布局,犯了一个错误,在此分享一番:

      <table>
        <tr>
          <td width="33.33%"> 33.33% </td>
          <td width="33.33%"> 33.33% </td>
          <td width="33.33%"> 33.33% </td>
        </tr>
        <tr>
          <td width="100%"> 100% </td>
        </tr>
      </table>
    

    本意是想将第 2 个 tr 的宽度充满一行,结果上面代码导致出现意外的布局。

    table-layout-02

    因此在为每个 td 的宽度进行百分比赋值时,如果某一行的 td 只有一个时,通常设置 tdcolspan 属性去实现,colspan="x"的 x 值根据表格某行最多的 td 去确定。

    另一种比较统一的设置属性的方式是:

      <table>
        <tr>
          <td colspan="100%"> 50% </td>
        </tr>
        <tr>
          <td colspan="33.33%"> 33.33% </td>
          <td colspan="33.33"> 33.33% </td>
          <td colspan="34%"> 33.33% </td> <!-- 这里的 colspan 的值需要 hack 一下,才能保持布局一致性 -->
        </tr>
        <tr>
          <td colspan="25%"> 25% </td>
          <td colspan="25%"> 25% </td>
          <td colspan="25%"> 25% </td>
          <td colspan="25%"> 25% </td>
        </tr>
        <tr>
          <td colspan="20%"> 20% </td>
          <td colspan="20%"> 20% </td>
          <td colspan="20%"> 20% </td>
          <td colspan="20%"> 20% </td>
          <td colspan="20%"> 20% </td>
        </tr>
      </table>
    
    table-layout-03
    【code link 】
    • style
    style method injection of email clients
    上图显示 Gmail 不支持样式表通过 <head><link> 的方式引入 HTML,为了保持对 Gmail 的兼容性,因此 HTML Email Boilerplate 的开发通常采用 inline style 的方法。
    当然,我们可以先将样式 <head> ,然后在通过一些 CSS Inliner 工具,如
    putsmail PutsMail 直接嵌入 HTML 元素中。

    HTML Email Boilerplate 开发主要的注意事项就是以上几点,当然涉及不同浏览器的元素样式处理不一致的问题,我们可以采用第三方写好的 Email-Boilerplate去解决上述问题。


    工具推荐


    参考资料

    XHTML™ 1.0
    Say Hello to the HTML Email Boilerplate
    What You Should Know About HTML Email
    A Guide to CSS Inlining in Emai

    相关文章

      网友评论

        本文标题:HTML Email Boilerplate 开发

        本文链接:https://www.haomeiwen.com/subject/zwjfrxtx.html