11
  1. <!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->这个和其他类似的 IE 代码行在 HTML5 文档中是什么意思?

  2. 如果我必须使某些 css 功能与 IE8 或更低版本兼容,那么上面提到的代码行或其中提到的 html 类是否有帮助?

  3. 如果 #2 的答案是“否”,那么我是否应该使用本文中提到的条件 IE 样式表——http://css-tricks.com/how-to-create-an-ie-only-stylesheet/

  4. 如果 #3 的答案也是“否”,那么应该做些什么来使 css 功能在旧 IE 版本中兼容。任何参考网站/演示都会有很大帮助!

4

4 回答 4

11
  1. 这是一个有条件的 IE 语句。它们只能由 IE 读取。任何其他浏览器都会将它们作为任何普通注释读取,请分别注意语句的开头和结尾处的 和<!---->IE 具有识别此注释的特殊代码,并将注释中的内容用作常规 HTML。具体到您上面粘贴的代码,IE 条件语句将 ie6 类应用于 HTML 标记。通过这种方式,您可以通过首先在您的 css 选择器中引用该类来为 IE 仅提供某些元素的后备。例如.ie6 #header {},如果存在 IE6 类,则仅适用于标头,并且由于条件语句,该类将仅存在于 IE6 中。

  2. 按照与上面相同的样式,您将使用以下代码:<!-- [if IE 8]><html class="ie ie8" lang="en"><![endif]-->

  3. 如果您愿意,您可以使用 IE 样式表,无论哪种方式,您都将获得基本相同的结果。我个人会将上述方法与 HTML 标记上的类一起使用,然后使用通常加载的单独的 css 文件,称为 ie.css。在此文件中,您将只有 IE 样式。请注意,使用此方法不需要在条件 IE 语句中设置样式表。作为一个单独的样式表的唯一真正目的是为了组织目的。如果您有中到大量的 IE 条件代码,我也只会这样做。如果您有最少的 IE 后备代码,只需在您的主样式表中修复的代码旁边包含代码。

  4. 您还可以使用ModernizrSelectivizr等工具在一定程度上扩展 IE 支持

于 2013-09-13T13:43:03.900 回答
3

您在问题中讨论的所有示例都旨在检测浏览器是否为 IE(和 IE 版本),然后尝试从那里处理它。

请注意,这不是最佳实践。

如果您需要处理浏览器差异和缺失功能,那么处理它的最佳方法是使用一种称为功能检测的技术,而不是浏览器检测。

我推荐的是查找一个名为Modernizr的库。对于您尝试做的事情,这几乎肯定是比您问题中的任何想法更好的起点。

为了修复特定的浏览器功能,Modernizr 团队还提供了一个名为“polyfills”的附加库列表。找出您需要支持的功能,并查看列表以找到满足您需要的 polyfill 脚本。其中一些最好通过 Modernizr 加载;其他人可以自己运行。

我会避免进行任何浏览器或版本检测,除非它绝对是最后的手段。

使用 polyfill 时要记住一件事:旧 IE 版本中缺少许多浏览器功能。还有一些 polyfill 脚本可以帮助您实现其中的大部分。但是,请不要认为您可以简单地包含每个 polyfill 并将旧的 IE 版本变成更现代的浏览器。

一个简单的事实是旧的 IE 版本又旧又慢。添加 polyfill 会使它们变慢。您应该仔细考虑每个功能,并决定是否真的需要对其进行 polyfill。如果没有它,该网站仍然可以使用吗?在许多情况下,您最好让旧浏览器在没有某些功能的情况下工作。

于 2013-09-13T13:47:37.063 回答
1

正如@FDL 指出的那样,如果您有适量的样式来应用各种版本的 IE,请使用条件样式表。

对于最小的定位调整,我使用 html 类(如 ie8 或 ie9)并将修改放入我的主样式表中。

例如:

.filter-bar .item { float: left; vertical-align: top; }
.ie8 .filter-bar .item { position: relative; top: 2px; } /* fix a gap in IE8 */
于 2013-09-13T13:41:28.490 回答
0

1) 这意味着如果您有 Internet Explorer 版本 7 及以下版本,请将此类包含在 html 标记中

2)是的,你可以有这样的CSS:

html.ie.ie6 .someClass {
 color: red;
}

仅当 IE 为 7 及以下版本时才会应用

3)你也可以这样做。有时您需要将两者结合起来

4) 不适用

于 2013-09-13T13:41:33.377 回答