转自:http://www.cnblogs.com/dolphinX/p/4081828.html

是不是很讨厌为Email代码兼容Outlook?

太遗憾了!虽然光都有尽头,但Outlook始终存在。

分享一下应付这种烦人的邮件客户端的编程经验,主要包括四个部分

  1. Outlook必知的17个tricks
  2. 移除table间距的3种办法
  3. 移除Outlook2013图片间距
  4. Outlook 2007、2010中的CSS padding

Outlook必知的17个tricks

为Outlook设计就像追逐行踪飘忽的大白鲸。我们花费了数小时研究,跟踪缺陷和故障,努力在一个不完善的环境中实现像素级别的完美展示。虽然Outlook时最难啃的骨头,但是搞定它仍是当务之急。

下面是17条改善Outlook上Email的建议

Outlook忽略图片的margin和padding

Outlook 2007-2013不支持image的margin与padding样式,必要的时候尝试hspacevspace

<img src="http://www.emailonacid.com/example.jpg" align="left" vspace="10" hspace="10" />

或者为图片本身添加额外的空间(这个台low了,实在不推荐)

文本不自动折行

对于table中的文字,比如aaaaaaaaaaaaaaaaa,如果希望它们自动折行,需要这样

<td style="word-break:break-all;">

下面的例子对比一下就看到效果了

Outlook自动为table cell 添加1px border

如果table使用了背景颜色可以看到td有1px的白边,在内嵌的style中加入样式

 table td { border-collapse: collapse; } 

或者使用内联样式

<td style="border-collapse: collapse;">... </td>

Outlook有时忽略link的样式

如果a标签没有href属性,那么Outlook 2007和 2013将不支持其内联样式

<a style="font-size: 20px; color: #004990;">Shop Flooring </a>

这种没有作用,应该修改为

<a href="http://www.test.com" style="font-size: 20px; color: #004990;">Shop Flooring </a>

间距很重要的话用table实现

Email中最安全的呈现间距就是使用table

<table cellpadding="2" cellspacing="2" border="0"> <tr> <td valign="top">•</td> <td>Test</td> </tr> <tr> <td valign="top">1.</td> <td>Test</td> </tr> </table>

使用cellpadding和cellspacing做间距

不要在table上使用marginpadding,cellpadding和cellspacing是比较安全的方式,可以达到padding和margin的效果

如果使用table的align属性

<table align="left">

情况会有些小复杂,后续提到

注意;对table的对齐属性要额外的小心,你永远不知道这会对其渲染引擎(Word rending engine)造成什么影响。我们见识过它会尝试使用自己的定位

Outlook有时会移除padding

Outlook 07 和 10 会把divh1~h6转换为p并包裹上span,这个会把html的容器从块元素转换为内联元素

<h2 style="font-size: 15px; font-weight: bold; margin: 0; padding: 17px 0 0 0;">NEW FASHIONS
</h2>

会被转换为

<p class= style='mso-outline-level:3'> <b> <span style='font-size:11.5pt'> NEW FASHIONS<o:p></o:p> </span> </b> </p>

下面的例子可以看到padding设置在Thunderbird上有效,Outlook 2007上无效

一个解决办法就是把padding加到td上

<td style="padding: 17px 0 0 0"><h2 style="font-size: 15px; font-weight: bold; margin: 0"> NEWFASHIONS </h2> </td>

另外一个解决办法就是不使用div和h1~h6,使用p

使用 MSO 控制行高

在使用行高前添加mso-line-height-rule:exactly

<td style="mso-line-height-rule:exactly; line-height:50px;">

这只在块元素上有效,所以想在font或span中用就洗洗睡了吧,这只是微软的CSS属性,对其他客户端没影响

Outlook按字面解释

确保td的rowspan属性 被设置了正确的值,大部分浏览器对错误设着的rowspan宽大处理了,但是Outlook 07 和10 会按照你声明的值解释渲染,如果声明多了就悲剧了,即使table中没有那么多也一样渲染

Outlook有时忽略width和height

