我如何设置 <table>
100% 宽度并只放在里面 <tbody>
垂直滚动一些高度?
table {
width: 100%;
display:block;
}
thead {
display: inline-block;
width: 100%;
height: 20px;
}
tbody {
height: 200px;
display: inline-block;
width: 100%;
overflow: auto;
}
<table>
<thead>
<tr>
<th>Head 1</th>
<th>Head 2</th>
<th>Head 3</th>
<th>Head 4</th>
<th>Head 5</th>
</tr>
</thead>
<tbody>
<tr>
<td>Content 1</td>
<td>Content 2</td>
<td>Content 3</td>
<td>Content 4</td>
<td>Content 5</td>
</tr>
</tbody>
</table>
我想避免添加一些额外的 div,我想要的只是像这样的简单表格,当我尝试更改显示时, table-layout
, position
以及 CSS 表格中的更多内容无法正常工作仅具有 100% 宽度,以 px 为单位固定宽度。
原文由 Marko S 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了使
<tbody>
元素可滚动,我们需要更改它在页面上的显示方式,即使用display: block;
将其显示为块级元素。由于我们更改了
display
tbody
,我们应该更改thead
元素的属性,以防止破坏表格布局。所以我们有:
Web browsers display the
thead
andtbody
elements as row-group (table-header-group
andtable-row-group
) by default.一旦我们改变它,内部
tr
元素不会填满容器的整个空间。为了解决这个问题,我们必须计算
tbody
列的宽度,并通过 JavaScript 将相应的值应用于thead
列。自动宽度列
这是上述逻辑的 jQuery 版本:
这是输出 (在 Windows 7 Chrome 32 上) :
工作演示。
全宽表,相对宽度列
根据原始发帖者的需要,我们可以将
table
扩展到其容器的width
的 100%,然后使用相对( _百分比_)width
表的。由于表格具有(某种) 流体布局,我们应该在容器调整大小时调整
thead
列的宽度。因此,我们应该在调整窗口大小时设置列的宽度:
输出将是:
工作演示。
浏览器支持和替代品
我已经在Windows 7上通过新版本的主要网络浏览器(包括IE10+)测试了上述两种方法,并且有效。
但是,它 在 IE9 及以下版本上 无法 正常 工作。
那是因为 在 表格布局 中,所有元素都应遵循相同的结构属性。
通过将
display: block;
用于<thead>
和<tbody>
元素,我们破坏了表结构。通过 JavaScript 重新设计布局
一种方法是重新设计(整个)表格布局。使用 JavaScript 动态创建新布局并动态处理和/或调整单元格的宽度/高度。
例如,看看下面的例子:
嵌套表
这种方法使用两个嵌套的表格和一个包含的 div。第一个
table
只有一个单元格有一个div
,第二个表放在里面div
检查 CSS Play 中的 垂直滚动表。
这适用于大多数网络浏览器。我们也可以通过 JavaScript 动态地执行上述逻辑。
滚动条上有固定标题的表格
由于向
<tbody>
添加垂直滚动条的目的是在每一行的顶部显示表 头,我们可以 将thead
元素放置到fixed
而不是在屏幕的顶部。这是 Julien 执行的这种方法的 工作演示。
它有一个很有前途的网络浏览器支持。
这里 是 Willem Van Bockstal 的 纯 CSS 实现。
纯 CSS 解决方案
这是旧答案。当然,我已经添加了一个新方法并改进了 CSS 声明。
固定宽度的表格
在这种情况下,
table
应该有一个固定的width
(包括列宽和垂直滚动条宽度的总和) 。每 列 应该有一个特定的 _宽度_, 最后一列
thead
元素需要更大的 _宽度_,等于其他的 宽度 + 垂直滚动条的 _宽度_。因此,CSS 将是:
这是输出:
工作演示。
100% 宽度的表格
In this approach, the
table
has a width of100%
and for eachth
andtd
, the value ofwidth
属性应小于100% / number of cols
。此外,我们需要减少
thead
的 宽度 作为垂直滚动条的 宽度 值。为此,我们需要使用 CSS3
calc()
函数,如下所示:这是 在线演示。
注意: 如果每列的内容都断行,即 每个单元格的内容要足够短, 这种方法就会 失败。
下面是我在回答这个问题时创建的两个 纯 CSS 解决方案 的简单示例。
这是 jsFiddle 演示 v2 。
旧版本: jsFiddle Demo v1