【问题标题】:Fixed table header in a scrollable div with many tbody修复了具有许多 tbody 的可滚动 div 中的表头
【发布时间】:2018-10-31 13:13:47
【问题描述】:

在过去的 3 天里,我一直在尝试将我的表格的thead 固定在可滚动的 div 中,但失败了。

我有一个格式如下的表格:

<div class='div_container'>
<table id='table'> 
<thead>
<tr>
<th>header 1</th>
<th>header 2</th>
<th>header 3</th>
<th>header 4</th>
</tr>
</thead>
<tbody>
<tr class='resultsRow'>
<td>Text</td>
<td>Text</td>
<td>Text</td>
<td>Text</td>
</tr>
<tr class='resultsRow'>
<td>Text</td>
<td>Text</td>
<td>Text</td>
<td>Text</td>
</tr>
<tr class='resultsRow'>
<td>Text</td>
<td>Text</td>
<td>Text</td>
<td>Text</td>
</tr>
</tbody>
<tbody>
<tr>
<td>Text</td>
<td>Text</td>
<td>Text</td>
<td>Text</td>
</tr>
<tr class='resultsRow'>
<td>Text</td>
<td>Text</td>
<td>Text</td>
<td>Text</td>
</tr>
<tr>
<td>Text</td>
<td>Text</td>
<td>Text</td>
<td>Text</td>
</tr>
</tbody>
<tbody>
<tr class='resultsRow'>
<td>Text</td>
<td>Text</td>
<td>Text</td>
<td>Text</td>
</tr>
<tr>
<td>Text</td>
<td>Text</td>
<td>Text</td>
<td>Text</td>
</tr>
<tr class='resultsRow'>
<td>Text</td>
<td>Text</td>
<td>Text</td>
<td>Text</td>
</tr>
</tbody>
</table>
</div>

我试图将标题固定在 div 的顶部,但我唯一得到的(除了完全失败)是 thead 变得固定但它超出了 div 边距。

任何想法如何解决这个问题?

我尝试过同时使用 CSS 和 js,但还是没有运气。

到目前为止我的 CSS:

.div_container{
    overflow: scroll;
    display: block;
    height: 600px;
    margin-left: 10%;
    margin-right: 10%;    
}

#table tbody .resultsRow td {
    text-align: center;    
}

thead {
      position: sticky;
       /* display: block; */
}

【问题讨论】:

    标签: html css html-table fixed-header-tables


    【解决方案1】:

    使用position: sticky;试试这个纯css固定表头解决方案

    div {
      display: inline-block;
      height: 200px;
      overflow: auto
    }
    
    table th {
      position: -webkit-sticky;
      position: sticky;
      top: 0;
    }
    
    table {
      border-collapse: collapse;
    }
    
    th {
      background-color: #ddd;
      color: #fff;
    }
    
    th,
    td {
      padding: 1em .5em;
    }
    
    table tr {
      color: #212121;
    }
    <div>
      <table>
        <thead>
          <tr class="header">
            <th>header 1</th>
            <th>header 2</th>
            <th>header 3</th>
            <th>header 4</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
          </tr>
          <tr>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
          </tr>
          <tr>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
          </tr>
        </tbody>
        <tbody>
          <tr>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
          </tr>
          <tr>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
          </tr>
          <tr>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
          </tr>
        </tbody>
        <tbody>
          <tr>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
          </tr>
          <tr>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
          </tr>
          <tr>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
            <td>Text</td>
          </tr>
        </tbody>
      </table>
    </div>

    【讨论】:

    • 如果上述解决方案不适用于您的情况 - 检查包含元素的 overflow-xoverflow-y css 属性,尤其是 tabletheadtr。令人惊讶的是,它们都不能设置溢出。您可能需要明确地unset 他们。更多信息 - stackoverflow.com/a/54806576/882936
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2014-12-02
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多