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