时间:2011-12-20 11:16:44

标签: css internet-explorer jsf facelets conditional-comments

我正在尝试使用IE条件注释来声明CSS资源:

<h:outputStylesheet name="common.css" library="css" />
<!--[if IE]>
    <link rel="stylesheet" type="text/css" href="#{resource['css:ie.css']}" />   
<![endif]-->    

然而,这似乎不起作用。我在生成的HTML输出中看到了这一点:

<link type="text/css" rel="stylesheet" href="/context/faces/javax.faces.resource/common.css?ln=css" />        
<!--[if IE]&gt;
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/context/faces/javax.faces.resource/ie.css?ln=css&quot;/&gt;
&lt;![endif]-->

没有条件评论,它可以正常工作。我没有使用上下文参数javax.faces.FACELETS_SKIP_COMMENTS。这是怎么造成的,我该如何解决?

2 个答案:

答案 0 :(得分:7)

这确实不会起作用,因为Facelets隐式地HTML转义了注释的内容。您最好的选择是将其放在<h:outputText escape="false">中,如下所示:

<h:outputText value="&lt;!--[if IE]&gt;&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/#{resource['css:ie.css']}&quot; /&gt;&lt;![endif]--&gt;" escape="false" />
然而,这是一条丑陋的线条。 The OmniFaces JSF utility library的目的是<o:conditionalComment>

<o:conditionalComment if="IE">
    <link rel="stylesheet" type="text/css" href="#{resource['css:ie.css']}" />   
</o:conditionalComment>

对于具体问题,

无关,您并没有以正确的方式使用library属性。它应该标识一个共同的“主题”,而不是放置文件的子文件夹,只需将该子文件夹放在name属性中。另请参阅What is the JSF resource library for and how should it be used?

<h:outputStylesheet name="css/common.css" />
<o:conditionalComment if="IE">
    <link rel="stylesheet" type="text/css" href="#{resource['css/ie.css']}" />   
</o:conditionalComment>

答案 1 :(得分:3)

我建议

<h:outputText value="&lt;!--[if IE]&gt; " escape="false"/>
  <link rel="stylesheet" type="text/css" href="#{request.contextPath}/faces/javax.faces.resource/ie.css?ln=css" />
<h:outputText value=" &lt;![endif]--&gt;" escape="false"/>

所以你只能逃避一小段代码而#{request.contextPath}按预期工作