0

我有一个 CSS 困惑。

如果我这样做:

<!--[if gte IE 8]> <link href="/ELS_Soulard_Project-web/css/soulard_base_ie_butchery.css" rel="stylesheet" type="text/css" media="screen, projection" /> <![endif]-->

该行代码显示在 IE 9 的顶部,并且未读取控制 IE 字体并提供背景渐变的 css 文件。但是...该页面在 Firefox 和 Chrome 中看起来很棒。

如果我将语句更改为:

<!--[if gte IE 8]><!--> blah blah blah <!--<![endif]-->

品种繁多,在 IE 9 和 Chrome 中看起来很棒....但是!Firefox 最终实际上读取了该文件,并最终缩小了自己的字体并更改了行高,因此这一切看起来都像丑陋的双倍间距。我知道 Firefox 正在阅读它,因为我访问了仅适用于 IE 的文件并更改了内容,它反映在 Firefox 中。

有人可以帮我弄清楚发生了什么吗?

这是在 Glassfish 3.1.2 上运行的。

4

2 回答 2

0

在您的第二个示例中,您已<!-->在条件注释中添加。这样,条件注释仍处于打开状态,但 HTML 注释已关闭,并且其间的代码由任何浏览器呈现。

与此块进行比较:

<!--[if IE 6]>
<html id="ie6" dir="ltr" lang="de-DE">
<![endif]-->
<!--[if IE 7]>
<html id="ie7" dir="ltr" lang="de-DE">
<![endif]-->
<!--[if IE 8]>
<html id="ie8" dir="ltr" lang="de-DE">
<![endif]-->
<!--[if !(IE 6) | !(IE 7) | !(IE 8)  ]><!-->
<html dir="ltr" lang="de-DE">
<!--<![endif]-->

几个 IE 版本不包括最后一个标签,但任何非 MS 浏览器和 IE >= 9 都包含最后一个标签。

于 2012-10-10T15:23:59.187 回答
0

所以这就是问题所在。我正在使用 facelets,这是在模板文件中。我没有意识到通常应用的条件语句不适用于 facelets。当由 servlet 处理时,它只会丢弃任何它没有“得到”的东西,因此所有样式表都会被读取。

如果你想在 facelets 中使用条件语句,你必须把它们放在一个元素中。它会变得丑陋。

幸运的是,名为 BalusC 的堆栈器提供了一个聪明的库,其中包含一个用于处理条件语句的标签。经过一天的尝试各种方式并到处寻找之后,我终于找到了一篇文章,其中提到了这个问题与 facelets 和条件语句。这导致了一个“Omnifaces”项目的谷歌代码页,其中记录了标签(和一堆其他有用的特性)。

该库可通过 maven(我得到它的地方)获得,但可能还有其他方式。无论如何,如果那样的话,从阅读帖子到修复代码大约需要半个小时。

Facelets 加上 IE 条件语句 = 坏消息。

使用 outputText 或 Omnifaces 或编写您自己的组件。

于 2012-10-10T23:35:21.497 回答