IE9浏览器模式和条件注释

4

我正在使用HTML Boilerplate文档头,它会为IE版本添加各种类。当使用IE9(按F12)并更改浏览器模式时,我记得这总是会显示相关浏览器(兼容模式下的IE8 / IE7或IE7),然而,现在似乎不起作用了。

<!DOCTYPE html>
<!-- [if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!-- [if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!-- [if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]-->
<!-- [if gt IE 8]><!--><html class="no-js" lang="en"> <!--<![endif]-->
<head>

网站可在http://rangeessentials.petersenuploads.co.uk/上查看。

但是,在我的IE7虚拟机中似乎不起作用。我错过了什么,因为我总是得到最终的标记而没有IE类。

1个回答

0

不要使用多个 <html> 开始标签,这样做可能是非法的。相反,您应该有多个样式表,然后在这些样式表中相应地应用相关样式:

<!-- [if lt IE 7]><link type="text/css" rel="stylesheet" href="Styles_IE-7.css" /><![endif]-->
<!-- [if IE 7]><link type="text/css" rel="stylesheet" href="Styles_IE7.css" /><![endif]-->
<!-- [if IE 8]><link type="text/css" rel="stylesheet" href="Styles_IE8.css" /><![endif]-->
<!-- [if gt IE 8]><link type="text/css" rel="stylesheet" href="Styles_IE8-.css" /><![endif]-->

但即使在您的代码中,最后一个条件注释中也有<!--><!--,这可能是问题所在。

1
应该没问题。目前大多数样板解决方案都在使用它,如http://stuffandnonsense.co.uk/projects/320andup/,http://html5boilerplate.com/。 - Jeepstone
我不明白它的目的。有多个HTML开始标签比有多个样式表更好吗? - Mr. TA
2
不,只有一个<html>标签被渲染,但它允许您执行像.lt-ie7 ul li {display: inline; zoom:1}这样的操作,其中您可能已经使用了display: inline-block; 基本上是一种更简洁的方式来针对IE浏览器进行目标定位,而不使用hack。请查看http://html5boilerplate.com/。 - Jeepstone
哦,我明白了。但是,与其渲染多个 <html> 标记中的一个,使用适当的样式表之一来渲染多个 <link> 标记不是更容易吗? 就像我的答案一样。然后,您就可以在 Styles_IE-7.css 中使用ul li { ... }而不是 .lt-ie7 ul li { ... } - Mr. TA
1
过去是这样,但现在针对响应式网站,你可以根据屏幕尺寸(媒体查询)加载样式表。这样做,你就可以为每个IE版本和每个屏幕尺寸得到一组样式。这样,你可以将所有的IE修复合并到一个样式表中(也更有利于下载速度,因为你没有大量的文件)。 - Jeepstone
当然可以,但你只是赢了一点点:从两个样式表变成了一个。对于给定的分辨率,如果使用<link>方法,您将为所有浏览器加载1个样式表,并为客户端加载指定的IE版本1个样式表;而使用<html>标签,则可以在1个样式表中包含所有IE修复程序。虽然从性能方面来说有益,但我认为从可读性和可维护性的角度来看,最好使用样式表“组合器”和“压缩器”来提高性能。 - Mr. TA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接