我有一个JSF2 / Richfaces 4项目,其中我想使用一个默认皮肤,但我也想使用我自己的自定义样式表设置一些东西的风格.这听起来很简单,但是我发现,至少在某些情况下,我自己的风格没有被使用.要明确,这里是我相关的web.xml上下文参数:
- <context-param>
- <param-name>org.richfaces.skin</param-name>
- <param-value>blueSky</param-value>
- </context-param>
- <context-param>
- <param-name>org.richfaces.control_skinning</param-name>
- <param-value>enable</param-value>
- </context-param>
- <context-param>
- <param-name>org.richfaces.control_skinning_classes</param-name>
- <param-value>enable</param-value>
- </context-param>
我的CSS文件包含:
- <h:outputStylesheet name="jsp-css.css" library="css" />
一个这样的实际风格定义:
- .obsOptBtnSel{
- background-color: transparent;
- background-image: url('/images/circleY.gif');
- background-repeat: no-repeat;
- background-position: center;
- border: none;
- text-align: center;
- width: 2em;
- height: 2em;
- }
而实际的按钮使用风格:
- <h:commandButton
- value="?"
- styleClass="#{obs.observation.observationExtent == -1.0 ? 'obsOptBtnSel' : 'obsOptBtnUns'}"
- id="unknownButton"
- />
所以,人们会认为我会从相关的blueSky皮肤继承样式,然后由于我指定了一个样式类,所以自定义样式表中提到的任何属性都将被覆盖.
但是,当我看到Firebug中的元素时,我看到我的styleClass被皮肤指定的styleClass覆盖,例如它不断使用blueSky背景图像而不是我的.
我知道我可以通过在样式表中的所有样式之后简单地放置!重要的,但这似乎是一个非常肮脏和不必要的方式来处理这个问题.
我在这里做错了什么?还有另一个解决方案吗?
解决方法
RichFaces已经在输入[type = submit] CSS选择器上指定了一个默认的背景,这是一个比.obsOptBtnSel更强大的选择器.基本上有两个选择:
>重命名你的选择器来输入[type = submit] .obsOptBtnSel来使它更强大.
- input[type=submit].obsOptBtnSel {
- background-color: transparent;
- background-image: url('/images/circleY.gif');
- background-repeat: no-repeat;
- background-position: center;
- border: none;
- text-align: center;
- width: 2em;
- height: 2em;
- }
注意,这4个背景属性可以设置为背景oneliner与子属性在顺序彩色图像位置重复:
- background: transparent url('/images/circleY.gif') center no-repeat;
>添加!对背景属性重要,以覆盖由其他CSS选择器设置的相同元素上的所有非!重要属性.
- .obsOptBtnSel {
- background-color: transparent !important;
- background-image: url('/images/circleY.gif') !important;
- background-repeat: no-repeat !important;
- background-position: center !important;
- border: none;
- text-align: center;
- width: 2em;
- height: 2em;
- }
或者,更短,
- background: transparent url('/images/circleY.gif') center no-repeat !important;