html css 如何将表头固定
position属性取值为fixed时,则元素的位置将不受滚动条的影响,而是直接依据窗口定位,这就是将表头固定的最直接方法,网上其他途径感觉都是在走弯路。但是与此同时必须解决两个问题。第一:表体将随之不依据表头定位,而是依据body元素定位,因此表体将上移,导致表体靠上部分被表头遮挡,而且有重影。第二:表体的宽高和表头的宽高也将互相独立不再受文档流的约束,这导致单元格对不齐。
解决办法示例如下。其中,单元格上下对齐的问题可以通过设置paddingmargin百分比width来解决,表头和表体也可以放在各自的div里。
样式单
<styletype="text/css">
*{
padding:0px;
margin:0px;
}
#thead{
/*固定表头*/
position:fixed;
/*表头显示层次高于表体,防止空白行和表头重合时出现重影*/
z-index:2;
background:#ECECFF;
}
#spacetr{/*空白的tr用来填补表头遮盖的数据*/
position:relative;
z-index:1;
}
.tdata{/*显示表格数据的tr*/
position:relative;
z-index:1;
}
</style>
js脚本
$(function(){
$("#spacetr").css("height",$("#thead").css("height"));
//将空白行的高度设置为和表头等高,使被遮挡的数据刚好下移表头高度的距离
});
jsp代码:
<divstyle="width:100%">
<%--<imgsrc="${pageContext.request.contextPath}/images/post_head.jpg"/>--%>
<tableid="table"border="1pxgraysolid"cellspacing="0"cellpadding="0"width="100%;">
<trid="thead">
<tdwidth="9%"align="center">招聘学科</td>
<c:forEachitems="${postnames}"var="postname">
<tdvalign="bottom"align="center">
${postname}
</td>
</c:forEach>
</tr>
<trid="spacetr">
<tdwidth="9%"></td>
<c:forEachitems="${postnames}"var="postname">
<td>
</td>
</c:forEach>
</tr>
<c:forEachitems="${shcoolsPostnumbers}"var="schoolPostnumbers">
<trclass="tdata">
<tdwidth="9%">${schoolPostnumbers.key}</td>
<c:forEachitems="${schoolPostnumbers.value}"var="postnumber">
<tdalign="center">${postnumber}</td>
</c:forEach>
</tr>
</c:forEach>
</table>
</div>