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

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

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

以下是相关的css

  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

  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 
文章中亦说没有办法解决上述的这个问题,留待日后有更好的解决方案。

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

  1. css实现“固定表头带滚动条”的table

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  2. CSS打造固定表头

    html代码: <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  3. js控制固定div和随屏滚动div兼容多浏览器和纯css控制(来自网络)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 纯CSS实现table表头固定(自创备忘)

    因为之前约定时候产品没说要表头固定,这次迭代测试突然提出这个需求,而且不知道因为什么未知原因非要这样不可--因为之前用了table标签做表单,而且也没用插件,这下就难了点,找另外一个前端前辈妹子商量了 ...

  5. css 固定表头的表格,和 width:auto, margin:auto等 自计算方法

    实现思路: 外层用一个table,里面写好Header,然后里面再写一个table里面写好header.然后自己控制overflow的值使内部的tablemargin-top和外层的行高一致就可以实现 ...

  6. html css 如何将表头固定(转)

    html css 如何将表头固定 position属性取值为fixed时,则元素的位置将不受滚动条的影响,而是直接依据窗口定位,这就是将表头固定的最直接方法,网上其他途径感觉都是在走弯路.但是与此同时 ...

  7. html css 如何将表头固定

    position属性取值为fixed时,则元素的位置将不受滚动条的影响,而是直接依据窗口定位,这就是将表头固定的最直接方法,网上其他途径感觉都是在走弯路.但是与此同时必须解决两个问题.第一:表体将随之 ...

  8. 固定表头,单元格td宽度自适应,多内容出现-横向纵向滚动条数据表格的<前世今生>

    固定表头,单元格td宽度自适应,多内容出现-横向纵向滚动条数据表格的<前世今生>     先上图例   & 无论多少数据--都完美! 背景:由于我司行业方向,需要很多数据报表,则t ...

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

    一. 通过css控制table y方向上滚动 html中没有滚动条,可以根据overflow属性的scroll来对table显示不完全的内容进行滚动. 只是y方向上滚动,很简单,只要设置div的hei ...

随机推荐

  1. LED音乐频谱之输入数据处理

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38023431 通过前面的介绍我们知道.声音信号要通过AD转换,变成我们可以处理 ...

  2. mybatis 对象关系映射例子

    入门 http://legend2011.blog.51cto.com/3018495/908956 增删改 http://legend2011.blog.51cto.com/3018495/9130 ...

  3. quartz + spring 配置示例

    <!-- 配置job定时任务类 --> <bean id="triggerCalculateLecturerProfitJob" class="com. ...

  4. [svc]高并发场景 LVS DR +KeepAlive高可用实现及ka的persistence_timeout参数

    LVS-DR+keepalived模式是一种非常经典的常用生产组合 高可用场景及LVS架构 一般都用一(负载)拖多(Server Array)方式 使用LVS架设的服务器集群系统有三个部分组成: (1 ...

  5. 菜鸟学SSH(十七)——基于注解的SSH将配置精简到极致

    很早之前就想写一篇关于SSH整合的博客了,但是一直觉得使用SSH的时候那么多的配置文件,严重破坏了我们代码整体性,比如你要看两个实体的关系还得对照*.hbm.xml文件,要屡清一个Action可能需要 ...

  6. GitBash: 右键添加 Git Bash Here 菜单

    步骤: 1.通过在“运行”中输入‘regedit’,打开注册表. 2.找到[HKEY_CLASSES_ROOT\Directory\Background]. 3.在[Background]下如果没有[ ...

  7. (原创)一个和c#中Lazy<T>类似的c++ Lazy<T>类的实现

    在.net 4.0中增加一个延迟加载类Lazy<T>,它的作用是实现按需延迟加载,也许很多人用过.一个典型的应用场景是这样的:当初始化某个对象时,该对象引用了一个大对象,需要创建,这个对象 ...

  8. 利用es-checker检测当前node对ES6的支持情况

    ode.js发展非常快,对es6特性的支持也越来越良心,但node.js版本很多,各版本对es6的支持度都不一样,为了能清晰的了解各版本对es6特性的支持,需要有一个工具能提供比较清晰的支持说明,甚至 ...

  9. 【驱动】linux设备驱动·入门

    linux设备驱动 驱动程序英文全称Device Driver,也称作设备驱动程序.驱动程序是用于计算机和外部设备通信的特殊程序,相当于软件和硬件的接口,通常只有操作系统能使用驱动程序. 在现代计算机 ...

  10. java多线程14 :wait()和notify()/notifyAll()

    轮询 线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作. 想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000就打印出i,怎么处 ...