Niedawno miałem podobny problem i ostatecznie naprawiłem go przy użyciu mieszanki różnych rozwiązań.
Pierwszym i najprostszym było użycie dwóch tabel, jednej dla nagłówków i jednej dla ciała. To działa, ale nagłówki i kolumny z treścią nie są wyrównane. A ponieważ chciałem użyć rozmiaru automatycznego, który jest dostępny w tabelach ładowania początkowego na Twitterze, utworzyłem funkcję JavaScript, która zmienia nagłówki, gdy: renderowane jest ciało; okna są zmieniane; dane w kolumnie ulegną zmianie itp.
Oto część kodu, którego użyłem:
<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>
Nagłówki i treść są podzielone na dwie oddzielne tabele. Jeden z nich znajduje się wewnątrz DIV z niezbędnym stylem do generowania pionowych pasków przewijania. Oto CSS, którego użyłem:
.bodycontainer {
//height: 200px
width: 100%;
margin: 0;
}
.table-scrollable {
margin: 0px;
padding: 0px;
}
Skomentowałem tutaj wysokość, ponieważ chciałem, aby tabela sięgała do dołu strony, niezależnie od wysokości strony.
Atrybuty sortowania danych, których użyłem w nagłówkach, są również używane w każdym td. W ten sposób mogłem uzyskać szerokość i wypełnienie każdego td oraz szerokość rzędu. Używając atrybutów sortowania danych, ustawiłem za pomocą CSS odpowiednio dopełnienie i szerokość każdego nagłówka oraz wiersza nagłówka, który jest zawsze większy, ponieważ nie ma paska przewijania. Oto funkcja używająca 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
Tutaj zakładam, że masz tablicę nagłówków o nazwie @headers.
Nie jest ładna, ale działa. Mam nadzieję, że to komuś pomoże.