JSF2如何根据浏览器版本设置html样式

JSF2如何根据浏览器版本设置html样式,html,jsf,jsf-2,conditional-comments,omnifaces,Html,Jsf,Jsf 2,Conditional Comments,Omnifaces,我想在JSF 2应用程序中做的是根据浏览器版本设置适当的html样式,下面是示例代码: <!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--> <!--[if IE 7]> <html class="lt-ie9 lt-ie8" lang="en"> <![endif]--> <!--[if IE 8]>

我想在JSF 2应用程序中做的是根据浏览器版本设置适当的html样式,下面是示例代码:

<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="lt-ie9 lt-ie8" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <!--<![endif]-->

在JSF2中如何做到这一点?最好/最简单的方法是什么


我在Omnifaces中发现了一些有趣的东西(
o:conditionalComment
),但它只允许有条件地加载整个css,这对我来说是无用的…

您不应该有条件地声明
元素

如果使用Chrome或Firefox的人想访问你的网站怎么办

公认的做法是创建特定于IE版本的
.css
文件,并使用IE宏有条件地加载此文件

e、 g


在IE6_styles.css中,您可以向
html
类添加一些特定属性,也可以添加
*html
hack。这种方法的优点在于,它可以在旧的IE浏览器中运行,但不会破坏现代浏览器


顺便说一句,这个例子来自David McFarland的“CSS:缺少的手册”。

您不应该有条件地声明
元素

如果使用Chrome或Firefox的人想访问你的网站怎么办

公认的做法是创建特定于IE版本的
.css
文件,并使用IE宏有条件地加载此文件

e、 g


在IE6_styles.css中,您可以向
html
类添加一些特定属性,也可以添加
*html
hack。这种方法的优点在于,它可以在旧的IE浏览器中运行,但不会破坏现代浏览器

顺便说一句,这个例子来自David McFarland的“CSS:missing manual”。

这个例子并不适用于CSS文件。这是一种误解。从技术上讲,使用纯Facelets标记/组件实现您的需求是不可能的,因为这会导致格式错误的XML语法,从而导致Facelets编译错误


...
这是而不是XML。您知道,XML结束元素应该与XML开始元素在同一范围内。如果每个
在同一父XML元素中都有自己的
,那么它就是有效的XML。但这反过来又不是有效的HTML

只需在所有
标记上使用
。不要忘记对结束标记执行相同的操作


...
非常尴尬,但是(这种方法起源的地方)本身也很尴尬,依我看

可选地,您可以考虑创建自定义<代码> <代码>组件,它生成所需标记,以便您可以满足<代码>…<代码> >

仅对CSS文件是不正确的。这是一种误解。从技术上讲,使用纯Facelets标记/组件实现您的需求是不可能的,因为这会导致格式错误的XML语法,从而导致Facelets编译错误


...
这是而不是XML。您知道,XML结束元素应该与XML开始元素在同一范围内。如果每个
在同一父XML元素中都有自己的
,那么它就是有效的XML。但这反过来又不是有效的HTML

只需在所有
标记上使用
。不要忘记对结束标记执行相同的操作


...
非常尴尬,但是(这种方法起源的地方)本身也很尴尬,依我看

可选地,您可以考虑创建自定义<代码> <代码>组件,它生成期望的标记,以便您可以满足<代码>…<代码> >

< p>您可以用同一个类制作3个CSS(每个浏览器一个)。您的HTML代码将更加简单

在标题中,您可以使用特定的浏览器css,如下所示:

<h:outputStylesheet library="css" name="ie_7.css" rendered="#{header['User-Agent'].contains('; MSIE 7')}" />

您可以使用同一类制作3个CSS(每个浏览器一个)。您的HTML代码将更加简单

在标题中,您可以使用特定的浏览器css,如下所示:

<h:outputStylesheet library="css" name="ie_7.css" rendered="#{header['User-Agent'].contains('; MSIE 7')}" />


OP的代码片段来自html5boilerplate.com。创建一堆.css文件是我不想做的,因为我得到的是一个大的css文件。如果没有选择,那么我就需要做大量准备特定css文件的工作。OP的代码片段来自html5boilerplate.com。创建一堆.css文件是我不想做的,因为我得到的是一个大型css。如果没有选择的话,那么我在准备特定的css文件时做了很多工作。从技术上来说,头嗅探不如条件注释可靠。有条件的评论在IE中100%可靠,而请求头可能被客户端欺骗/黑客。是的,你说得对,我学到了一些东西!关于BalusC注释的链接:标题嗅探在技术上不如条件注释可靠。有条件的评论在IE中100%可靠,而请求头可能被客户端欺骗/黑客。是的,你说得对,我学到了一些东西!关于BalusC评论的链接:谢谢,现在我使用了单h:outputText。我还将所有内容包装在f:view(名称空间定义)中。我对js使用了o:conditionalComment,包括。这很奇怪,但不需要结束,所有内容都正确呈现,为什么?:)我只是想在另一个问题中加入一个例子,在这里BalusC详细地解释了f:view。我试图解决同一个问题,但很难找到解决方案的所有部分。谢谢,现在我使用了单h:outputText。我还将所有内容包装在f:view(名称空间定义)中。我对js使用了o:conditionalComment,包括。这很奇怪,但不需要结束,所有内容都正确呈现,为什么?:)我只是想在另一个问题中加入一个例子,在这里BalusC详细地解释了f:view。我试图解决同样的问题,但很难找到解决方案的所有部分。