2013-10-24 50 views
39

我想讓表格標題固定。表格存在於可滾動的div內。請在此處查看我的代碼:http://jsfiddle.net/w7Mm8/114/請向我建議解決方案。如何使用CSS固定標題製作可滾動表格

感謝

我的代碼:

<div style="position: absolute; height: 200px; overflow: auto; "> 
 
    <div style="height: 250px;"> 
 
     <table border="1"> 
 
      <th>head1</th> 
 
      <th>head2</th> 
 
      <th>head3</th> 
 
      <th>head4</th> 
 
      <tr> 
 
       <td>row 1, cell 1</td> 
 
       <td>row 1, cell 2</td> 
 
       <td>row 1, cell 2</td> 
 
       <td>row 1, cell 2</td> 
 
      </tr> 
 
      <tr> 
 
       <td>row 2, cell 1</td> 
 
       <td>row 2, cell 2</td> 
 
       <td>row 1, cell 2</td> 
 
       <td>row 1, cell 2</td> 
 
      </tr> 
 
     </table> 
 
    </div> 
 
</div>

+2

我認爲這是標記爲錯誤的問題的副本。這實際上是http://stackoverflow.com/questions/11891065/css-only-scrollable-table-with-fixed-headers的副本。 – dbn

回答

4

我能想到的一個厚臉皮的方式做到這一點,我不認爲這將是最好的選擇,但它會工作。

將標題創建爲單獨的表格,然後將另一個標題放在div中並設置最大尺寸,然後通過使用overflow來允許滾動進入。

HTML:

<table border="1"> 
    <tr> 
    <th>head1</th> 
    <th>head2</th> 
    <th>head3</th> 
    <th>head4</th> 
    </tr> 
</table> 
<div class="scroll"> 
    <table> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>More Text</td><td>More Text</td><td>More Text</td><td>More Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Even More Text Text</td><td>Even More Text Text</td><td>Even More Text Text</td><td>Even More Text Text</td></tr> 
    </table> 
</div> 

CSS:

table { 
    width: 500px; 
} 

.scroll { 
    max-height: 60px; 
    overflow: auto; 
} 

DEMO HERE

+24

只有當表格具有固定的寬度和固定的柱尺寸時,這才起作用;如果不是這種情況,我怎麼才能正確地對齊表頭的表格列? – Massimo

+0

你不能。即使使用javascript來設置列寬,有時候計算可能會有1個像素偏移。 – nsimeonov

42

你想要做什麼是單獨的表從表的標題的內容。 您只需要滾動<th>元素。 您可以使用<tbody><thead>元素輕鬆地在HTML中定義此分隔。
現在表頭和表體仍然相互連接,它們仍然具有相同的寬度(以及相同的滾動屬性)。現在讓他們不再像桌子一樣工作了,你可以設置display: block。這種方式<thead><tbody>是分開的。

table tbody, table thead 
{ 
    display: block; 
} 

現在你可以滾動設置表中的身體:

table tbody 
{ 
    overflow: auto; 
    height: 100px; 
} 

而在去年,因爲<thead>不共享相同的寬度身體了,您應該設置一個靜態寬度表頭:

th 
{ 
    width: 72px; 
} 

您還應該設置一個靜態的寬度<td>。這解決了未對齊列的問題。

td 
{ 
    width: 72px; 
} 


注意,你也缺少一些HTML元素。每一行應在 <tr>元素,包括標題行:

<tr> 
    <th>head1</th> 
    <th>head2</th> 
    <th>head3</th> 
    <th>head4</th> 
</tr> 

我希望這是你的意思。

jsFiddle

+45

標題和正文單元格的寬度與此解決方案不一致。 – dezman

+5

即使在演示中這也不起作用...即使在添加其他行時,表格內容也不會滾動。是的,標題不與身體對齊。 – Massimo

+3

不錯,但對我無用。如果我必須爲標題和列定義寬度,此解決方案對我的需求無用。我希望表格能夠動態調整它的內容和瀏覽器窗口的寬度。瀏覽器開發者是否沒有爲這個問題發明更智能的解決方案?對我來說,顯然TH應該顯示在相應的TD上,而不是在其他任何地方。這是表頭的SENSE! – Elmue

相關問題