我有一个多列panelGrid设置,每个列都是一个dataTables。每个dataTables的长度不同,这导致panelGrid被拉伸以适应最大的dataTable(目前为止,这很好)。剩余的dataTables垂直居中(这看起来很糟糕),而不是顶部对齐。
我该如何告诉panelGrid使内容顶部对齐?或者,我的方法完全错误,我需要采取不同的方法(如果是这样,欢迎提供建议)?
JSF以HTML格式呈现,可以使用CSS进行样式设置。以下是元素的检查方法:
<h:panelGrid>
呈现为HTML的<table>
元素;<h:dataTable>
也呈现为HTML的<table>
元素。数据元素嵌套在由<h:panelGrid>
呈现的<td>
元素内。因此,请将<h:panelGrid>
的<td>
的vertical-align
设置为top
。
假设<h:panelGrid>
有一个ID,在HTML中显示为<table id="panelGridId">
,请使用以下CSS:
#panelGridId>tbody>tr>td {
vertical-align: top;
}
如果网格是表单的一部分,那么CSS将需要包括表单的ID。例如:
<form id="amazingForm">
<h:panelGrid id="amazingGrid">
...
</h:panelGrid>
</form>
#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>
所有元素都将对齐到顶部。如果没有规则,所有元素都将居中。由于生成的标记不清楚,很难确定需要应用哪个规则。
另请参阅:
.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">
.pgstyle td{
vertical-align: top;
}
其中pgstyle是您为包含数据表的每个面板网格提供的样式类,例如:
<h:panelGrid columns="1" styleClass="pgstyle">
<rich:dataTable ..>
....
</rich:dataTable>
</h:panelGrid>