【问题标题】:How to override PrimeFaces CSS via external stylesheet如何通过外部样式表覆盖 PrimeFaces CSS
【发布时间】:2015-07-19 12:55:57
【问题描述】:

我的 xhtml 页面上有以下代码来覆盖默认的 PrimeFaces 样式:

<h:body>
  <f:facet name="last">
    <h:outputStylesheet library="css" name="main.css" />
  </f:facet>
  ...
</h:body>

当我使用存储在本地服务器上的样式表时,这可以正常工作。 问题是,我想包含一个外部(动态)样式表。因此,当我将 &lt;h:facet&gt; 更改为类似以下内容时,它不再起作用了。

  <f:facet name="last">
    <link type="text/css" rel="stylesheet" href="http://host.de/main.css" />
  </f:facet>

如果我将&lt;link&gt; 元素直接包含在我的xhtml 页面的&lt;h:head&gt; 部分中,则会加载样式表,但PrimeFaces 会覆盖规则。

在下一步中,我想将 href 属性动态从我的 ManagedBean 设置为如下所示:

<link type="text/css" rel="stylesheet" href="#{bean.cssUrl}" />

这甚至可能吗?还是有另一种方法来实现我所描述的?任何帮助表示赞赏。提前致谢。

编辑:

我在 Internet Explorer、Firefox 和 Chrome(每个最新版本)中进行了尝试,但都没有工作。如果我使用 &lt;h:outputStylesheet name="http://host.de/test.css"&gt; 而不是 &lt;link&gt; 我会得到 RES_NOT_FOUND 和状态码 404。

【问题讨论】:

  • 关于最后一个问题,完全有可能,当然。不知道为什么它在第二个代码 sn-p 中不起作用,尽管资源分配在其他主机中,但应该保持加载顺序。您是否尝试过使用不同的浏览器并强制重新加载缓存?
  • @XtremeBiker 感谢您的提示。我尝试了不同的浏览器,但结果相同。
  • 嘿,你在 webapp 中将你的 css 文件存储在哪里,我的意思是文件夹,你试过 host.de/test.css" />

标签: html css jsf primefaces el


【解决方案1】:

我让它工作了。解决方法是去掉周围的&lt;f:facet&gt;元素,直接把&lt;link&gt;放到&lt;h:body&gt;下面:

<h:body>
  <link type="text/css" rel="stylesheet" href="#{bean.cssUri}"></link>
  ...
</h:body>

通过这个解决方案,我还可以在我的ManagedBean@PostConstruct 方法中动态设置外部样式表的URL(范围是@ViewScoped)。

编辑:

它可能有效,但@Kukeltje 的回答更清晰、更准确。我用错了&lt;f:facet name="last"&gt;

更新代码sn-p:

<h:head>
    <f:facet name="last">
        <link type="text/css" rel="stylesheet" href="#{bean.cssUri}"></link>
    </f:facet>
</h:head>

【讨论】:

  • 抱歉,我想删除我的反对票,但它被锁定了。为什么你在h:body而不是h:head加载css
  • 我必须确保最后加载我的样式表,因为我正在覆盖 PrimeFaces css 类。
  • 那么它仍然可以并且应该以h:head结尾。如果你最后在正文中加载它,你可以在较慢的连接上获得突然改变外观的 ui,因为在加载和构建页面时它使用 PF 样式表,最后你的样式表突然启动,导致例如回流、颜色变化等
【解决方案2】:

&lt;facet name="last"/&gt; for stylesheets 应该只用在&lt;h:head/&gt; 那是你的样式表应该结束的地方。如果你最后将它们加载到你的身体中,你会在你的 ui 的外观和感觉上得到奇怪的表现。在加载和构建页面并有一些较慢的连接或繁忙的服务器时,使用 PF 样式表,完成加载后,您的自定义 css 会启动。这可能会导致回流、颜色变化等等

【讨论】:

  • &lt;f:facet name="last"&gt;&lt;h:body&gt; 中完美使用它。使用&lt;link&gt; 而不是&lt;h:outputStylesheet&gt; 时出现问题。
  • 你是对的。起初我不明白。我的一位同事在&lt;h:body&gt; 中使用了&lt;f:facet name="last"&gt;,但我错误地采用了它。非常感谢你:)`
  • 对于脚本来说它有一些价值(除非脚本影响 L&F)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 2015-03-04
相关资源
最近更新 更多