在HTML电子邮件中是否有等效的CSS最大宽度?


114

我正在尝试创建HTML电子邮件,以在所有广泛使用的电子邮件客户端中正确显示。我将整个电子邮件包装在一个表中,我希望它的宽度最多可达到可用宽度的98%,但不大于800像素。像这样: <table style="width:98%; max-width:800px;">

但是我没有那样做,因为根据此 Outlook 2007不支持CSS width属性。

相反,我正在这样做: <table width="98%">

有没有办法不用依靠CSS来设置最大宽度?


1
我已经更新了@MarkNugent对此问题的可接受答案,因为这似乎已经引起了共识-即使来迟了4年,对我也没有用。:)
蒂姆·古德曼

Answers:


223

是的,有一种方法可以max-width使用表进行仿真,从而为您提供响应式和Outlook友好的布局。而且,此解决方案不需要条件注释。

假设你想要的中心相当于divmax-width350px。创建表格,将宽度设置为100%。该表连续三个单元格。将中心的宽度设置TD350(使用HTML width属性,而不是CSS),然后就可以了。

如果您希望内容左对齐而不是居中对齐,则只需省略第一个空白单元格即可。

例:

<table border="0" cellspacing="0" width="100%">
    <tr>
        <td></td>
        <td width="350">The width of this cell should be a maximum of 
                  350 pixels, but shrink to widths less than 350 pixels.
        </td>
        <td></td>
     </tr>
</table> 

在jsfiddle中,我为表格提供了一个边框,以便您可以查看发生了什么,但是显然您不希望在现实生活中遇到这样的情况:

http://jsfiddle.net/YcwM7/


18
这是每个人的最佳答案^^^。忽略接受的答案和条件答案。
尼克·曼宁,

4
只是为了节省别人的时间,这些空的<td>元素中至少有一个是必要的,否则带有内容的<td>会拉伸以填充整个<tr>。但这绝对是所提供解决方案中最好的解决方案。
克里斯·斯特里克兰

2
@Phyllis Sutherland您可以尝试删除内联img大小并将其替换为:style="max-width: 100%; height: auto; width: auto; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box;"
morespace54 2015年

5
注意不要像我一样向内部宽度添加单位,否则它将不起作用!即不要做width =“ 350px”
magritte 2015年

3
@PhyllisSutherland找到了图像修复程序: <img src="file.jpg" "width="350" alt="" style="display:block;width:100%" /> litmus.com/community/discussions/…–
cbron

34

您可以使用条件html注释为Outlook 2007做一个技巧。
下面的代码将确保Outlook表格的宽度为800px,而不是max-width,但其效果要好于让表格跨越整个窗口。

<!--[if gte mso 9]>
<style>
#tableForOutlook {
  width:800px;
}
</style>
<![endif]-->

<table style="width:98%;max-width:800px">
<!--[if gte mso 9]>
  <table id="tableForOutlook"><tr><td>
<![endif]-->
    <tr><td>
    [Your Content Goes Here]
    </td></tr>
<!--[if gte mso 9]>
  </td></tr></table>
<![endif]-->
<table>

6
很好的建议,但是由于它是一个id选择器,而不是一个类,因此您可以通过使用表格元素上的宽度attr来保存一些键入内容
Steve Wasiura 2012年

这很棒。除了一个问题,通过设置宽度,Outlook不会让电子邮件缩小到小于给定的尺寸。通过不设置宽度,电子邮件将扩展到整个屏幕。选择你的毒药:)
协调员

13

简短的回答:不。

长答案:

固定格式更适合HTML电子邮件。以我的经验,关于HTML电子邮件,您最好假装是1999年。要明确,并在表定义中尽可能使用HTML属性(width =“ 650”“,而不是CSS(style =” width:650px“)。使用固定的宽度,没有百分比。650像素宽的表格宽度是安全的选择。使用内联CSS设置文本属性。

这与“ HTML电子邮件”中的工作方式无关,而是过多的电子邮件客户端及其有限的呈现HTML的能力(对于Gmail,Hotmail等,有时是故意的)。


是的,那是我所期望的,但我想我会问。
Tim Goodman 2010年

35
设置为650的固定宽度会使您的电子邮件在移动电子邮件客户端中看起来很糟糕。
DrewB

6
-1:这看起来很糟糕,因为在现实世界中移动设备的尺寸相对较小。这意味着没有缩放和平移,设计中的文本将变得难以阅读。看看Campaign Monitor指南“ 响应式电子邮件设计”
Karl Horky

1
-1也是因为我也只在移动客户端中处理过这个问题,而固定宽度正是我的问题。
Brian FitzGerald

7
今年是2015年。移动设备无处不在。您是说要忘记移动设备的愚蠢前景?我说,忘记前景。还有其他来自微软的产品。
refaelio

5

参加聚会有点晚,但这可以解决。我将示例保留为600,因为大多数人会使用以下示例:

与Shay的示例相似,除了它还包括max-width以便在其他确实有支持的客户端上工作,以及第二种防止Outlook '11所需的扩展(媒体查询)的方法。

在头上:

  <style type="text/css">
    @media only screen and (min-width: 600px) { .maxW { width:600px !important; } }
  </style>

在身体里:

<!--[if (gte mso 9)|(IE)]><table width="600" align="center" cellpadding="0" cellspacing="0" border="0"><tr><td><![endif]-->
<div class="maxW" style="max-width:600px;">

<table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
  <tr>
    <td>
main content here
    </td>
  </tr>
</table>

</div>
<!--[if (gte mso 9)|(IE)]></td></tr></table><![endif]-->

这是另一个正在使用的示例:移动设备的响应订单确认电子邮件?


0

这是对我有用的解决方案

https://gist.github.com/elidickinson/5525752#gistcomment-1649300,感谢@ philipp-klinz

<table cellpadding="0" cellspacing="0" border="0" style="padding:0px;margin:0px;width:100%;">
    <tr><td colspan="3" style="padding:0px;margin:0px;font-size:20px;height:20px;" height="20">&nbsp;</td></tr>
     <tr>
        <td style="padding:0px;margin:0px;">&nbsp;</td>
        <td style="padding:0px;margin:0px;" width="560"><!-- max width goes here -->

             <!-- PLACE CONTENT HERE -->

        </td>
        <td style="padding:0px;margin:0px;">&nbsp;</td>
    </tr>
    <tr><td colspan="3" style="padding:0px;margin:0px;font-size:20px;height:20px;" height="20">&nbsp;</td></tr>
</table>

您能否提供一个更简洁的示例,其中有很多不需要解决的问题
EdL

@EdL的想法是,这获得电子邮件友好的最简洁的方法max-width。这整个事情将取代<div style="max-width: ...px">...</div>。对于当我发现要点时正在处理的电子邮件,这是使情况在Outlook 2010、2013和2016中看起来正确的唯一解决方案
。– henry

@henry我更多地提到了所有的cellpadding字体大小属性等。图像是一个棘手的问题,因为除非您将width =“ 500”指定为属性,否则500(以像素为单位)Outlook的宽度将使图像达到全尺寸( wrt。image file)通常会导致固定宽度。
EdL

照原样保留它是因为这不是我的代码(我只是从要旨中引用了它),但是我将其设置为社区Wiki。我认为必要明确指定0px paddings和margins以及0 cellpaddingand cellspacing。可能会指定在不遵守时间line-height的情况下替代font-size填写height(我想先在所有trs 上进行测试,然后再在所有tds 上进行测试以查看确切的位置)。@EdL,如果您能够获得更轻便的解决方案,并且效果如此出色-请在此处以及链接的要点中发布它
亨利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.