2013-10-24 51 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

相关问题