我最近发现了一些关于 Internet Explorer 条件注释的小细节,很多人在使用时会遇到麻烦。 Internet Explorer 有两种不同的条件注释,它们使用略微不同的语法:**向下兼容隐藏** 和 **向下兼容显示** (microsoft 文档)。
向下兼容隐藏
<!--[if expression]>
HTML
<![endif]-->
您可能知道 HTML 注释是像这样 <!-- hi there -->
。现在看看上面的代码。这是一个块 HTML 注释。当您**希望所有其他非 IE 浏览器忽略整个区域**时,使用这种 IE 条件注释。因为它是 HTML 注释。
例如,您永远不会使用这种样式来执行 [!IE]
,因为这样会导致非 IE 浏览器无法真正渲染该内容。
向下兼容显示
<![if expression]>
HTML
<![endif]>
看到区别了吗?没有双连字符。这些不是 HTML 注释,因此里面的内容会被非 IE 浏览器看到并渲染。
上面语法的缺点是它是不合法的代码。HTML 验证器会将其标记为“**无效注释**”。(♥)。所以它通常被写成
<!--[if expression]><!-->
HTML
<!--<![endif]-->
它做同样的事情,但它是有效的。这对于包含 [!IE]
的表达式来说是理想的。
简而言之…
向下兼容隐藏 = 仅在 IE < 10 的某些子集中显示向下兼容显示 = 在 IE < 10 的某些子集中显示,以及所有非 IE 浏览器中显示。如果您想快速了解所有条件注释,请点击这里。
结束
当 IE 10 发布时,它将不支持条件注释,针对特定 IE 版本提供特定资源和内容的时代即将结束。谢天谢地。虽然条件注释在修复那些旧浏览器的问题方面非常有用,但如果根本没有问题,情况会好得多。我相信有些人会因为 IE 的记录而感到紧张,但我们只能拭目以待。从目前的情况来看,IE 10 将是一个非常优秀的浏览器,如果不是最符合标准的浏览器,也是其中之一。
欢呼没有条件注释的时代!这将是标准真正实现的一天,再也不用抨击 IE 了。
没错,IE 只有在采用像 chrome 那样简单的自动更新策略,以及 firefox 正在努力实现的策略后,才会变得有用。你能想象在 2020 年还在使用 IE 吗?这正是我们现在所面临的情况。它就像目前现代网站的兼容性一样糟糕。
当一个网页浏览器/渲染器可以被制作出来,然后被留作一个时间快照的时代已经过去了,但是代码然后留下的方法依然存在。
为了另一个十年的不兼容性干杯!
IE 将自动更新http://www.computerworld.com/s/article/9222811/FAQ_Microsoft_s_new_IE_auto_upgrade_scheme_explained
没错,没错,通过微软自动更新。但是根据那篇文章,奇怪的是,不是“安全补丁”到浏览器本身。不知道该怎么想,显然 chrome 作为独立的自更新程序,这意味着 chrome 的版本号无关紧要,并且会快速更新,这很好。所以 XP 上的人可能会更新到 IE8,其他人会更新到 IE10,但不会自动获得安全补丁和渲染器补丁?
显然任何更新机制都比没有更新好,所以如果今年晚些时候一切顺利,任何仍然使用 IE6、IE7 的人都是明确选择这样做的,那些疯子。
我们需要超越那些“停留在特定版本号”并且不继续更新的浏览器,这在总体上是一个灾难,我很高兴 Chrome 向我们展示了一种更好的方法。
所以你的意思是说 IE6 和 IE7 上的人会收到升级通知,并被允许升级到 10?
不。
根据那篇文章,那些尚未拒绝某些更新设置的 XP 用户将收到通知(或者直接更新,不确定),从 IE6 和 IE7 更新到 IE8(与 XP 兼容的最新 IE 版本)。
Vista/Windows7 上的人会更新到最新的稳定版本,无论是什么版本。
只有在美国,在微软决定在那里发布的时候才会发生,现在他们在澳大利亚和巴西进行试点。
再说一遍,这都是根据那篇文章,我自己甚至没有运行 Windows。
…呃,那应该是:它就像现在的 IE6 那样,对现代网站来说很糟糕。
移动键盘,我能做什么。
感谢您提供这篇文章。我意识到在破解 IE 时有很多方法,条件注释和 CSS 都不更好,一切都取决于设计师。
现在 IE9 看起来非常符合标准,我喜欢它,但它仍然在某些方面落后于其他浏览器。其中包括对 WebGL 的支持,所以只有在解决这些小问题后,放弃条件注释才是可取的。设计师不会盲目信任 IE,因为它已经造成了很多损失。
我发现即使 IE9 在一些基本方面也存在缺陷,比如盒子模型。我最近不得不做一些奇怪的操作来让下拉菜单在 IE 中正常工作。结果发现我们碰到了旧的“盒子总是扩展到包含它们的内容”错误,我相信这个错误应该在 7 之后就修复了。
现在,微软可能已经改弦易辙,但 IE9 甚至连盒子模型都弄错了,这表明只有当微软最终放弃 Trident,采用更成熟的渲染引擎时,我才会尊重 IE。
当然,将 IE 版本和 Windows 版本分离也有帮助。
为什么微软要移除条件注释?
五年后,我们肯定会在 IE 10 中遇到一些需要使用条件注释的怪癖?
此外,我以为条件注释用于向前兼容,而不是向后兼容?
用大炮把他们轰出去!
嗯,我不明白。当我们仍然需要它们来支持那些不能正确渲染的旧浏览器时,为什么微软移除条件注释是一件好事?我是不是漏掉了什么?
旧浏览器仍然会支持条件注释。他只是说 IE10 不会响应像这样的东西
好的,感谢您确认这一点。希望这是因为他们计划从现在起完全兼容。我迫不及待地想要不再支持 IE6。我在最近做的两个网站上都遇到了这个问题,我认为我将坚持到底,不再在我的工作中支持它。抱歉。我们作为开发者需要在这个问题上带头。我们毕竟是 100% 创建这些网站的人。让我们说不。开始一个说不的日子,那将是我们停止所有支持的那一天。我们让媒体参与进来,每个人都知道他们需要在那个时候升级浏览器,否则就无法访问网站。
下台演讲 :-)
作为在 Windows 8 平板电脑上使用 IE10 的用户,我可以肯定地说,我们将来不再需要担心 IE 了。太棒了!他们在这一点上做对了。在某些情况下,它的过渡效果甚至更好。
对于你们这些技术狂人来说,运行 IE10 的英特尔 Atom 平板电脑的性能可以超过使用 Firefox/Chrome 的 i7 Sandy Bridge Mac。在我看来,这相当可观。
事实上,IE9 仍然很棒……只是没有过渡效果。
但这并没有改变任何事情……总是有很多人使用旧版本的 IE。所以对于设计师来说,这仍然很痛苦:|
感谢您提供的信息。
等待 IE 10 推出……
:)
很高兴知道这些,Chris,事实上,在过去的两天里我一直被这个问题困扰。IE 真的是个 B!tc@! 我会尽快将这些投入生产,哈哈。
感谢您提供有用的信息,我正在等待 IE 10 版本。
我不明白。这是用来做什么的?HTML 是一种标记语言,直接在 HTML 中输入编程有什么意义?有 JS,服务器端脚本,我甚至理解 smarty,但这个……我认为它完全没有用。
正如你在开头提到的,我是那些为条件注释问题苦苦挣扎的人之一。感谢您提供如此清晰的解释。
我的网站在所有浏览器中布局都很好,但在 IE 10 中有问题。结果发现,IE10 需要与我为旧版 IE 浏览器设置的条件样式相同。所以,在我看来,他们放弃条件注释是一个错误的决定。