Baru-baru ini saya memiliki masalah yang sama dan akhirnya memperbaikinya menggunakan campuran solusi yang berbeda.
Yang pertama dan paling sederhana adalah menggunakan dua tabel, satu untuk header dan satu untuk tubuh. Ini berfungsi tetapi header dan kolom tubuh tidak selaras. Dan, karena saya ingin menggunakan ukuran-otomatis yang datang dengan tabel bootstrap twitter, saya akhirnya membuat fungsi Javascript yang mengubah header ketika: body dirender; ukuran jendela diubah; data di kolom berubah, dll.
Berikut ini beberapa kode yang saya gunakan:
<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>
Header dan tubuh dibagi dalam dua tabel terpisah. Salah satunya adalah di dalam DIV dengan gaya yang diperlukan untuk menghasilkan scrollbar vertikal. Berikut adalah CSS yang saya gunakan:
.bodycontainer {
//height: 200px
width: 100%;
margin: 0;
}
.table-scrollable {
margin: 0px;
padding: 0px;
}
Saya berkomentar ketinggian di sini karena saya ingin meja mencapai bagian bawah halaman, apa pun tingginya halaman.
Atribut data-sort yang saya gunakan di header juga digunakan di setiap td. Dengan cara ini saya bisa mendapatkan lebar dan bantalan setiap td dan lebar baris. Menggunakan atribut data-sort yang saya atur menggunakan CSS padding dan lebar masing-masing header sesuai dan dari baris header yang selalu lebih besar karena tidak memiliki scrollbar. Berikut adalah fungsinya menggunakan 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
Di sini saya berasumsi bahwa Anda memiliki array header yang disebut @ header.
Itu tidak cantik tapi berhasil. Semoga ini bisa membantu seseorang.