【问题标题】:Apply styleClass to parent panelGrid element and not to children将 styleClass 应用于父 panelGrid 元素而不是子元素
【发布时间】:2013-11-26 01:37:49
【问题描述】:

我正在尝试将 styleClass 应用于 h:panelGrid 而不将其应用于其子代:

<h:panelGrid id="mainPanelGrid" columns="2" width="100%" styleClass="topAligned" >
    <p:fieldset id="fs1" legend="fs1" style="width: max-content">  
        <h:panelGrid columns="3">
            <p:outputLabel for="id1" value="#{messages.label_application}" />
            <p:selectOneMenu id="id1" required="true" value="som">
                <f:selectItem itemLabel="#{messages.label_select}" noSelectionOption="true" />  
                <f:selectItems value="#{bean.availableItems}" />
            </p:selectOneMenu>
            <p:message for="id1" />
        </h:panelGrid>             
    </p:fieldset>  

     <p:fieldset id="fs2" legend="fs2" style="width: max-content">  
         <h:panelGrid columns="3">
             <!--more fields-->     
         </h:panelGrid>  
     </p:fieldset>
</h:panelGrid>

我的 topAligned css:

.topAligned td{
    vertical-align: top !important;
}

问题是我需要将两个字段集顶部对齐,这与我申请的styleClass 效果很好,但它也将这个styleClass 应用于所有孩子。因此,两个字段集的所有字段(outputLabelselectOneMenu 等...)也都顶部对齐...

我尝试了所有不同的方法来指定 this question 的顶部对齐方式,但没有成功...我还尝试查看 html 源代码,但它与所有 jsf 和 primefaces 的东西有点混淆...

如果你知道一个可行的技巧......

【问题讨论】:

  • 您可以随时删除!important 并覆盖子元素,或者巧妙地使用css :not 选择器。这一切都取决于您生成的 DOM。尝试在没有 PF 乱码的情况下上传您的输出。

标签: css jsf


【解决方案1】:

.topAligned td{
    vertical-align: top !important;
}

以及 JSF 生成的 HTML 输出

<table class="topAligned">
    ...
</table>

您基本上将样式应用于&lt;table&gt;每一个 &lt;td&gt; 元素,以及嵌套&lt;table&gt;s 的元素。

如果您只想将样式应用于父 &lt;table&gt; 的直接 &lt;td&gt; 元素,那么您应该改用 columnClasses 属性:

<h:panelGrid ... columnClasses="topAligned,topAligned">

.topAligned {
    vertical-align: top;
}

这将在生成的 HTML 输出中结束,如下所示:

<table>
    <tbody>
        <tr>
            <td class="topAligned">...</td>
            <td class="topAligned">...</td>
        </tr>
    </tbody>
</table>

并且不适用于嵌套&lt;table&gt;s 的&lt;td&gt;s。

请注意,我还删除了无意义的 !important 解决方法。它应该仅在您想通过外部 CSS 样式覆盖硬编码的 style 时使用。

还请注意,此问题与 JSF 无关。 JSF 在这个问题的上下文中仅仅是一个 HTML 代码生成器。在处理“plain vanilla” HTML/CSS 时,您会遇到完全相同的问题。问题更多在于缺乏对基本 HTML 和 CSS 的熟悉。在 http://htmldog.com 你可以找到不错的 HTML/CSS 教程。

【讨论】:

  • +1。辉煌,一如既往。但是,您的解决方案是 columnClasses="topAligned,topAligned" JSF 特定的。想象一下,如果 CSS 人看到 JSF 代码的和平,他们会怎么说。
  • 我希望你能出现并繁荣!效果很好,非常感谢。我没有很好地理解columnClasses 属性(尤其是您必须为每个列指定要应用的样式的部分)......你是对的,我缺乏基本的 CSS,但在 tutos 中找不到我想要的东西......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 2018-08-05
相关资源
最近更新 更多