是否有可供使用的浏览器条件列表,包括样式表?

时间:2020-03-05 18:48:18  来源:igfitidea点击:

我见过人们在他们的HTML中做这样的事情:

<!--[if IE]>
  <link rel="stylesheet" href="ie.css" type="text/css" />
<![endif]-->

这对所有现代浏览器都有效吗?是否存在将与那种if语句一起使用的浏览器类型列表?

编辑

谢谢罗斯。有趣的是要找到有关gt,lt,gte和lte的信息。

解决方案

回答

这适用于所有浏览器,因为除IE以外的任何其他内容都显示&lt;!-IGNORED COMMENT->。如果IE包含条件子句,则仅IE会读取该注释。看看这篇文章

我们还可以指定IE的版本。例如:

<!--[if IE 8]>
<link rel="stylesheet type="text/css" href="ie8.css" />
<![endif]-->

回答

除了Ross的答案,我们只能将Internet Explorer呈现引擎作为条件注释。其他浏览器没有类似的构造。例如,我们不能编写针对Firefox的条件注释,但被Internet Explorer忽略。

我实现与上面的示例相同的效果的方法是嗅探用户代理字符串。然后,我为该浏览器提供了一个合适的CSS文件。这不是完美的,因为有时人们会出于兼容性考虑更改用户代理字符串。

针对不同浏览器的另一种方法是利用特定于浏览器的黑客。这些问题特别令人讨厌,因为它们通常依赖于浏览器中的错误,而且这些错误很容易得到修复!

我认为,用户代理嗅探是最好的全方位解决方案。

回答

如果可以使用Javascript,则有以下几种选择:

navigator.appName
navigator.appVersion

关联

或者使用jQuery之类的库来增强功能。

最后,我们可以使用QuirksMode中的BrowserDetect对象。

一旦有了浏览器的名称和版本,就可以插入HTML以链接到样式表或者包含其他标签。

回答

条件注释仅适用于IE(版本5及更高版本)。 Microsoft的官方文档在这里。如果要使用它们,最好的策略是在常规包含之后有条件地包含外部样式表或者javascript文件。这意味着在IE上,我们特定于IE的代码将覆盖其他所有内容。在任何其他浏览器上,该代码将被视为注释,并且被解析器忽略。