CSS方法包含IE6的Hack

5
  • CSS有@import,对吗?
  • IE6理解*html选择器hack,对吗?

是否可能将它们结合起来使用?

//*html @import url(ie6hacks.css);

或者,可能,
//*html { @import url(ie6hacks.css); }

优秀的浏览器应该跳过此内容,但它在IE6上仍然有效吗?这种解决方案看起来怎么样?我可以清楚地看到它像普通CSS一样难看。

3个回答

12

当你可以使用条件注释来仅包含所需的CSS时,为什么要费心去使用那种古怪的hack呢?

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

一些资源:

如果你真的必须使用@import,你可以利用IE不遵循@import规则的事实。通常@import必须是样式表或样式标签中的第一项,否则它将完全被忽略。然而,在我测试的IE6中好像并不在意这个规则。与此类似,你可以这样做:

<style type="text/css">
.NotARealClass { }

@import url("ie-style.css");
</style>

请注意,我除了在FF3中测试过(其中无法加载ie-style.css),还没有在其他任何地方测试过,在IE6中可加载它。结果可能因情况而异。


我知道,谢谢。为什么?因为我认为将CSS hack保留在CSS内部会更聪明、更好看。 - temoto
如果您的所有ie6特定css都在单独的文件中,则可以采用这种方法。如果您有非常少量的ie6特定css,您可以使用下划线hack,例如_width被ie6(但不是ie7)解释为width,尽管这样做将无法验证.. - Svante Svenson
条件注释并不是一种黑客技巧,而更多的是利用某个浏览器的扩展功能。选择器黑客则完全是一种黑客技巧。 - Dan Lew
@temoto:是的,把CSS hack放在一个文件中很好。我曾经参与的一些项目没有共同的头文件,但它们都包含了一个基本的CSS文件。如果必须要回溯修复所有页面以包含条件注释,那将会很糟糕,所以像你所问的这样的技巧会非常棒。 - Crescent Fresh
感谢您添加信息,丹尼尔。那个.NotRealClass看起来是一种非常有趣的技术。 - temoto

4
能否将它们结合起来,例如:
* html @import url(ie6hacks.css);

类似@import的No. at-rules不是选择器,因此不能与其他选择器组合使用。

有一些方法可以将at-rules作为hack使用,例如:

@import url(/* no! */iehacks.css);

这段代码将被IE6/7加载,但其他浏览器不会。然而,我不建议使用它;这种东西可能非常脆弱。而且,这个特定的例子也是无效的CSS。

正如Daniel所说,如果您想要针对hack使用单独的.css文件,最好的方法是有条件地包含链接标记。 "* html" 的美妙之处在于可以将hack规则放在同一个样式表中,如果只有几个规则,更容易管理;如果您已经有了一个单独的样式表,那么它没有任何优势。

我认为“* html”适用于IE6是唯一仍然合法使用的hack。所有与盒模型相关的内容都随着IE5一起消失了 - 假设您不使用IE6 Quirks Mode(您不应该使用) - 而其他浏览器,即使是IE7,通常也太好了,无法通过简单的hack攻击;少数可以针对它们的hack过于复杂/脆弱/无效,无法真正使用。

(作为简化的盒模型hack的发明者,我对它们表示热烈的告别。)


哈哈哈,虽然这是一个巧妙的技巧,但每次我学习一种新的IE hack时,我的大脑都会在知识上扩张,并同时在痛苦中收缩。 - Dan Lew

4

很遗憾,*html hack不能用于导入其他样式表。

这里有一篇文章,解释了该hack和其他有用于攻击IE特定错误的hack。


感谢您的清晰回答。不幸的是,我今天已经用完了我的投票次数 :) - temoto

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