min*_*nty 144 html javascript css html-table
我正在编写一个页面,我需要一个HTML表来维护一个设置的大小.我需要表格顶部的标题始终保持在那里,但无论表格中添加了多少行,我还需要滚动表格的主体.想想一个迷你版的excel.这似乎是一项简单的任务,但我在网上找到的几乎所有解决方案都有一些缺点.我怎么解决这个问题?
小智 53
我必须找到相同的答案.我找到的最好的例子是http://www.cssplay.co.uk/menu/tablescroll.html - 我发现示例#2对我来说效果很好.您必须使用Java Script设置内部表的高度,其余的是CSS.
Jer*_*nch 12
我看到Sean Haddy 对类似问题的出色解决方案,并冒昧地做了一些编辑:
aria-hidden="false"然而,肖恩做了沉重的事.感谢Matt Burland,也指出需要支持tfoot.
请参阅http://jsfiddle.net/jhfrench/eNP2N/
您是否尝试过使用thead和tbody,并在tbody上设置固定高度溢出:滚动?
你的目标浏览器是什么?
编辑:它在firefox中运行良好(几乎) - 添加垂直滚动条导致需要一个水平滚动条 - yuck.IE只是将每个td的高度设置为我指定的tbody高度.这是我能想到的最好的:
<html>
<head>
<title>Blah</title>
<style type="text/css">
table { width:300px; }
tbody { height:10em; overflow:scroll;}
td { height:auto; }
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>One</th><th>Two</th>
</td>
</tr>
</thead>
<tbody>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
</tbody>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
你需要的是:
1)具有有限高度的表体,仅当内容大于滚动窗口时才发生滚动.但tbody无法调整大小,您必须将其显示为block:
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
Run Code Online (Sandbox Code Playgroud)
2)重新同步表头和表体列的宽度,使后者block成为一个不相关的元素.唯一的方法是通过对两者强制执行相同的列宽来模拟同步.
但是,由于tbody它本身就是一个block现在,它不再表现得像table.由于您仍然需要一种table行为来正确显示列,因此解决方案是要求将每个行显示为单独的tables:
thead {
display: table;
width: 100%; // Fill the containing table
}
tbody tr {
display: table;
width: 100%; // Fill the containing table
}
Run Code Online (Sandbox Code Playgroud)
(请注意,使用此技术,您将无法再跨越行).
一旦完成,你可以强制列的宽度有两个相同的宽度thead和tbody.你不能那样:
th, td { width: 20%; }例如,如果你有5列),这更实用(不需要为每个表实例设置宽度)但不能用于任何列计数我更喜欢最后一个选项,它需要添加:
thead {
table-layout: fixed; // Same layout for all cells
}
tbody tr {
table-layout: fixed; // Same layout for all cells
}
th, td {
width: auto; // Same width for all cells, if table has fixed layout
}
Run Code Online (Sandbox Code Playgroud)