css控制固定表头,兼容行列合并

项目中设计的报表table设计的列数相对过多,当拖动下方的滚动条时无法对应表头所对应的列,因此在网上搜索了好一段日子,最后在网上找到了一些参考资料,然后总结归纳出兼容行列合并的固定表头demo。

多浏览器没有做太多测试,在ie6中已测试通过。

功能期待了很久今天终于找到解决的方式,总结到javaeye中方便日后查阅。实现方式可能还有更好的,希望有大牛路过,给我留点更好的实现例子作日后交流之用。

以下是相关的css

Html代码  

  1. <style type="text/css">
  2. <!--
  3. body,table, td, a {font:9pt;}
  4. /*重点:固定行头样式*/
  5. .scrollRowThead{position: relative; left: expression(this.parentElement.parentElement.parentElement.parentElement.scrollLeft);z-index:0;}
  6. /*重点:固定表头样式*/
  7. .scrollColThead {position: relative;top: expression(this.parentElement.parentElement.parentElement.scrollTop);z-index:2;}
  8. /*行列交叉的地方*/
  9. .scrollCR { z-index:3;}
  10. /*div外框*/
  11. .scrollDiv {height:200px;clear: both; border: 1px solid #EEEEEE;OVERFLOW: scroll;width: 320px; }
  12. /*行头居中*/
  13. .scrollColThead td,.scrollColThead th{ text-align: center ;}
  14. /*行头列头背景*/
  15. .scrollRowThead,.scrollColThead td,.scrollColThead th{}
  16. /*表格的线*/
  17. .scrolltable{border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; }
  18. /*单元格的线等*/
  19. .scrolltable td,.scrollTable th{border-left: 1px solid #CCCCCC; border-top: 1px solid #CCCCCC; padding: 5px; }
  20. .scrollTable thead th{font-weight:bold;position:relative;}
  21. -->
  22. </style>

以下是HTML

Html代码  

  1. <h1>利用CSS代码让Table产生固定表头</h1>
  2. <div id="scrollDiv" class="scrollDiv" >
  3. <table border="0" cellpadding="3" cellspacing="0" width="500" class="scrollTable">
  4. <thead>
  5. <tr class="scrollColThead"  >
  6. <th class="scrollRowThead scrollCR"  >&nbsp;</th>
  7. <th colspan="2">列头</th>
  8. <th colspan="2">列头</th>
  9. <th rowspan="2">列头</th>
  10. </tr>
  11. <tr class="scrollColThead"  >
  12. <th class="scrollRowThead scrollCR"  >h1</th>
  13. <th >h2</th>
  14. <th >h3</th>
  15. <th >h4</th>
  16. <th >h5</th>
  17. </tr>
  18. </thead>
  19. <tr>
  20. <td class="scrollRowThead"  >
  21. <input type="checkbox" name="checkbox" value="checkbox">
  22. a</td>
  23. <td>单元格2</td>
  24. <td>单元格3</td>
  25. <td>单元格4</td>
  26. <td>单元格5</td>
  27. <td>单元格5</td>
  28. </tr>
  29. <tr>
  30. <td class="scrollRowThead"  >
  31. <input type="checkbox" name="checkbox2" value="checkbox">
  32. b</td>
  33. <td>单元格2</td>
  34. <td>单元格3</td>
  35. <td>单元格4</td>
  36. <td>单元格5</td>
  37. <td>单元格5</td>
  38. </tr>
  39. <tr>
  40. <td nowrap class="scrollRowThead"  >
  41. <input type="checkbox" name="checkbox3" value="checkbox">
  42. c</td>
  43. <td nowrap>单元格2</td>
  44. <td nowrap>单元格3</td>
  45. <td nowrap>单元格4</td>
  46. <td nowrap>单元格5</td>
  47. <td nowrap>单元格5</td>
  48. </tr>
  49. <tr>
  50. <td class="scrollRowThead"  >
  51. <input type="checkbox" name="checkbox4" value="checkbox">
  52. d</td>
  53. <td>单元格2</td>
  54. <td>单元格3</td>
  55. <td>单元格4</td>
  56. <td>单元格5</td>
  57. <td>单元格5</td>
  58. </tr>
  59. <tr>
  60. <td class="scrollRowThead"  >
  61. <input type="checkbox" name="checkbox5" value="checkbox">
  62. e</td>
  63. <td>单元格2</td>
  64. <td>单元格3</td>
  65. <td>单元格4</td>
  66. <td>单元格5</td>
  67. <td>单元格5</td>
  68. </tr>
  69. <tr>
  70. <td class="scrollRowThead"  >
  71. <input type="checkbox" name="checkbox6" value="checkbox">
  72. f</td>
  73. <td>单元格2</td>
  74. <td>单元格3</td>
  75. <td>单元格4</td>
  76. <td>单元格5</td>
  77. <td>单元格5</td>
  78. </tr>
  79. <tr>
  80. <td class="scrollRowThead" >
  81. <input type="checkbox" name="checkbox7" value="checkbox">
  82. g</td>
  83. <td>单元格2</td>
  84. <td>单元格3</td>
  85. <td>单元格4</td>
  86. <td>单元格5</td>
  87. <td>单元格5</td>
  88. </tr>
  89. </table>
  90. </div>

另外补充一点,如果在表头合并的是最后一行的时候,排版将出现问题。由于上面合并的只有两行,因此样式没有受到改变,如果要处理,暂时的解决办法就是不合并rowspan最后一行,将其多行显示,有点牵强,但找不到解决办法。类似情况如下图:

找了些资料可作参考: 
http://www.loveayang.com.cn/post/2008/04/e59bbae5ae9ae8a1a8e5a4b4e79a84CSSe5ae9ee78eb0.aspx 
文章中亦说没有办法解决上述的这个问题,留待日后有更好的解决方案。

时间: 2024-08-21 21:38:13

css控制固定表头,兼容行列合并的相关文章

CSS左侧固定宽 右侧自适应(兼容所有浏览器)

左侧固定宽,右侧自适应屏幕宽: 左右两列,等高布局: 左右两列要求有最小高度,例如:200px;(当内容超出200时,会自动以等高的方式增高) 要求不用JS或CSS行为实现: 仔细分析试题要求,要达到效果其实也并不是太难,只是给人感觉像有点蛋疼的问题一样.但是你仔细看后你会觉得不是那么回事: 左边固定,右边自适应布局,这个第一点应该来说是非常的容易,实现的方法也是相当的多,那么就可以说第一条要求已不是什么要求了: 左右两列等高布局,这一点相对来说要复杂一些,不过你要是了解了怎么实现等高布局,那么

CSS 控制table 滑动及调整列宽等问题总结

一. 通过css控制table y方向上滚动 html中没有滚动条,可以根据overflow属性的scroll来对table显示不完全的内容进行滚动. 只是y方向上滚动,很简单,只要设置div的height高度.然后设置overflow-y:scroll.这样当内容高度超过了height设定的高度,就会出现滚动条 css: .scroll_y{ max-height: 200px; /* 宽度大概比表头宽17px,具体值实际调试 */ width:531px; overflow-y: scrol

CSS对各个浏览器兼容技巧---HACK技巧

*   ie6和ie7都可以识别_   只有ie6可以识别\0  只有ie8可以识别:root 只有ie9可以识别 关于CSS对各个浏览器兼容已经是老生常谈的问题了, 网络上的教程遍地都是.以下内容没有太多新颖, 纯属个人总结, 希望能对初学者有一定的帮助. 一.CSS HACK HACK概念: 不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所

CSS控制,使用图片作为序列标记

今天看以前写的网页设计作业,看见要将图片作为项目标记显示,而我居然使用的是背景图片插入完成了这一效果,觉得我当时的脑回路也是蛮神奇的,现在总结实现的方法,也让自己加深印象吧! 实现效果: 方法一:自然是使用list-style-image属性 #mainContent>li{ list-style-image:url(bullet_blue.png); } 这个方法用css控制,也比较简单,可是我觉得要给每个标题都添加<li>标记,特别麻烦.后面的有序列表部分不用实现用图片作为标记,选择

下载不含数据EXCEL的固定表头模版(标准EXCEL只含有列头),然后上传EXCEL.显示成功和上传失败的EXCEL连接

<div id="import" runat="server" visible="false"> Step1:<asp:HyperLink ID="HyperLink1" NavigateUrl="~/CommonTemplate/设备清单模版.xlsx" runat="server">下载模版</asp:HyperLink><br />

表格在固定表头遇到样式问题

css 样式来固定表头,首先设置两个table,这个时候就遇到了一个问题,那就是两个表格td的宽度要保持对其.这样才能做到固定表头的效果. 首先给table设置一个固定宽度.然后添加样式 table{table-layed:fixed} 有可能还会遇到其他的问题就是在设置td的宽度无效,这个时候不要慌.先检查是否为td设置了colspan和rowsapn等属性.如果是表格的第一列tr设置了这两个属性很可能导致td的宽度无效.我前面就是,利用一个其他的元素代替  然后就可以肆无忌惮的修改td的宽度

固定表头、锁定前几列的代码参考[JS篇]

引语:做有难度的事情,才是成长最快的时候.前段时间,接了一个公司的稍微大点的项目,急着赶进度,本人又没有独立带过队,因此,把自己给搞懵逼了.总是没有多余的时间来做自己想做的事,而且,经常把工作带入生活,这TM真是一个糟糕的事情!这两天,终于把项目上上去了,不管结果怎么样,总算是交差了吧.趁着这空档的时间,写点东西. 本篇,就来写写关于固定表头和表列的事儿吧. 相信大家使用excel的时候,肯定都会用到一项冻结的功能,冻结之后,可以让你很方便的查看到各种标题,从而能清楚的查看到当前行的内容. 这个

自定义表格固定表头,随着表格内容增加出现滚动条

1.首先要固定表头就必须是两个表格组合在一起 2.用一个div把两个表格包在一起,并且设置宽度,在让它可以横向滚动,overflow-x: auto 3.在设置里面两个table的宽度为一样,在设置内容表格overflow-x:hidden;overflow-y:auto <!--表格表头固定--HTML部分> <div class="wrap_table"> <div class="table_head"> <table

css控制右侧二维码浮动代码

<!--请将以下这段代码放到网页中您想要显示固定图标的位置--> <div id="FloatDIV" style="position: absolute;top: 0px; border-right: activeborder 1px solid; border-top: activeborder 1px solid; border-left: activeborder 1px solid; border-bottom: activeborder 1px