我最近遇到了类似的问题,并最终使用不同解决方案的混合物来修复它。
第一个也是最简单的一个是使用两个表格,一个用于标题,一个用于正文。这可行,但标题和正文列未对齐。而且,由于我想使用 twitter 引导表附带的自动大小,我最终创建了一个 Javascript 函数,该函数在以下情况下更改标题:调整窗口大小;列中的数据发生变化等。
这是我使用的一些代码:
<table class="table table-striped table-hover" style="margin-bottom: 0px;">
<thead>
<tr>
<th data-sort="id">Header 1</i></th>
<th data-sort="guide">Header 2</th>
<th data-sort="origin">Header 3</th>
<th data-sort="supplier">Header 4</th>
</tr>
</thead>
</table>
<div class="bodycontainer scrollable">
<table class="table table-hover table-striped table-scrollable">
<tbody id="rows"></tbody>
</table>
</div>
标题和正文分为两个单独的表。其中之一是在具有必要样式的 DIV 中生成垂直滚动条。这是我使用的 CSS:
.bodycontainer {
//height: 200px
width: 100%;
margin: 0;
}
.table-scrollable {
margin: 0px;
padding: 0px;
}
我在这里评论了高度,因为我希望表格到达页面底部,无论页面高度是多少。
我在标题中使用的数据排序属性也用于每个 td。这样我可以获得每个 td 的宽度和填充以及行的宽度。使用我使用 CSS 设置的数据排序属性,相应地每个标题的填充和宽度以及标题行的填充和宽度,因为它没有滚动条,所以它总是更大。这是使用咖啡脚本的功能:
fixHeaders: =>
for header, i in @headers
tdpadding = parseInt(@$("td[data-sort=#{header}]").css('padding'))
tdwidth = parseInt(@$("td[data-sort=#{header}]").css('width'))
@$("th[data-sort=#{header}]").css('padding', tdpadding)
@$("th[data-sort=#{header}]").css('width', tdwidth)
if (i+1) == @headers.length
trwidth = @$("td[data-sort=#{header}]").parent().css('width')
@$("th[data-sort=#{header}]").parent().parent().parent().css('width', trwidth)
@$('.bodycontainer').css('height', window.innerHeight - ($('html').outerHeight() -@$('.bodycontainer').outerHeight() ) ) unless @collection.length == 0
在这里,我假设您有一个名为 @headers 的标头数组。
它不漂亮,但它有效。希望它可以帮助某人。