【问题标题】:How do I get the table header to align to top and stay at top?如何让表头与顶部对齐并保持在顶部?
【发布时间】:2020-06-17 20:02:15
【问题描述】:

我正在处理一个虚拟化表(使用示例)。如何让表格标题正确排列并在滚动时保持在表格顶部

代码沙箱:-

https://codesandbox.io/s/material-ui-table-virtualized-t2xkt

【问题讨论】:

标签: css reactjs material-ui


【解决方案1】:

我编辑了新内容:抱歉,我没有看到滚动。 在 DataTable.js 中使用 flex-direction: column:

  tableContent: {
    overflowY: "scroll",
    borderCollapse: "collapse",
    display: "flex",
    flexDirection: "column"
  },

并在表头单元格宽度10%:

 tableCellHead: {
    fontSize: "1rem",
    fontWeight: "bold",
    border: "1px solid rgba(224, 224, 224, 1)",
    width:" 10%",
    "&:last-child": {
      paddingRight: "4px"
    }
  },

``

【讨论】:

  • 移除 flex 意味着它们的表格不能再滚动并且标题消失了
  • 不错!这更接近了,但现在滚动条搞砸了,无法正确跟踪,而且我似乎也有两个
【解决方案2】:

表头和表体没有对齐

这是由<table> 元素的.DataTable-tableContent-4 CSS 类和<tbody> 的内联样式中使用的display: flex 引起的。如果你去掉它,你的表格标题和正文将按预期排列。

修复表格的可滚动性

为了使表格可滚动,您定义了heightoverflow-y: scrollable,这是正确的做法,但您在错误的元素上做了。 这些 CSS 属性必须位于表格容器之一,表格的任何父元素,而不是表格本身。

滚动时表格标题保留在表格顶部

您可以使用position: sticky CSS 属性,该属性与top: 0 相结合,让您的标题在滚动时出现在表格顶部。

这是一个演示:

.container {
  height: 150px;
  overflow-y: scroll;
}

thead {
  position: sticky;
  top: 0;
  z-index: 100;
  background-color: #fff;
}
<div class="container">
  <table>
    <thead>
      <tr>
        <td>Name</td>
        <td>Reputation</td>
        <td>Meme potential</td>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Jon Skeet</td>
        <td>Far too much</td>
        <td>High</td>
      </tr>
      <tr>
        <td>John Doe</td>
        <td>Less that Jon Skeet</td>
        <td>Medium</td>
      </tr>
      <tr>
        <td>Community</td>
        <td>-1</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
      <tr>
        <td>Lorem Ipsum</td>
        <td>Unknown</td>
        <td>Low</td>
      </tr>
    </tbody>
  </table>
</div>

编辑:

Here 是您的代码的更正版本(免责声明:我对 React 还很不熟练,代码更正没有按照 React 和 Material-UI 最佳实践进行)

【讨论】:

  • 移除 flex 并不能解决问题,并且会使表格不再可滚动:codesandbox.io/s/material-ui-table-virtualized-t2xkt
  • 随意分叉和修改沙箱:)
  • 这是您要找的吗? codesandbox.io/s/material-ui-table-virtualized-l5x2u 如果是,我会编辑我的答案
  • 不幸的是,No仍然不起作用。我只是看到一个静态表体,没有无法滚动的标题
  • 仍然没有看到变化。我只看到一个没有标题的表格,当您滚动整个表格时,它只会滚动到屏幕外。你想分叉那个沙箱并创建你自己的沙箱吗?
猜你喜欢
  • 2012-05-03
  • 2023-03-09
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 2014-09-25
  • 2017-01-28
相关资源
最近更新 更多