使用JSF的浏览器相关CSS开关
我需要在JSF2应用程序(Mojarra2.1,Tomcat7)中使用一些特定于浏览器的CSS 我尝试将以下内容添加到我的模板中:使用JSF的浏览器相关CSS开关,css,jsf-2,Css,Jsf 2,我需要在JSF2应用程序(Mojarra2.1,Tomcat7)中使用一些特定于浏览器的CSS 我尝试将以下内容添加到我的模板中: <!--[if IE 8]> <link rel="stylesheet" type="text/css" href="#{cfgs.externalCssUrlIE8}" /> <![endif]--> 但由于我还使用了以下内容,因此未提供注释: <context-param>
<!--[if IE 8]>
<link rel="stylesheet" type="text/css" href="#{cfgs.externalCssUrlIE8}" />
<![endif]-->
但由于我还使用了以下内容,因此未提供注释:
<context-param>
<!-- Removes any comments from the rendered HTML pages. -->
<param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name>
<param-value>true</param-value>
</context-param>
javax.faces.FACELETS\u跳过\u注释
真的
我的问题。。。当我禁用'javax.faces.FACELETS\u SKIP\u注释时,我会遇到一系列其他问题。。此外,我认为我的源代码注释不属于生成的页面
我还尝试将开关置于CDATA中,如:
<![CDATA[
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="#{cfgs.externalCssUrlIE7}" />
<![endif]-->
]]>
]]>
但是内部<被呈现为html实体..:-/,所以它不起作用
问题:还有其他解决办法吗?是否存在任何JSF2标记来处理此问题?外部标记库
提前感谢,,
Steve您可能能够使用条件注释的包容性语法来解决问题。与其写
,不如写代码>
换句话说,没有让它成为评论的破折号
这是合法的语法。此语法的意图是非IE浏览器读取条件部分,而对于带破折号的语法,其他浏览器将忽略它
当然,这对您的样式表有着明显的影响——条件块中包含的CSS需要适用于除IE8之外的所有浏览器(您会注意到我在上面添加的感叹号,使其成为“非IE8”);IE8特定的内容需要包含在标准样式表中,由条件块中的样式覆盖
换句话说,与您当前正在尝试的功能相比,这是一个功能上的逆转
重要的一点是,这样做条件块不是注释,因此不应该被解析器删除
你可能需要重做一些事情,但它应该是有效的
当然,另一个选择是找到一个特定于IE8的CSS黑客。这些确实存在,但我建议尽可能避免它们,因为你会使你的CSS无效,而且在未来的浏览器版本中,它总是有被破坏的危险
但如果你想走这条路,这里有一个链接可以给你答案:
但除非必须,否则不要使用它。:-)
希望有帮助。唯一的方法就是使用
是的,这是一条丑陋的路线。但是没有其他的标准方法
更新:JSF实用程序库提供了一个专门用于此目的的工具,这样您就不再需要丑陋的
:
<o:conditionalComment if="IE 8">
<link rel="stylesheet" type="text/css" href="#{cfgs.externalCssUrlIE8}" />
</o:conditionalComment>
巴卢斯克的回答是对我问题的正确回答。我仍然想分享我发现的一个基于JavaScript+CSS的解决方案:The
插入使您能够使用特定于操作系统和浏览器的CSS选择器,例如:
- html.gecko div#header{margin:1em;}
- .opera#页眉{边距:1.2em;}
- .ie.mylink{font-weight:bold;}
- .mac.ie.mylink{font-weight:bold;}
- [os].[browser].mylink{font-weight:bold;}
如果您的特定于浏览器的样式仍处于初始阶段,那么与包含许多.css
文件相比,这可能是一个更清晰的解决方案 多谢各位。它起作用了!我也试过了,但你是对的:丑陋的逃逸h:outputText似乎是唯一的解决方案。不客气。请注意,JSF2中不推荐使用
。它已经完全没有价值了,因为完全允许/支持在Facelets中嵌入纯HTML(这也是JSF1.2在JSP上出现以来的情况)。要在Facelets中有条件地呈现纯HTML(正如您以前使用
所做的那样,您应该使用
来代替。不错的解决方法,尽管它很难看……您再次救了我:)@BalusCh:form
在h:head
中使用h:outputText
时没有呈现我有一个[if IE 7]、[if IE 8]等的列表。,因此,巴卢斯克的答案是一个简单得多的方法。无论如何,谢谢你明确的回答。@alfonx-没问题;正如你所说,@BalusC的答案可能更适合你的情况,但希望你发现我的答案仍然有用;即使这次没有用。:)