带有width喝height的块元素可能显示和预期不一致,如果水平和垂直空间时由email内容决定的,要了解有时候自定义的空间和对齐不好使,为了最好效果,使用透明的图片占位或者table cell的height属性

td有最矮2px的限制

在Outlook 07和10中,td最小高度被限制为2px,如果使用td里面是1px的透明gif和背景颜色,还会出现一个水平条

背景图片需要使用vml

在Outlook 07、10、13中背景图片不使用VML的话是不起作用的。VML是一个基于XML的过时的二维矢量图形文件格式,是Office Open XML标准的一部分。这个问题很难搞定,可以看看这篇博客看看真么使用VML搞定背景图片

也可以使用Bulletproof background images搞定

Outlook把一些div转换为p

Outlook经常会把div转换为p,这个我们真心不理解什么时候和为什么,你知道的话跟我们聊聊

Outlook使用word渲染引擎

Outlook使用text boundaries 和page breaks略微有些不同,Text boundaries被用来在打印页面的时候分离页面元素。并不输出HTML代码

根据我们研究,我们了解到text boundaries 最大可以拉伸到23.7英寸高(1790px),超过了就会自动插入分割线然后创建新的text boundary。因此如果email中的table的高度高于1790px,它就会变成多个

最好的解决办法就是不要搞这么高的table,每次添加新的table都会创建新的text boundry,只要table不超过1790px就不会创建多个text boundry

使用table嵌套的时候要注意内层的table别超过了,适当拆分一下,重构比较麻烦,设计的时候注意最好

太高的图片会被剪切

在Outlook中图片最高1728px,超过1728 的部分会被截掉(怎么会有人这么丧心病狂在Email中放这么高的图片)

我们也见过Outlook自动缩小图片,使其最高位1827px

我们建议你剪裁图片,堆叠在一起

定义了尺寸的图片核能渲染不正确

拉伸图片可能不会正确的渲染,所有的图形应该设置正确的尺寸在属性中。不要依赖于HTML定义图片尺寸这点对于Email很重要

带动画的gif不支持

Outlook不支持带动画的gif,只会展示第一帧

移除table间距的3种办法

当我们尝试左右并列table或者上下堆叠table的时候会发现Outlook 07 和 10 有些小问题,如果发现不想要的间距,你就来对地方了

步骤1 在css中添加border-collapse属性

<style type="text/css">

table {border-collapse: collapse;}


步骤2 border、cellpadding、cellspacing设为0

<table border="0" cellpadding="0" cellspacing="0">

步骤3 如果为table添加了align属性里还需要做些事情

在这种情况下,可能会发现table间十分大的间距,下面说一下解决办法

  1. 为td添加bgcolor属性,根据你的布局选颜色
  2. 为table添加1px的border,颜色和td一样
  3. 为了适应border,减少table的宽度2px
  4. 把第一个td的内容用p包裹,添加样式mso-table-lspace:0;mso-table-rspace:0;
<style type="text/css">table {border-collapse: collapse;}</style> <table border="0" width="600" cellspacing="0" cellpadding="0"> <tr> <td> <table align="left" width="198" border="0" cellpadding="0" cellspacing="0" style="border:1px solid #00CC99"> <tr> <td bgcolor="#00CC99"> <p style="mso-table-lspace:0;mso-table- rspace:0;">Content in 1</p> </td> </tr> <tr> <td bgcolor="#00CC99">Content in 1</td> </tr> </table> <table align="left" width="198" border="0" cellpadding="0" cellspacing="0" style="border:1px solid #33FFFF"> <tr> <td bgcolor="#33FFFF"> <p style="mso-table-lspace:0;mso-table- rspace:0;">Content in 2</p> </td> </tr> <tr> <td bgcolor="#33FFFF">Content in 2</td> </tr> </table> <table align="left" width="198" border="0" cellpadding="0" cellspacing="0" style="border:1px solid #993366"> <tr> <td bgcolor="#993366"> <p style="mso-table-lspace:0;mso-table- rspace:0;">Content in 3</p> </td> </tr> <tr> <td bgcolor="#993366">Content in 3</td> </tr> </table> </td> </tr> </table>

