如何更改转置 table 以使其可水平滚动?

How to change a transposed table to make it horizontally scrollable?

我正在做一个 table 用于产品比较。它是一个带有垂直行的 table,左侧有一个 header,table body 中垂直行有两个或更多产品描述。如果用户选择了很多产品,它应该可以水平滚动。

我使用了 this answer to transpose a table (i.e. make vertical rows). And now I can't manage to add a horizontal scrollbar inside tbody in case if table exceeds the predefined width. I am looking for something similar to this question 中的 CSS,但应用于我的转置 table。

这是我现在拥有的:JSFiddle 这是当我将 table 宽度限制为 200px 时发生的情况:

尝试组合 inline-blocks 和 nowrap:

table { border-collapse: collapse; white-space: nowrap; }
tr { display: block; float: left; }
th, td { display: block; border: 1px solid black; }
tbody, thead { display: inline-block; }

tbody {
  width: 300px;
  overflow-y: hidden;
  overflow-x: auto;
}
<table>
<thead>
  <tr>
      <th>name</th>
      <th>number</th>
  </tr>
</thead>
<tbody>
  <tr>
      <td>James Bond</td>
      <td>007</td>
  </tr>
  <tr>
      <td>Lucipher</td>
      <td>666</td>
  </tr>
  <tr>
      <td>Jon Snow</td>
      <td>998</td>
  </tr>
</tbody>
</table>

  1. table 不应显示为块,如果您的其他布局不需要
  2. 我添加了 white-space: nowrap 以防止换行
  3. 我已将 tbodythead 显示为 inline-block,因此现在您可以像管理内联元素一样管理它们。

如果您只想滚动 tbody 而没有 thead,它可能看起来像这样:

table { border-collapse: collapse; white-space: nowrap; }
tr { display: inline-block; }
th, td { display: block; border: 1px solid black; }
tbody, thead { display: inline-block; vertical-align: top; }

tbody {
  width: 150px;
  overflow-y: hidden;
  overflow-x: auto;
  white-space: nowrap;
}
tbody tr { margin-right: -5px;}
<table>
<thead>
  <tr>
      <th>name</th>
      <th>number</th>
  </tr>
</thead>
<tbody>
  <tr>
      <td>James Bond</td>
      <td>007</td>
  </tr>
  <tr>
      <td>Lucipher</td>
      <td>666</td>
  </tr>
  <tr>
      <td>Jon Snow</td>
      <td>998</td>
  </tr>
</tbody>
</table>

您可以考虑块布局。事实上你已经实现了它,除了 HTML 什么是坏模式。

这将无效 HTML,但您可以用 div 包裹 tbody,然后给 div 宽度和 overflow-x 属性。