html仅垂直堆叠的条形图

时间:2020-10-30 15:05:01

标签: html css charts outlook

我正在尝试创建一个垂直堆积的条形图,以用于电子邮件;该客户端主要是Outlook 2016。

我不想使用图像,因为在我的情况下,将始终要求用户下载图像并且可能不会打扰。 Outlook不支持带有位置的jQuery,JavaScript或div

这是我必须产生两个相同的小节的非常简单的代码(是的,我知道这很可怕):

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <body>
    <table>
      <tr>
        <td style="height:10px">
          <table style="border: none;border-collapse: collapse;">
            <tr>
              <td style="height:10px">
                <table style="border: none;
                    border-collapse: collapse;width:40px;
                    mso-table-lspace:0pt;
                    mso-table-rspace:0pt;">
                  <tr>
                    <td style="height:50px;background-color:red;">
                      <p>1</p>
                    </td>
                  </tr>
                </table>
                <table style="border: none;
                    border-collapse: collapse;width:40px;
                    mso-table-lspace:0pt; mso-table-rspace:0pt;">
                  <tr>
                    <td style="height:10px;background-color:green;">
                      <p>1</p>
                    </td>
                  </tr>
                </table>
              </td>
              <td style="height:10px">
                <p>
                  <table style="border: none;
                      border-collapse: collapse;width:40px;
                      mso-table-lspace:0pt; mso-table-rspace:0pt;">
                    <tr>
                      <td style="height:50px;background-color:red;">
                        <p>1</p>
                      </td>
                    </tr>
                  </table>
                </p>
                <p>
                  <table style="border: none;
                      border-collapse: collapse; width:40px;
                      mso-table-lspace:0pt; mso-table-rspace:0pt;">
                    <tr>
                      <td style="height:10px;background-color:green;">
                        <p>1</p>
                      </td>
                    </tr>
                  </table>
                </p>
              </td>
            </tr>
          </table>
        </td>
      </tr>
    </table>
  </body>

这很好用,我已经扩展到了看起来像此呈现图表的图表:

rendered chart

但是,当用户在Outlook中转发电子邮件时,它将为我添加<p>标签,并使图表不可读,如下所示:

unreadable chart

因此,我正在寻找一种诱骗Outlook的方式,以便它不会插入会导致图表在栏中出现空白的<p>标签,或者在第一种方法中创建图表仅使用HTML和CSS放置。没有jQuery,没有JavaScript,也没有带有浮点数的div

1 个答案:

答案 0 :(得分:0)

从2007年到2019年,Windows上的Outlook使用Word的呈现引擎,并且确实添加了许多<p>和其他内容。据我所知,没有办法阻止这种情况。但是,如果首先使用适当的样式添加它们自己(margin:0以重置默认段落样式),则应该可以。但是在您的示例中,您甚至不需要首先添加段落。这是从您的代码简化的完整工作示例(我在真实的Outlook 2019上对此进行了测试,并且在回复或转发时代码保持稳定):

<!DOCTYPE html>
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Stacked bar chart</title>
    <!--[if mso]>
    <xml>
        <o:OfficeDocumentSettings>
            <o:PixelsPerInch>96</o:PixelsPerInch>
        </o:OfficeDocumentSettings>
    </xml>
    <![endif]-->
</head>
<body>
    <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;">
        <tr>
            <td style="padding:2px; vertical-align:bottom;">
                <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:40px;">
                    <tr>
                        <td style="height:50px; background-color:red;">1</td>
                    </tr>
                    <tr>
                        <td style="height:10px; background-color:green;">1</td>
                    </tr>
                </table>
            </td>
            <td style="padding:2px; vertical-align:bottom;">
                <table border="0" cellpadding="0" cellspacing="0" role="presentation" style="border: none; border-collapse: collapse; mso-table-lspace:0pt; mso-table-rspace:0pt; width:40px;">
                    <tr>
                        <td style="height:10px; background-color:red;">1</td>
                    </tr>
                    <tr>
                        <td style="height:50px; background-color:green;">1</td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
</body>
</html>

如果这对您不起作用,则另一种方法可能是use VML to render the entire graph。但这仅适用于使用Word渲染引擎或与VML兼容的Outlook客户端。