不使用CSS媒体查询的响应式HTML电子邮件模板?

时间:2016-07-01 02:15:17

标签: html css responsive-design html-email email-templates

我希望设计一个简单的响应式HTML电子邮件模板,而不使用CSS媒体查询或弹性框。我希望电子邮件的中间区域在大屏幕上有两列:

Large Screen - 2 columns

但在小屏幕上只有一列,其内容居中

Small Screen - 1 column - centered

如果不使用媒体查询,你会怎么做?

7 个答案:

答案 0 :(得分:4)

我发现实现此目的的最佳方法是在使用MSO条件来控制桌面Outlook的宽度时在表内使用DIV。

示例:

<!--[if (gte mso 9) | (IE) ]><table width="640"><tr><td align="center"><![endif]-->
<table width="100%" align="center">
<tr>
<td align="center">
       <!--[if (gte mso 9) | (IE) ]><table width="100%"><tr><td width="300" align="center"><![endif]-->
    <div style="width:300px; display:inline-block; margin:0 auto; text-align:center;">
    <table align="center" width="100%">
              <tr>
                      <td class="left" align="center">
                        <img border="0" src="yourimage.png" width="280" />
                      </td>
              </tr>
            </table>
            </div>
           <!--[if (gte mso 9) | (IE) ]></td><td width="320" align="right"><![endif]-->
            <div style="max-width:320px; display:inline-block; margin:0 auto;">
            <table align="center" width="100%">
              <tr>
                      <td align="center">Your copy goes here</td>
                      </tr>
                      </table></div>
      <!--[if (gte mso 9) | (IE) ]></td></tr></table><![endif]-->
            </td>
          </tr>
        </table>
      <!--[if (gte mso 9) | (IE) ]></td></tr></table><![endif]-->

下一个最好的方法是通过TH标签:

<!--[if (gte mso 9) | (IE) ]><table width="640"><tr><td align="center"><![endif]-->
<table width="100%" align="center" style="max-width:640px;">
<tr>
<th align="center" width="300" style="display:inline-block;"><img src="yourimage.png"></th>
<th align="center" width="310" style="display:inline-block;">your copy here</th>
 </tr>
</table>
<!--[if (gte mso 9) | (IE) ]></td></tr></table><![endif]-->

这两个都有问题,需要不断调整和操作才能让它们发挥作用。但是,我发现TH解决方案有更多的怪癖(例如字体粗体,随机无法解释的边框等),并且比div / mso条件选项更少'可自定义'。

在大多数客户端(ref)中接受div中的max-width,但Outlook桌面除外,它由MSO条件处理。如果您想进一步控制,您还可以将div设置为定义的宽度而不是max-width,从而实现更加可控的环境。

答案 1 :(得分:1)

您可以通过将列设置为display: inline-block来使列自行组织。不确定是否所有电子邮件客户端都支持它,但它应该可以正常工作。

jsFiddle

HTML:

<div>Whatever content before</div>

<div class="row">
  <div class="col"><img src="image.jpg" /></div>
  <div class="col">text content</div>
  <div class="col"><img src="image2.jpg" /></div>
</div>

<div>Whatever content after</div>

CSS:

.row {
  text-align: center;
}

.col {
  display: inline-block;
  max-width: 300px;
  text-align: left;
}

答案 2 :(得分:1)

你可以用下一个想法来完成这个任务。

您可以为每个列定义固定宽度,为父容器定义最大宽度,在本例中为表本身。如果没有足够的空间用于两者,那么目标是使辅助列在第一列之前折叠。

bZWokw上查看此示例CodePen

CSS

.column-1 {float:left; width:200px;}
.column-2 {float:left; width:400px;}
.content { padding:10px; }

HTML

<table width="100%" cellpadding="0" cellspacing="0" border="0">
    <tr>
        <td width="100%">
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Hic autem ratione porro perferendis minus itaque ab harum molestiae natus ipsam.</p>
        </td>
    </tr>
    <tr>
        <td width="100%">
            <div class="column-1">
                <div class="content">
                    <img src="http://placehold.it/200x200/" alt="" style="max-width:100%;">
                </div>
            </div>
            <div class="column-2">
                <div class="content">
                    <h2>HAMILTON - The Revolution</h2>
                    <a href="">Review this Product</a>
                </div>
            </div>
        </td>
    </tr>
    <tr>
        <td width="100%">
            <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam, esse itaque. Aliquid doloremque tempore, dicta iure consectetur odit vel eveniet minus mollitia reprehenderit incidunt ratione minima aut dignissimos, pariatur in.</p>
        </td>
    </tr>
</table>

答案 3 :(得分:0)

您使用表格并依赖普通文档流程(breif description on that here)。这里有太多的东西要解释,虽然我自己讨厌只链接答案,但是你走了。

这是IMO,它解决了您的确切问题,是我读过的最好的电子邮件模板教程之一。

&#34;在没有媒体查询的情况下创建面向未来的响应式电子邮件&#34;

http://webdesign.tutsplus.com/tutorials/creating-a-future-proof-responsive-email-without-media-queries--cms-23919

编辑:此外,这是验证不同电子邮件客户端中CSS属性兼容性的绝佳链接:

https://www.campaignmonitor.com/css/

答案 4 :(得分:0)

@Gortonington提供的答案非常好!我将详细介绍并提供一些代码:

<!--[if mso]>
<table border="0" cellspacing="0" cellpadding="0" align="center" width="660">
<tr>
<td align="center" valign="top" width="660">
<![endif]-->
<table border="0" cellpadding="0" cellspacing="0" align="center" width="100%" style="max-width:660px;">
    <tr>
        <td align="center" valign="top" style="font-size:0;">
            <!--[if mso]>
            <table border="0" cellspacing="0" cellpadding="0" align="center" width="660">
            <tr>
            <td align="left" valign="top" width="330">
            <![endif]-->
            <div style="display:inline-block; Margin: 0 -2px; width:100%; min-width:200px; max-width:330px; vertical-align:top;">
                <table cellspacing="0" cellpadding="0" border="0" width="100%">
                    <tr>
                        <td>
                            CONTENT DOES HERE
                        </td>
                    </tr>
                </table>
            </div>
            <!--[if mso]>
            </td>
            <td align="left" valign="top" width="330">
            <![endif]-->
            <div style="display:inline-block; Margin: 0 -2px; width:100%; min-width:200px; max-width:330px; vertical-align:top;">
                <table cellspacing="0" cellpadding="0" border="0" width="100%">
                    <tr>
                        <td>
                            CONTENT DOES HERE
                        </td>
                    </tr>
                </table>
            </div>
            <!--[if mso]>
            </td>
            </tr>
            </table>
            <![endif]-->
        </td>
    </tr>
</table>
<!--[if mso]>
</td>
</tr>
</table>
<![endif]-->

此方法称为混合方法,用于为电子邮件客户端重新配置不同屏幕大小的布局,而不管媒体查询支持如何。从本质上讲,它使用最大宽度和最小宽度来施加刚性基线(允许一些移动),并为Outlook提供固定的宽宽度,无论如何都要绑定到桌面。一旦设置了适合移动设备的基准,媒体查询就会在支持它的客户端中逐步增强电子邮件。

有一些开源模板可以实现这一目标。我maintain one,其hybrid template完成了您的需要。

答案 5 :(得分:-2)

尝试 Bootstrap3 它可能对您有所帮助,它基本上简化了css库。它适用于简单的网站和博客,而不是

答案 6 :(得分:-2)

您可以尝试:宽度:100%;最大宽度:400px