Ich hatte kürzlich ein ähnliches Problem und habe es schließlich mit einer Mischung aus verschiedenen Lösungen behoben.
Die erste und einfachste bestand darin, zwei Tabellen zu verwenden, eine für die Überschriften und eine für den Body. Dies funktioniert, aber die Überschriften und die Körperspalten sind nicht ausgerichtet. Und da ich die automatische Größe verwenden wollte, die mit Twitter-Bootstrap-Tabellen geliefert wird, habe ich eine Javascript-Funktion erstellt, die die Header ändert, wenn: der Body gerendert wird; Die Fenstergröße wird geändert. Die Daten in der Spalte ändern sich usw.
Hier ist ein Teil des Codes, den ich verwendet habe:
<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>
Die Header und der Body sind in zwei separate Tabellen unterteilt. Eine davon befindet sich in einem DIV mit dem erforderlichen Stil zum Generieren der vertikalen Bildlaufleisten. Hier ist das CSS, das ich verwendet habe:
.bodycontainer {
//height: 200px
width: 100%;
margin: 0;
}
.table-scrollable {
margin: 0px;
padding: 0px;
}
Ich habe die Höhe hier kommentiert, weil ich wollte, dass die Tabelle den unteren Rand der Seite erreicht, unabhängig von der Seitenhöhe.
Die Datensortierattribute, die ich in den Headern verwendet habe, werden auch in jedem td verwendet. Auf diese Weise konnte ich die Breite und die Polsterung jedes td und die Breite der Reihe erhalten. Unter Verwendung der Datensortierattribute setze ich mit CSS den Abstand und die Breite jedes Headers entsprechend und der Headerzeile, die immer größer ist, da sie keine Bildlaufleiste hat. Hier ist die Funktion mit Coffeescript:
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
Hier gehe ich davon aus, dass Sie ein Array der Header mit dem Namen @headers haben.
Es ist nicht schön, aber es funktioniert. Hoffe es hilft jemandem.