如何使用CSS制作带有固定标头的可滚动表

时间:2013-10-24 07:07:05

标签: html css html-table

我想修复我的表格的标题。表格存在于可滚动的div中。请在此处查看我的代码:http://jsfiddle.net/w7Mm8/114/请建议我解决此问题。

由于

我的代码:

<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 个答案:

答案 0 :(得分:59)

您要做的是将表格的内容与表格的标题分开。 您只想滚动<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

附录

如果您希望更好地控制列宽,让它们在彼此之间的宽度不同,并且当然保持标题和正文列对齐,您可以使用以下示例:

    table th:nth-child(1), td:nth-child(1) { min-width: 50px;  max-width: 50px; }
    table th:nth-child(2), td:nth-child(2) { min-width: 100px; max-width: 100px; }
    table th:nth-child(3), td:nth-child(3) { min-width: 150px; max-width: 150px; }
    table th:nth-child(4), td:nth-child(4) { min-width: 200px; max-width: 200px; }

答案 1 :(得分:4)

我可以想到一种厚颜无耻的方式,我不认为这将是最好的选择,但它会起作用。

将标题创建为单独的表,然后将另一个标记放在div中并设置最大大小,然后使用overflow允许滚动进入。

table {
  width: 500px;
}

.scroll {
  max-height: 60px;
  overflow: auto;
}
<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>