粘性 header 相对 parent 溢出

Sticky header to relative parent with overflow

我到处都看到这个问题的变体,但 none 似乎解决了我的问题。我有一个高大的页面,由于内容原因已经有一个 Y 滚动条。部分内容是一个div style="position: relative;",姑且称之为Div1吧。 Div1 中包含导致 X 和 Y 滚动条的内容。在 Div1 中,假设我有一个 table,其中的列太多导致 X 溢出,而行太多导致 Div1 的 Y 溢出。

有没有办法让 tables header 行粘在 Div1 的顶部并保持其宽度?

想象一下这样的结构:

<div id="MainPageDiv">
    //OnScreenContent
    //OnScreenContent
    //OnScreenContent
    //OnScreenContent
    <div class=outerDiv>
        <table class="innerTable">
            <thead>
                //thead columns
            </thead>
            <tbody>
                //tbody rows
            </tbody>
        </table>
    </div>
    //OnScreenContent
    //OnScreenContent
    //OnScreenContent
    //OFFScreenContent
    //OFFScreenContent
    //OFFScreenContent
</div>

所以 outerDiv 和 table 位于页面顶部下方一点点。还要注意更下方有 OFFscreenContent。

我希望主页像正常情况一样滚动,但是在 outerDiv 部分中,当我在 outerDiv 中滚动时,我希望 thead 停留在 outerDiv 容器的顶部。

.outerDiv {
  overflow:scroll;
  height:140px;
}
thead {
 position:absolute;
  top:0; 
}
tbody {
  display:block;
  position:relative;
  padding-top:10px;
}
<div class="outerDiv">
  <table class="innerTable">
  <thead>
    <tr>
      <th>#</th>
      <th>First</th>
      <th>Last</th>
      <th>Handle</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Mark</td>
      <td>Otto</td>
      <td>@mdo</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Jacob</td>
      <td>Thornton</td>
      <td>@fat</td>
    </tr>
    <tr>
      <td>3</td>
      <td colspan="2">Larry the Bird</td>
      <td>@twitter</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Mark</td>
      <td>Otto</td>
      <td>@mdo</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Mark</td>
      <td>Otto</td>
      <td>@mdo</td>
    </tr>
     <tr>
      <td>1</td>
      <td>Mark</td>
      <td>Otto</td>
      <td>@mdo</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Jacob</td>
      <td>Thornton</td>
      <td>@fat</td>
    </tr>
  </tbody>
</table>
</div>

有两种方法可以实现此目的

  1. 设置overflow:scroll;在 table.
  2. 的父元素上
  3. 您可以在此处使用 Bootstrap 内置 table-responsive class。 https://getbootstrap.com/docs/4.1/content/tables/#responsive-tables

我最终使用 CSS 和 jQuery 获得了想要的结果。在我的包装器 class 中,我使用了 position: relative,在 table header 上,我设置了它的位置 absolute,在包装器滚动事件中,我调整了 top 包装器的 scrollTop() 的值。