我有一个多列 panelGrid 设置,每列都有 dataTables。每个数据表的长度都不同。这导致 panelGrid 伸展以适应最大的数据表(到目前为止,这很好)。其余的数据表垂直居中(这不好,因为它在屏幕上看起来很糟糕)而不是顶部对齐。
如何告诉 panelGrid 顶部对齐内容?或者,我的方法是否完全错误,我需要做一些不同的事情(如果是,欢迎提出建议)?
JSF 呈现为 HTML,并且可以使用 CSS 设置样式。检查元素如下:
<h:panelGrid>
呈现一个 HTML<table>
元素;<h:dataTable>
也呈现为 HTML元素<table>
。数据元素嵌套在<td>
元素内,由<h:panelGrid>
. 因此,将vertical-align
的设置<td>
为。<h:panelGrid>
top
假设<h:panelGrid>
有一个id
which 以<table id="panelGridId">
HTML 结尾,请使用以下 CSS:
#panelGridId>tbody>tr>td {
vertical-align: top;
}
如果网格是表单的一部分,那么 CSS 将需要包含表单的 ID。例如:
<form id="amazingForm">
<h:panelGrid id="amazingGrid">
...
</h:panelGrid>
</form>
CSS 将类似于:
#amazingForm\:amazingGrid > tbody > tr > td {
vertical-align: top;
}
这是一个示例 HTML 文档,显示了在使用 CSS 配置的表格中的垂直对齐:
<!-- language: html -->
<!DOCTYPE html>
<html lang="en">
<head>
<title>SO question 3547485</title>
<style>#myid>tbody>tr>td { vertical-align: top; }</style>
</head>
<body>
<table id="myid">
<tbody>
<tr>
<td><table><tbody><tr><td>n1a</td></tr><tr><td>n1b</td></tr></tbody></table></td>
<td><table><tbody><tr><td>n2a</td></tr></tbody></table></td>
<td><table><tbody><tr><td>n3a</td></tr><tr><td>n3a</td></tr><tr><td>n3c</td></tr></tbody></table></td>
</tr>
</tbody>
</table>
</body>
</html>
全部对齐到顶部。没有规则,所有人都会居中。很难说清楚你需要应用什么规则,因为不清楚你生成的标记是什么样子的。
也可以看看:
您可以使用 CSS 使 panelgrids 顶部对齐。
.mystyle {
vertical-align: top;
horizontal-align: center;
}
包含在您的 xhtml 文件中。
<link href="#{resource['css:style.css']}" rel="stylesheet" type="text/css"/>
并将此代码添加到父面板网格中。
<h:panelGrid columns="3" columnClasses="mystyle, mystyle, mystyle">
注意:对于 3 列,您必须包含 3 次
您可以避免将其应用于每个 td,仅在其中的 panelGrid 和 datatable 内。我遇到了同样的问题,以下对我有用:
.pgstyle td{
vertical-align: top;
}
其中pgstyle是您为每个 panelGrid 提供的 styleClass 包含一个数据表,例如:
<h:panelGrid columns="1" styleClass="pgstyle">
<rich:dataTable ..>
....
</rich:dataTable>
</h:panelGrid>