关于这种方法的说明

  1. 这个问题只会在在table的align被设置为left|right的时候发生
  2. 只需要把第一个td的内容用p包裹
  3. 如果table cells有不同颜色就得再套一层table了
  4. 这种方法对于image堆叠不起作用,最好把图片做成一个这种情况

移除Outlook2013图片间距

Outlook2013填了一些坑,但又挖了新坑。堆叠的图片会显示大概10px的间距

这个问题只在图片高度小于20px的时候出现,开心的是通过简单的小技巧就可以解决:为td设置和图片高度一样的行高

虽然作者说不知道为什么,我们可以大胆猜测一下,image时行内元素,Outlook为td设置了1.3之类的行高,这样上下就会有间距,设了行高就行了,也有人提到行高设为0或者image设为display:block都能解决

<td width="600" height="80" style="line-height: 80px;" > <img height="80" src="http://www.website.com/images/Nature_01.jpg" width="600" /> </td>

Outlook 2007、2010中的CSS padding

针对Outlook设计的人清楚已经被table绑定了,只能用很少的css,但是你可能不知道Outlook会把你的代码转换为微软的代码

比较重要的一个就是Outlook经常去掉div核h1~h6,换为p和span,有时候保留外部的container有时候删除

<h2 style="font-size: 15px; font-weight: bold; margin: 0; padding: 17px 0
0 0;">NEW FASHIONS</h2> <div style="font-size: 15px; font-weight: bold; margin: 0; padding: 17px 0 0 0;">NEW FASHIONS</div> <p style="font-size: 15px; font-weight: bold; margin: 0; padding: 17px 0 0 0;">NEW FASHIONS</p>

会转换为

