在 PrimeFaces 之后加载你的 CSS?
虽然在 PrimeFaces CSS 之后加载 CSS 会覆盖现有规则,但我认为这不是一个好主意。最好创建更具体的规则。无论顺序如何,更具体的规则总是会“获胜”。例如,如果您将组合资源处理程序与 PrimeFaces 扩展 LightSwitch 结合使用,则切换后的 PrimeFaces 主题将最后加载,使其以相同的规则“获胜”!
如何创建更具体的规则
PrimeFaces 使用的样式规则可能相当复杂。一个元素可以从多个 CSS 规则中接收其样式。很高兴知道您可以在 DOM 检查器的样式选项卡中使用过滤来搜索您要自定义的属性:
此屏幕截图是使用 Chrome 截取的,但在 Firefox 和 Safari 中也可以进行过滤。
找到要自定义的规则后,只需在规则前加上 html 即可创建更具体的规则。例如,您可以覆盖.ui-corner-all,例如:
html .ui-corner-all {
border-radius: 10px;
}
使用style 属性
PrimeFaces 组件可以呈现相当复杂的 HTML。通常,style 属性仅应用于组件呈现的最外层 HTML 节点。此外,style 不可重用,因此最好设置 styleClass 并根据您设置的类创建 CSS 规则。这也允许您为组件呈现的内部 HTML 节点设置样式。
使用styleClass 属性
PrimeFaces 带有许多内置类的主题(和模板)。您可能会发现现有类已经完成了您想要的自定义。例如,要从p:panelGrid 中删除边框,可以简单地应用ui-noborder 类。或者我们最近添加到 PrimeFaces 10 的类来设置按钮样式,例如 ui-button-warning。
见:
使用ResourceHandler 替换主题值
我通常只想用另一个值替换一些颜色。由于可以在许多不同的规则中使用颜色,因此创建 ResourceHandler 会很有用。
在处理程序中检查 PrimeFaces 主题:
@Override
public Resource createResource(String resourceName,
String libraryName) {
if (isPrimeFacesTheme(resourceName, libraryName)) {
return new MyResource(super.createResource(resourceName, libraryName), this);
}
else {
return getWrapped().createResource(resourceName, libraryName);
}
}
protected boolean isPrimeFacesTheme(final String resourceName,
final String libraryName) {
return libraryName != null
&& libraryName.startsWith("primefaces-")
&& "theme.css".equals(resourceName);
}
在资源中,替换颜色:
private static String cache;
public MyResource(Resource wrapped, ResourceHandler handler) {
this.wrapped = wrapped;
this.handler = handler;
this.charset = Charset.forName(FacesContext.getCurrentInstance().getExternalContext().getRequestCharacterEncoding());
}
@Override
public InputStream getInputStream() throws IOException {
if (cache == null) {
cache = readInputStream(getWrapped().getInputStream());
// Replace values
cache = cache.replace("#007ad9", "#11dd99");
}
return new ByteArrayInputStream(cache.getBytes(charset));
}
并在faces-config.xml中注册如下:
<application>
<resource-handler>com.example.MyResourceHandler</resource-handler>
</application>
PrimeFaces Extension 10.0.1 中提供了一个资源处理程序,它用 CSS 变量替换 Arya、Saga 和 Vela 主题的强调色,请参阅 https://www.primefaces.org/showcase-ext/sections/utils/themeAccentColorResourceHandler.jsf。
有关资源处理程序的更多信息,请参阅: