css控制固定表頭,兼容行列合併

http://www.iteye.com/topic/585780


項目中設計的報表table設計的列數相對過多,當拖動下方的滾動條時無法對應表頭所對應的列,因此在網上搜索了好一段日子,最後在網上找到了一些參考資料,然後總結歸納出兼容行列合併的固定表頭demo。

多瀏覽器沒有做太多測試,在ie6中已測試通過。

功能期待了很久今天終於找到解決的方式,總結到javaeye中方便日後查閱。實現方式可能還有更好的,希望有大牛路過,給我留點更好的實現例子作日後交流之用。

以下是相關的css

<style type="text/css"> 
<!-- 
body,table, td, a {font:9pt;} 
/*重點:固定行頭樣式*/
.scrollRowThead{position: relative; left: expression(this.parentElement.parentElement.parentElement.parentElement.scrollLeft);z-index:0;}
/*重點:固定表頭樣式*/
.scrollColThead {position: relative;top: expression(this.parentElement.parentElement.parentElement.scrollTop);z-index:2;}
/*行列交叉的地方*/
.scrollCR { z-index:3;}
/*div外框*/
.scrollDiv {height:200px;clear: both; border: 1px solid #EEEEEE;OVERFLOW: scroll;width: 320px; }
/*行頭居中*/
.scrollColThead td,.scrollColThead th{ text-align: center ;}
/*行頭列頭背景*/
.scrollRowThead,.scrollColThead td,.scrollColThead th{background-color:EEEEEE;}
/*表格的線*/
.scrolltable{border-bottom:1px solid #CCCCCC; border-right:1px solid #CCCCCC; }
/*單元格的線等*/
.scrolltable td,.scrollTable th{border-left: 1px solid #CCCCCC; border-top: 1px solid #CCCCCC; padding: 5px; }

.scrollTable thead th{background-color:#EEEEEE;font-weight:bold;position:relative;}
--> 
</style>

以下是HTML


<h1>利用CSS代碼讓Table產生固定表頭</h1>
<div id="scrollDiv" class="scrollDiv" >
<table border="0" cellpadding="3" cellspacing="0" width="500" class="scrollTable">
	<thead>
<tr class="scrollColThead"  >
  <th class="scrollRowThead scrollCR"  > </th>
  <th colspan="2">列頭</th>
  <th colspan="2">列頭</th>
  <th rowspan="2">列頭</th>
</tr>
<tr class="scrollColThead"  >
  <th class="scrollRowThead scrollCR"  >h1</th>
  <th >h2</th>
  <th >h3</th>
  <th >h4</th>
  <th >h5</th>
</tr>
</thead>
<tr>
  <td class="scrollRowThead"  >
	<input type="checkbox" name="checkbox" value="checkbox">
	a</td>
  <td>單元格2</td>
  <td>單元格3</td>
  <td>單元格4</td>
  <td>單元格5</td>
  <td>單元格5</td>
</tr>
<tr>
  <td class="scrollRowThead"  >
	<input type="checkbox" name="checkbox2" value="checkbox">
	b</td>
  <td>單元格2</td>
  <td>單元格3</td>
  <td>單元格4</td>
  <td>單元格5</td>
  <td>單元格5</td>
</tr>
<tr>
  <td nowrap class="scrollRowThead"  >
	<input type="checkbox" name="checkbox3" value="checkbox">
	c</td>
  <td nowrap>單元格2</td>
  <td nowrap>單元格3</td>
  <td nowrap>單元格4</td>
  <td nowrap>單元格5</td>
  <td nowrap>單元格5</td>
</tr>
<tr>
  <td class="scrollRowThead"  >
	<input type="checkbox" name="checkbox4" value="checkbox">
	d</td>
  <td>單元格2</td>
  <td>單元格3</td>
  <td>單元格4</td>
  <td>單元格5</td>
  <td>單元格5</td>
</tr>
<tr>
  <td class="scrollRowThead"  >
	<input type="checkbox" name="checkbox5" value="checkbox">
	e</td>
  <td>單元格2</td>
  <td>單元格3</td>
  <td>單元格4</td>
  <td>單元格5</td>
  <td>單元格5</td>
</tr>
<tr>
  <td class="scrollRowThead"  >
	<input type="checkbox" name="checkbox6" value="checkbox">
	f</td>
  <td>單元格2</td>
  <td>單元格3</td>
  <td>單元格4</td>
  <td>單元格5</td>
  <td>單元格5</td>
</tr>
<tr>
  <td class="scrollRowThead" >
	<input type="checkbox" name="checkbox7" value="checkbox">
	g</td>
  <td>單元格2</td>
  <td>單元格3</td>
  <td>單元格4</td>
  <td>單元格5</td>
  <td>單元格5</td>
</tr>
</table>
</div>



另外補充一點,如果在表頭合併的是最後一行的時候,排版將出現問題。由於上面合併的只有兩行,因此樣式沒有受到改變,如果要處理,暫時的解決辦法就是不合並rowspan最後一行,將其多行顯示,有點牽強,但找不到解決辦法。類似情況如下圖:



找了些資料可作參考:
http://www.loveayang.com.cn/post/2008/04/e59bbae5ae9ae8a1a8e5a4b4e79a84CSSe5ae9ee78eb0.aspx
文章中亦說沒有辦法解決上述的這個問題,留待日後有更好的解決方案。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章