<style>
p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast;} h2 {mso-style-priority:9; mso-style-unhide:no; mso-style-qformat:yes; mso-style-link:"Heading 2 Char"; mso-margin-top-alt:auto; margin-right:0in; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; mso-outline-level:2; font-size:18.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast;} p {mso-style-noshow:yes; mso-style-priority:99; mso-margin-top-alt:auto; margin-right:0in; mso-margin-bottom-alt:auto; margin-left:0in; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman","serif"; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast;} </style> <h2 style='margin:0in;margin-bottom:.0001pt'> <span style='font-size:11.5pt; mso-fareast-font-family:"Times New Roman"'> NEW FASHIONS <o:p></o:p> </span> </h2> <div> <p class=MsoNormal> <b> <span style='font-size:11.5pt;mso-fareast-font-family:"Times New Roman"'> NEW FASHIONS <o:p></o:p> </span> </b> </p> </div>< <p style='margin:0in;margin-bottom:.0001pt'> <b> <span style='font-size:11.5pt'> NEW FASHIONS <o:p></o:p> </span> 

转换之后本来对块元素设置的css到了span上,很多就不好使了,为了避免作者建议使用margin,其实我觉得还是老老实实使用table得了

转载于:https://www.cnblogs.com/z5337/p/4783215.html

[转]Outlook HTML渲染相关推荐

  1. 编写Outlook html邮件

    最近1个月的时间,都在研究和实现怎么将HTML基于Outlook邮件发送和接收. 整个开发过程下来,只想说一句,我真的太难了~~ 如果是第一次编写邮件html,并将其通过Outlook等邮箱应用发送给 ...

  2. html邮箱提示的属性,HTML 邮件兼容问题与解决方案

    HTML 邮件内容虽然也是 HTML,但是和我们在网页上使用的 HTML 不同,因为安全原因,各大邮箱服务商及邮件客户端都会对邮件内容进行一定程度上的处理,不会按照你写的原本 HTML 展示. 在桌面 ...

  3. 渲染到ui_虚幻4渲染编程(UI篇)【第二卷:程序化UI特效-[1]】

    MY BLOG DIRECTORY: 小IVan:专题概述及目录​zhuanlan.zhihu.com INTRODUCTION: 当遇见某些特殊需求,比如对游戏效果有很多变化的要求,这时使用静态的贴 ...

  4. 虚幻4皮肤材质_虚幻4渲染编程(材质编辑器篇)【第六卷:各向异性材质amp;玻璃材质】...

    My blog directory: YivanLee:专题概述及目录​zhuanlan.zhihu.com Introduction: 各向异性材质 玻璃材质 材质编辑器篇的很多效果都非常简单,可以 ...

  5. code标签无法渲染html,【菜鸟笔记】记一次django无法正常在ie和edge浏览器渲染html页面-站长资讯中心...

    如图所示,django无法渲染html显示成下载文件了 一步一步的从render ==>HttpResponse ==>HttpResponseBase 找到 即django文件夹下的ht ...

  6. flask渲染图像_用于图像推荐的Flask应用

    flask渲染图像 After creating a Python-based machine learning application you might want to get it runnin ...

  7. 虚幻4渲染编程(材质编辑器篇)【第三卷:正式准备开始材质开发】

    My blog directory: YivanLee:专题概述及目录 Introduction: 前面两章我们已经完成了对工具的研究,下面我们久正式开始启程啦!后面的内容可能就比较美术了. 还是老规 ...

  8. 虚幻4渲染编程(材质编辑器篇)【第五卷:布料,丝绸纱皮革棉】

    My blog directory: 小IVan:专题概述及目录 Introduction: 现在的游戏对质感要求越来越高(我估计是硬件越来越好,可编程管线越来越来越完善).游戏的画面已经越来越接近影 ...

  9. outlook邮件存到本地_如何在Microsoft Outlook中将电子邮件(和其他项目)另存为文件

    outlook邮件存到本地 You can save your Outlook emails, contacts, and appointments as individual files. Savi ...

最新文章

  1. 在linux oracle 10g/11g x64bit环境中,goldengate随os启动而自己主动启动的脚本
  2. 怎么关闭电脑开机自动启动的程序_软件自动开启很烦人?如何彻底关掉Mac电脑开机自动开启的应用程序?...
  3. 剑指offer——面试题5:从尾到头打印链表
  4. 西门子pcs7 V9.1用Sim_EKB_Install安装长密匙失败
  5. 幼儿抽象逻辑思维举例_语言训练幼儿逻辑思维——抽象篇
  6. html5考试总结300字,期中考试总结300字(优秀篇)
  7. CSS Gird布局用法
  8. python将word表格转写入excel
  9. neo4j java 模糊搜索,Neo4j 使用cypher语言进行查询
  10. CAPM与多因子定价模型
  11. Ubuntu下面steam的安装
  12. Android 使用MediaPlayer播放本地raw资源超简单实现点击播放效果
  13. python setDaemon
  14. php画奥运五环颜色,php趣味 - php 奥运五环
  15. 以300亿美元收购塞纳,甲骨文为何这么迫切?
  16. 被忽视的最美花瓶、白雪公主Lily Collis终于翻红了!
  17. 实验篇---MPLS v+p+n + OSPF sham-link
  18. DBCP 数据库连接池的实现
  19. contos 7新手上路之四:使用与美化
  20. 腾龙健康冲刺A股上市:计划募资10亿元,彭学文家族色彩浓厚

热门文章

  1. 盘点上海AI行业的10岁、20岁和30岁们
  2. 颜宁教授当年若当选科学院院士,她还会出走清华吗?
  3. C++中list的使用方法及常用list操作总结
  4. java自动雨刷系统,安装雨量传感器实现自动大灯/自动雨刷(详细方法)多图!!
  5. centos7编译安装mysql5.7_在Centos7源码包编译安装MySQL5.7
  6. 园艺专业相关计算机知识,2017年秋园艺概论(专业选修)
  7. linux同时链接多个库,通过Shell脚本同时监控多个数据库负载
  8. wordpress怎么设置文章页面不打开新的窗口_2019 WordPress外贸网站SEO优化基础设置(新手图文教程)...
  9. / /* /**的区别
  10. ContentProviderOperation批量操作提升性能