使用CSS实现固定表头表列时,出现多行表头时的问题,请高手指点 我们是想在目前现有的一个Grid控件上做一定的功能扩展,为了尽量上的影响现有控件的客户端事件,所以想通过这种方式来固定表头,和表列。因为我们的Grid控件原先支持多行表头的显示,所以需要解决这个问题。如果是在没有好的办法,可能就得做一堆div来蒙蔽了。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 确实如你所说,实现类似Excel的功能可以实现左侧若干列的锁定,且多行表头也固定。类似Google在线文档的表格,但是结构与他的不同 水平OK 但是上下滚动就没效果了。<html><head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>固定表头和列(多行表头)</title> <style> .FixedTitleRow { position: relative; top: expression(this.offsetParent.scrollTop); z-index: 10; background-color: #EEEEEE; border-bottom:1px solid #CCCCCC; } .FixedTitleColumn { position: relative; left: expression(this.parentElement.offsetParent.parentElement.scrollLeft); background-color:Lime; } .FixedDataColumn { position: relative; left: expression(this.parentElement.offsetParent.parentElement.scrollLeft); background-color: #F7F7F7; } </style></head><body> <div id="scrollDiv" style="width: 600px; overflow: auto; cursor: default; display: inline; position: absolute; height: 200px;"> <table id='tbUserDefined' cellpadding='0' cellspacing='0' style='table-layout: fixed; border-collapse:collapse;' bordercolor='#777777' border='1'> <tbody> <tr id="aa"> <td class="FixedTitleColumn" style="width:50px;"> Ctrl</td> <td class="FixedTitleColumn" rowspan="2" style="width:50px;"> ID</td> <td class="FixedTitleColumn" colspan="2" style="width:100px;"> Value</td> <td colspan="2" style="width:450px;"> Txt</td> <td colspan="3" style="width:450px;"> Txt</td> </tr> <tr id="bb"> <td class="FixedTitleColumn"> </td> <td class="FixedTitleColumn"> Code</td> <td class="FixedTitleColumn"> Text</td> <td> Txt1</td> <td> Txt2</td> <td> Txt3</td> <td> Txt4</td> <td> Txt5</td> </tr> <tr> <td class="FixedDataColumn"> </td> <td class="FixedDataColumn"> ID1</td> <td class="FixedDataColumn"> Code1</td> <td class="FixedDataColumn"> Text1</td> <td> 88</td> <td> 22</td> <td> 22</td> <td> 22</td> </tr> </tbody> </table> </div></body></html> 如果都要解决的话,我给你一个现成的例子:就不修改你的地方,其实你一看CSS样式和设计你就知道了怎么做了<html><head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>固定表头和列</title> <style> .FixedTitleRow { position: relative; top: expression(this.offsetParent.scrollTop); z-index: 10; background-color: #E6ECF0; } .FixedTitleColumn { position: relative; left: expression(this.parentElement.offsetParent.scrollLeft); } .FixedDataColumn { position: relative; left: expression(this.parentElement.offsetParent.parentElement.scrollLeft); background-color: #E6ECF0; } </style></head><body><div id="scrollDiv" style="width: 300px; overflow: auto; cursor: default; display: inline; position: absolute; height: 200px;"> <table id='accountTable' width='500' height='230' cellpadding='0' cellspacing='0' style='table-layout: auto' bordercolor='lightgrey'> <tbody> <tr class="FixedTitleRow"> <td class="FixedTitleColumn">ID0</td> <td class="FixedTitleColumn">CK0</td> <td class="FixedTitleColumn">Code0</td> <td class="FixedTitleColumn">Descirption0</td> <td class="FixedTitleColumn">TOL0</td> <td>XS0</td> <td>SS0</td> <td>MS0</td> <td>DS0</td> <td>BS0</td> <td>XL0</td> <td>ML0</td> <td>DL0</td> <td>EM0</td> <td>BM0</td> </tr><tr> <td class="FixedDataColumn">88</td> <td class="FixedDataColumn">88</td> <td class="FixedDataColumn">88</td> <td class="FixedDataColumn">88</td> <td class="FixedDataColumn">88</td> <td>22</td> <td>22</td> <td>22</td> <td>22</td> <td>22</td> <td>22</td> <td>22</td> <td>22</td> <td>22</td> <td>22</td> </tr><tr> <td class="FixedDataColumn">111</td> <td class="FixedDataColumn">111</td> <td class="FixedDataColumn">1111</td> <td class="FixedDataColumn">This is Test</td> <td class="FixedDataColumn">1</td> <td>001</td> <td>002</td> <td>003</td> <td>004</td> <td>005</td> <td>006</td> <td>007</td> <td>008</td> <td>009</td> <td>010</td> </tr><tr> <td class="FixedDataColumn">111</td> <td class="FixedDataColumn">111</td> <td class="FixedDataColumn">1111</td> <td class="FixedDataColumn">This is Test</td> <td class="FixedDataColumn">1</td> <td>001</td> <td>002</td> <td>003</td> <td>004</td> <td>005</td> <td>006</td> <td>007</td> <td>008</td> <td>009</td> <td>010</td> </tr><tr> <td class="FixedDataColumn">111</td> <td class="FixedDataColumn">111</td> <td class="FixedDataColumn">1111</td> <td class="FixedDataColumn">This is Test</td> <td class="FixedDataColumn">1</td> <td>001</td> <td>002</td> <td>003</td> <td>004</td> <td>005</td> <td>006</td> <td>007</td> <td>008</td> <td>009</td> <td>010</td> </tr> </tbody> </table></div></body></html> chinmo 你好:呵呵,多谢回复。我的示例就是你给的代码上演变而来,问题是,我的应用中出现了多行表头,且出现了rowspan=2的表头单元格,请看一下我第一个例子,拖动一下横向滚动条就明白我所说的不好解决的问题了。 还有你第二个 <tr class="FixedTitleRow">就不用再调用class="FixedTitleRow"了不然就遮住了第一个tr的 要不你就加一个样式,这样就可以解决:<html><head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>固定表头和列(多行表头)</title> <style> .FixedTitleRow { position: relative; top: expression(this.offsetParent.scrollTop); z-index: 10; background-color: #EEEEEE; border-bottom:1px solid #CCCCCC; } .FixedTitleRow1 { position: relative; top: expression(this.offsetParent.scrollTop); z-index: 9; background-color: #EEEEEE; border-bottom:1px solid #CCCCCC; } .FixedTitleColumn { position: relative; left: expression(this.parentElement.offsetParent.scrollLeft); background-color:Lime; } .FixedDataColumn { position: relative; left: expression(this.parentElement.offsetParent.parentElement.scrollLeft); background-color: #F7F7F7; } </style></head><body> <div id="scrollDiv" style="width: 600px; overflow: auto; cursor: default; display: inline; position: absolute; height: 200px;"> <table id='tbUserDefined' cellpadding='0' cellspacing='0' style='table-layout: fixed; border-collapse:collapse;' bordercolor='#777777' border='1'> <tbody> <tr class="FixedTitleRow"> <td class="FixedTitleColumn" rowspan="2" style="width:50px;"> Ctrl</td> <td class="FixedTitleColumn" rowspan="2" style="width:50px;"> ID</td> <td class="FixedTitleColumn" colspan="2" style="width:100px;"> Value</td> <td colspan="2" style="width:450px;"> Txt</td> <td colspan="3" style="width:450px;"> Txt</td> </tr> <tr class="FixedTitleRow1"> <td class="FixedTitleColumn"> </td> <td class="FixedTitleColumn"> Code</td> <td class="FixedTitleColumn"> Text</td> <td> Txt1</td> <td> Txt2</td> <td> Txt3</td> <td> Txt4</td> <td> Txt5</td> </tr> <tr> <td class="FixedDataColumn"> </td> <td class="FixedDataColumn"> ID1</td> <td class="FixedDataColumn"> Code1</td> <td class="FixedDataColumn"> Text1</td> <td> 88</td> <td> 22</td> <td> 22</td> <td> 22</td> </tr> </tbody> </table> </div></body></html> 你的原封不动,我只加一个样式如下:<html><head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>固定表头和列(多行表头)</title> <style> .FixedTitleRow { position: relative; top: expression(this.offsetParent.scrollTop); z-index: 10; background-color: #EEEEEE; border-bottom:1px solid #CCCCCC; } .FixedTitleRow1 { position: relative; top: expression(this.offsetParent.scrollTop); z-index: 9; background-color: #EEEEEE; border-bottom:1px solid #CCCCCC; } .FixedTitleColumn { position: relative; left: expression(this.parentElement.offsetParent.scrollLeft); background-color:Lime; } .FixedDataColumn { position: relative; left: expression(this.parentElement.offsetParent.parentElement.scrollLeft); background-color: #F7F7F7; } </style></head><body> <div id="scrollDiv" style="width: 600px; overflow: auto; cursor: default; display: inline; position: absolute; height: 200px;"> <table id='tbUserDefined' cellpadding='0' cellspacing='0' style='table-layout: fixed; border-collapse:collapse;' bordercolor='#777777' border='1'> <tbody> <tr class="FixedTitleRow"> <td class="FixedTitleColumn" style="width:50px;"> Ctrl</td> <td class="FixedTitleColumn" rowspan="2" style="width:50px;"> ID</td> <td class="FixedTitleColumn" colspan="2" style="width:100px;"> Value</td> <td colspan="2" style="width:450px;"> Txt</td> <td colspan="3" style="width:450px;"> Txt</td> </tr> <tr class="FixedTitleRow1"> <td class="FixedTitleColumn"> </td> <td class="FixedTitleColumn"> Code</td> <td class="FixedTitleColumn"> Text</td> <td> Txt1</td> <td> Txt2</td> <td> Txt3</td> <td> Txt4</td> <td> Txt5</td> </tr> <tr> <td class="FixedDataColumn"> </td> <td class="FixedDataColumn"> ID1</td> <td class="FixedDataColumn"> Code1</td> <td class="FixedDataColumn"> Text1</td> <td> 88</td> <td> 22</td> <td> 22</td> <td> 22</td> </tr> </tbody> </table> </div></body></html> 非常感谢chinmo 的帮助,也多谢各位朋友的关注。问题解决 jQuery或$ 不能识别问题 紧急求救 session 值为空 关于datagrid隐藏问题 怎么读出一个网页的长和宽 两台机子上运行相同的程序,一个正确,一个不正确? 如何用javascript 客户端脚本取的 ID地址栏内容? 请问这一段程序中的检查e-mail是否正确的if 语句段为何是错误的? 正则表达式不是字符串无法动态的改变的问题 哪位有经验的高手推荐几本JavaScript的好书,我马上要工作了,急! 这段JS代码中,为什么获取不了标签的属性? 如何实现在dreamweaver中把层拖到固定地方? new Function()的问题
可以实现左侧若干列的锁定,且多行表头也固定。
类似Google在线文档的表格,但是结构与他的不同
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>固定表头和列(多行表头)</title>
<style>
.FixedTitleRow
{
position: relative;
top: expression(this.offsetParent.scrollTop);
z-index: 10;
background-color: #EEEEEE;
border-bottom:1px solid #CCCCCC;
}
.FixedTitleColumn
{
position: relative;
left: expression(this.parentElement.offsetParent.parentElement.scrollLeft);
background-color:Lime;
}
.FixedDataColumn
{
position: relative;
left: expression(this.parentElement.offsetParent.parentElement.scrollLeft);
background-color: #F7F7F7;
}
</style>
</head>
<body>
<div id="scrollDiv" style="width: 600px; overflow: auto; cursor: default; display: inline;
position: absolute; height: 200px;">
<table id='tbUserDefined' cellpadding='0' cellspacing='0'
style='table-layout: fixed; border-collapse:collapse;' bordercolor='#777777' border='1'>
<tbody>
<tr id="aa">
<td class="FixedTitleColumn" style="width:50px;">
Ctrl</td>
<td class="FixedTitleColumn" rowspan="2" style="width:50px;">
ID</td>
<td class="FixedTitleColumn" colspan="2" style="width:100px;">
Value</td>
<td colspan="2" style="width:450px;">
Txt</td>
<td colspan="3" style="width:450px;">
Txt</td>
</tr>
<tr id="bb">
<td class="FixedTitleColumn">
</td>
<td class="FixedTitleColumn">
Code</td>
<td class="FixedTitleColumn">
Text</td>
<td>
Txt1</td>
<td>
Txt2</td>
<td>
Txt3</td>
<td>
Txt4</td>
<td>
Txt5</td>
</tr>
<tr>
<td class="FixedDataColumn">
</td>
<td class="FixedDataColumn">
ID1</td>
<td class="FixedDataColumn">
Code1</td>
<td class="FixedDataColumn">
Text1</td>
<td>
88</td>
<td>
22</td>
<td>
22</td>
<td>
22</td>
</tr> </tbody>
</table>
</div></body>
</html>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>固定表头和列</title>
<style> .FixedTitleRow
{
position: relative;
top: expression(this.offsetParent.scrollTop);
z-index: 10;
background-color: #E6ECF0;
}
.FixedTitleColumn
{
position: relative;
left: expression(this.parentElement.offsetParent.scrollLeft);
}
.FixedDataColumn
{
position: relative;
left: expression(this.parentElement.offsetParent.parentElement.scrollLeft);
background-color: #E6ECF0;
}
</style>
</head><body>
<div id="scrollDiv" style="width: 300px; overflow: auto; cursor: default; display: inline;
position: absolute; height: 200px;">
<table id='accountTable' width='500' height='230' cellpadding='0' cellspacing='0'
style='table-layout: auto' bordercolor='lightgrey'>
<tbody>
<tr class="FixedTitleRow">
<td class="FixedTitleColumn">ID0</td>
<td class="FixedTitleColumn">CK0</td>
<td class="FixedTitleColumn">Code0</td>
<td class="FixedTitleColumn">Descirption0</td>
<td class="FixedTitleColumn">TOL0</td>
<td>XS0</td>
<td>SS0</td>
<td>MS0</td>
<td>DS0</td>
<td>BS0</td>
<td>XL0</td>
<td>ML0</td>
<td>DL0</td>
<td>EM0</td>
<td>BM0</td>
</tr><tr>
<td class="FixedDataColumn">88</td>
<td class="FixedDataColumn">88</td>
<td class="FixedDataColumn">88</td>
<td class="FixedDataColumn">88</td>
<td class="FixedDataColumn">88</td>
<td>22</td>
<td>22</td>
<td>22</td>
<td>22</td>
<td>22</td>
<td>22</td>
<td>22</td>
<td>22</td>
<td>22</td>
<td>22</td>
</tr><tr>
<td class="FixedDataColumn">111</td>
<td class="FixedDataColumn">111</td>
<td class="FixedDataColumn">1111</td>
<td class="FixedDataColumn">This is Test</td>
<td class="FixedDataColumn">1</td>
<td>001</td>
<td>002</td>
<td>003</td>
<td>004</td>
<td>005</td>
<td>006</td>
<td>007</td>
<td>008</td>
<td>009</td>
<td>010</td>
</tr><tr>
<td class="FixedDataColumn">111</td>
<td class="FixedDataColumn">111</td>
<td class="FixedDataColumn">1111</td>
<td class="FixedDataColumn">This is Test</td>
<td class="FixedDataColumn">1</td>
<td>001</td>
<td>002</td>
<td>003</td>
<td>004</td>
<td>005</td>
<td>006</td>
<td>007</td>
<td>008</td>
<td>009</td>
<td>010</td>
</tr><tr>
<td class="FixedDataColumn">111</td>
<td class="FixedDataColumn">111</td>
<td class="FixedDataColumn">1111</td>
<td class="FixedDataColumn">This is Test</td>
<td class="FixedDataColumn">1</td>
<td>001</td>
<td>002</td>
<td>003</td>
<td>004</td>
<td>005</td>
<td>006</td>
<td>007</td>
<td>008</td>
<td>009</td>
<td>010</td>
</tr>
</tbody>
</table>
</div>
</body></html>
呵呵,多谢回复。我的示例就是你给的代码上演变而来,问题是,我的应用中出现了多行表头,且出现了rowspan=2的表头单元格,请看一下我第一个例子,拖动一下横向滚动条就明白我所说的不好解决的问题了。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>固定表头和列(多行表头)</title>
<style>
.FixedTitleRow
{
position: relative;
top: expression(this.offsetParent.scrollTop);
z-index: 10;
background-color: #EEEEEE;
border-bottom:1px solid #CCCCCC;
}
.FixedTitleRow1
{
position: relative;
top: expression(this.offsetParent.scrollTop);
z-index: 9;
background-color: #EEEEEE;
border-bottom:1px solid #CCCCCC;
}
.FixedTitleColumn
{
position: relative;
left: expression(this.parentElement.offsetParent.scrollLeft);
background-color:Lime;
}
.FixedDataColumn
{
position: relative;
left: expression(this.parentElement.offsetParent.parentElement.scrollLeft);
background-color: #F7F7F7;
}
</style>
</head>
<body>
<div id="scrollDiv" style="width: 600px; overflow: auto; cursor: default; display: inline;
position: absolute; height: 200px;">
<table id='tbUserDefined' cellpadding='0' cellspacing='0'
style='table-layout: fixed; border-collapse:collapse;' bordercolor='#777777' border='1'>
<tbody>
<tr class="FixedTitleRow">
<td class="FixedTitleColumn" rowspan="2" style="width:50px;">
Ctrl</td>
<td class="FixedTitleColumn" rowspan="2" style="width:50px;">
ID</td>
<td class="FixedTitleColumn" colspan="2" style="width:100px;">
Value</td>
<td colspan="2" style="width:450px;">
Txt</td>
<td colspan="3" style="width:450px;">
Txt</td>
</tr>
<tr class="FixedTitleRow1">
<td class="FixedTitleColumn">
</td>
<td class="FixedTitleColumn">
Code</td>
<td class="FixedTitleColumn">
Text</td>
<td>
Txt1</td>
<td>
Txt2</td>
<td>
Txt3</td>
<td>
Txt4</td>
<td>
Txt5</td>
</tr>
<tr>
<td class="FixedDataColumn">
</td>
<td class="FixedDataColumn">
ID1</td>
<td class="FixedDataColumn">
Code1</td>
<td class="FixedDataColumn">
Text1</td>
<td>
88</td>
<td>
22</td>
<td>
22</td>
<td>
22</td>
</tr> </tbody>
</table>
</div></body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>固定表头和列(多行表头)</title>
<style>
.FixedTitleRow
{
position: relative;
top: expression(this.offsetParent.scrollTop);
z-index: 10;
background-color: #EEEEEE;
border-bottom:1px solid #CCCCCC;
}
.FixedTitleRow1
{
position: relative;
top: expression(this.offsetParent.scrollTop);
z-index: 9;
background-color: #EEEEEE;
border-bottom:1px solid #CCCCCC;
}
.FixedTitleColumn
{
position: relative;
left: expression(this.parentElement.offsetParent.scrollLeft);
background-color:Lime;
}
.FixedDataColumn
{
position: relative;
left: expression(this.parentElement.offsetParent.parentElement.scrollLeft);
background-color: #F7F7F7;
}
</style>
</head>
<body>
<div id="scrollDiv" style="width: 600px; overflow: auto; cursor: default; display: inline;
position: absolute; height: 200px;">
<table id='tbUserDefined' cellpadding='0' cellspacing='0'
style='table-layout: fixed; border-collapse:collapse;' bordercolor='#777777' border='1'>
<tbody>
<tr class="FixedTitleRow">
<td class="FixedTitleColumn" style="width:50px;">
Ctrl</td>
<td class="FixedTitleColumn" rowspan="2" style="width:50px;">
ID</td>
<td class="FixedTitleColumn" colspan="2" style="width:100px;">
Value</td>
<td colspan="2" style="width:450px;">
Txt</td>
<td colspan="3" style="width:450px;">
Txt</td>
</tr>
<tr class="FixedTitleRow1">
<td class="FixedTitleColumn">
</td>
<td class="FixedTitleColumn">
Code</td>
<td class="FixedTitleColumn">
Text</td>
<td>
Txt1</td>
<td>
Txt2</td>
<td>
Txt3</td>
<td>
Txt4</td>
<td>
Txt5</td>
</tr>
<tr>
<td class="FixedDataColumn">
</td>
<td class="FixedDataColumn">
ID1</td>
<td class="FixedDataColumn">
Code1</td>
<td class="FixedDataColumn">
Text1</td>
<td>
88</td>
<td>
22</td>
<td>
22</td>
<td>
22</td>
</tr> </tbody>
</table>
</div></body>
</html>