Mah*_*leh 2 css jsf internet-explorer 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]-->
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用.我在生成的HTML输出中看到了这个:
<link type="text/css" rel="stylesheet" href="/context/faces/javax.faces.resource/common.css?ln=css" />
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="/context/faces/javax.faces.resource/ie.css?ln=css"/>
<![endif]-->
Run Code Online (Sandbox Code Playgroud)
没有条件注释,它工作正常.我没有使用context参数javax.faces.FACELETS_SKIP_COMMENTS.这是怎么造成的,我该如何解决?
这确实不会起作用,因为Facelets隐式地HTML转义了注释的内容.你最好的选择是把它放在<h:outputText escape="false">如下:
<h:outputText value="<!--[if IE]><link rel="stylesheet" type="text/css" href="/#{resource['css:ie.css']}" /><![endif]-->" escape="false" />
Run Code Online (Sandbox Code Playgroud)
然而,这是一个丑陋的线.该OmniFaces JSF工具库中有<o:conditionalComment>出于这样的目的:
<o:conditionalComment if="IE">
<link rel="stylesheet" type="text/css" href="#{resource['css:ie.css']}" />
</o:conditionalComment>
Run Code Online (Sandbox Code Playgroud)
与具体问题无关,您并没有library以正确的方式使用该属性.它应该标识一个共同的"主题",而不是放置文件的子文件夹,只需将该子文件夹放在name属性中.另请参见什么是JSF资源库以及如何使用它?
<h:outputStylesheet name="css/common.css" />
<o:conditionalComment if="IE">
<link rel="stylesheet" type="text/css" href="#{resource['css/ie.css']}" />
</o:conditionalComment>
Run Code Online (Sandbox Code Playgroud)