<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->
这个和其他类似的 IE 代码行在 HTML5 文档中是什么意思?如果我必须使某些 css 功能与 IE8 或更低版本兼容,那么上面提到的代码行或其中提到的 html 类是否有帮助?
如果 #2 的答案是“否”,那么我是否应该使用本文中提到的条件 IE 样式表——
http://css-tricks.com/how-to-create-an-ie-only-stylesheet/
如果 #3 的答案也是“否”,那么应该做些什么来使 css 功能在旧 IE 版本中兼容。任何参考网站/演示都会有很大帮助!
4 回答
这是一个有条件的 IE 语句。它们只能由 IE 读取。任何其他浏览器都会将它们作为任何普通注释读取,请分别注意语句的开头和结尾处的 和
<!--
。-->
IE 具有识别此注释的特殊代码,并将注释中的内容用作常规 HTML。具体到您上面粘贴的代码,IE 条件语句将 ie6 类应用于 HTML 标记。通过这种方式,您可以通过首先在您的 css 选择器中引用该类来为 IE 仅提供某些元素的后备。例如.ie6 #header {}
,如果存在 IE6 类,则仅适用于标头,并且由于条件语句,该类将仅存在于 IE6 中。按照与上面相同的样式,您将使用以下代码:
<!-- [if IE 8]><html class="ie ie8" lang="en"><![endif]-->
如果您愿意,您可以使用 IE 样式表,无论哪种方式,您都将获得基本相同的结果。我个人会将上述方法与 HTML 标记上的类一起使用,然后使用通常加载的单独的 css 文件,称为 ie.css。在此文件中,您将只有 IE 样式。请注意,使用此方法不需要在条件 IE 语句中设置样式表。作为一个单独的样式表的唯一真正目的是为了组织目的。如果您有中到大量的 IE 条件代码,我也只会这样做。如果您有最少的 IE 后备代码,只需在您的主样式表中修复的代码旁边包含代码。
您还可以使用Modernizr和Selectivizr等工具在一定程度上扩展 IE 支持
您在问题中讨论的所有示例都旨在检测浏览器是否为 IE(和 IE 版本),然后尝试从那里处理它。
请注意,这不是最佳实践。
如果您需要处理浏览器差异和缺失功能,那么处理它的最佳方法是使用一种称为功能检测的技术,而不是浏览器检测。
我推荐的是查找一个名为Modernizr的库。对于您尝试做的事情,这几乎肯定是比您问题中的任何想法更好的起点。
为了修复特定的浏览器功能,Modernizr 团队还提供了一个名为“polyfills”的附加库列表。找出您需要支持的功能,并查看列表以找到满足您需要的 polyfill 脚本。其中一些最好通过 Modernizr 加载;其他人可以自己运行。
我会避免进行任何浏览器或版本检测,除非它绝对是最后的手段。
使用 polyfill 时要记住一件事:旧 IE 版本中缺少许多浏览器功能。还有一些 polyfill 脚本可以帮助您实现其中的大部分。但是,请不要认为您可以简单地包含每个 polyfill 并将旧的 IE 版本变成更现代的浏览器。
一个简单的事实是旧的 IE 版本又旧又慢。添加 polyfill 会使它们变慢。您应该仔细考虑每个功能,并决定是否真的需要对其进行 polyfill。如果没有它,该网站仍然可以使用吗?在许多情况下,您最好让旧浏览器在没有某些功能的情况下工作。
正如@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 */
1) 这意味着如果您有 Internet Explorer 版本 7 及以下版本,请将此类包含在 html 标记中
2)是的,你可以有这样的CSS:
html.ie.ie6 .someClass {
color: red;
}
仅当 IE 为 7 及以下版本时才会应用
3)你也可以这样做。有时您需要将两者结合起来
4) 不适用