- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 HTML 电子邮件开发的新手,我试图通过剖析“reallygoodemails.com”上的 HTML 电子邮件来提高我对 HTML 电子邮件结构的理解。
在我的尝试中,我遇到了四种不同的方法来为非 Microsoft Outlook 的电子邮件平台创建条件回退。
版本 1。
<!--[if !mso]><!-->
<style>
.innerTable{
border: 1px solid black;
}
</style>
<![endif]-->
版本 2。
<!--[if !mso]><!---->
<style>
.innerTable{
border: 1px solid black;
}
</style>
<![endif]-->
版本 3。
<!--[if !mso]><!---->
<style>
.innerTable{
border: 1px solid black;
}
</style>
<!--<![endif]-->
版本 4。
<!--[if !mso]>-->
<style>
.innerTable{
border: 1px solid black;
}
</style>
<!--<![endif]-->
谁能告诉我应该使用哪个版本并解释为什么该特定版本实际上可以跨平台工作?例如,您选择的回退语法如何诱使 MSO 忽略代码?
最佳答案
条件注释是 Microsoft 在 Internet Explorer(直到 IE9)和 Word 的呈现引擎(由 Outlook 2007 及更高版本使用)中实现的一种机制。这个想法是通过常规的 HTML 注释为渲染引擎隐藏内容,这样其他渲染引擎就看不到它。我将详细说明我使用的语法,然后再回到您观察到的语法之间的区别。
这是我用来从 Outlook 中隐藏内容的语法:
<!--[if !mso]><!-->
<style>
.innerTable{
border: 1px solid black;
}
</style>
<!--<![endif]-->
让我们一步一步地打破这个,看看 Outlook 和其他渲染引擎将如何解释它。
<!--
: 这是 HTML 注释的开头。每个渲染引擎都希望接下来的内容成为评论的一部分,并且不会在屏幕上显示它。[if !mso]>
:这是支持条件注释的渲染引擎(IE,Outlook)的条件。其他渲染引擎和浏览器只会将其视为纯文本,评论的一部分。但 IE 和 Outlook 将评估条件。这里的条件是!mso
(不是 mso)。 Outlook 会看到这一点并认为“好吧,我是 mso!在找到 [endif] 语句之前,我宁愿忽略后面的所有内容。”<!-->
:这将关闭在步骤 1 中打开的 HTML 注释。Outlook 会忽略它,因为它是 !mso
的一部分内容。但是其他渲染引擎会理解这一点并认为“好的,这个评论结束了。最好准备好执行并显示下一步。”<style>…</style>
:这是我们的 HTML 内容。它对 Outlook 是隐藏的,因为它仍然是 !mso
的一部分。健康)状况。其他渲染引擎将正常渲染它。<!--
: 这是 HTML 注释的开头(再次)。<![endif]
:这是支持条件注释的渲染引擎(IE,Outlook)的结束条件语句。 Outlook 将对此进行评估并认为“好的,条件时间结束。然后回去工作。”。其他渲染引擎和浏览器只会将其视为纯文本,即评论的一部分。-->
: 这是在第 5 步打开的 HTML 评论的结尾。所有呈现引擎都会对此进行评估。现在您可能会想:“为什么我们使用 <!-->
在第 3 步,而不仅仅是 -->
?好吧,这是一个很好的技巧,可以考虑到其他支持条件注释的渲染引擎(如 Internet Explorer)。 IE 将看到 !mso
条件并思考“好吧,我当然不是 mso。让我们看看我的下一步是什么!”如果我们只是有一个结束的 HTML 注释(-->
),IE 会 panic ,因为它会看到一个没有开始的结束。这就是诀窍:<!-->
同时打开和关闭 HTML 注释。我们也可以这样写 <!-- -->
或 <!----->
(正如您在版本 2 和 3 中注意到的那样)。
至于您发布的其他版本之间的区别,版本 1 和 2 仅使用 <![endif]-->
作为结束语。这对于 Outlook 是正确的,但对于任何其他呈现引擎都是不正确的。幸运的是,他们无论如何都将其呈现为 HTML 注释。所以它最终可以正常工作,但它在标准方式下是无效的。
所以我的建议是始终使用以下语法来隐藏 The Outlooks 的内容:
<!--[if !mso]><!-->
…
<!--<![endif]-->
如果您只需要在 The Outlooks 上显示内容:
<!--[if mso]>
<![endif]-->
其他可能有用的资源:
关于HTML 电子邮件 : ! mso 条件技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70935901/
所以我在我的电子邮件中使用@font-face,而 Outlook 2007、2011 和 2013 给我带来了麻烦。因此,我将 @font-face CSS 包装在条件 标签中,这对于 outlo
我有一个包含 3 列的页脚,这些列都严格嵌套在 HTML 电子邮件模板的基于表格的布局中。我正在尝试修复页脚,其中第三列的行高与前两列的顶部基线不匹配。 我一直在研究以查看是否有解决此问题的方法,并尝
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
我是 HTML 电子邮件开发的新手,我试图通过剖析“reallygoodemails.com”上的 HTML 电子邮件来提高我对 HTML 电子邮件结构的理解。 在我的尝试中,我遇到了四种不同的方法来
I need to resize an image using Microsoft Office prefixes (MSO) It's important to note that I am una
我需要知道除了有限的 css 样式外,还可以使用 MSO 样式在 msWord 中设置哪些选项或属性,我已经找到了该信息,但没有找到其他信息。 例如,我遇到了 mso-add-space:auto 并
我正在使用 spring thymeleaf 制作电子邮件模板。我需要在我的模板中包含对 MS-outlook [if mso] 的检查。我需要在 block 内设置一个变量。我想知道是否有办法做到这
Windows 8.1 和 办公室 2013 如果我尝试在 Excel 中打开无效的电子表格 XML 文件,弹出通知会简要说明问题并指向 Content.MSO 文件夹中的详细日志文件。但是,当我打开
我正在根据我未创建的模板编写 html 电子邮件。它有很多像这样的 mso css 标签:mso-hide: all; 我明白这些标签的用途,但它们会使 VSCode 抛出如下错误: [css.lin
我正在将数据从网页导出到 Excel。这应该很简单,但是有 数据中的标签。这会导致 Excel 在数据应全部位于同一单元格中时创建新行。经过一些研究,我发现 mso-data-placement 应该
我知道使用了哪些其他浏览器特定代码名称,例如 -moz- 和 -webkit-,前者用于 mozilla,后者用于 chrome 和 safari,但 -mso- 到底是什么?它代表 Microsof
谁能告诉我,为什么使用条件注释? 会影响9以下的IE浏览器吗? 最佳答案 此处夹在开始和结束标记之间的代码只会影响 Microsoft Outlook 9 或更高版本的客户端。请注意,因为它说 mso
谁能告诉我什么是MSO?我的意思是,现在我正在研究电子邮件模板 HTML,我在 Gmail 上做了它,它工作得很好,但当涉及到 Outlook 时,它就变得很奇怪。特别是图像部分和尺寸,一切都一团糟。
2023 年更新:这个问题最初是在 2013 年提出的 - 当时的情况和支持的技术发生了很大的变化。接受的答案对于旧客户端来说是实用且有效的,但是 Frank Hagenson's answer最有可
谁能告诉我什么是MSO?我的意思是,现在我正在研究电子邮件模板 HTML,我在 Gmail 上做了它,它工作得很好,但当涉及到 Outlook 时,它就变得很奇怪。特别是图像部分和尺寸,一切都一团糟。
目前我使用的是 tinymce 的一个非常旧的版本 (2.8)现在我正在尝试将其升级到最新版本 (4)。在那个过程中我遇到了一些麻烦,主要的是显示 在隐藏在旧版本中的 html 查看器中, 我将此编辑
MS Word 使用这些 html 部分来定义 anchor : '> 在 javascript 中,我想收集这些项目并对其进行编辑。我可以获得所有跨度元素: var msWordAnchors=do
我的代码中有很多链接。我从代码中获取了所有链接,但哪些链接显示在 MSO 中代码我没有得到这些链接。在 MSO代码没有标签,这就是为什么我很难选择链接。我尝试过 document.querySelec
I need to pre-format an MS page. Particularly fonts so that they are consistent with a website. MS s
我已经应用 Bulletproof 背景来实现 Outlook 的背景图像。背景图片加载正常,但其样式/结构与 Outlook 上的不符。 它在 Gmail 上的样子(我想要的样子): 它在 Outl
我是一名优秀的程序员,十分优秀!