Gần đây tôi đã có một vấn đề tương tự và cuối cùng đã sửa nó bằng cách sử dụng hỗn hợp các giải pháp khác nhau.
Đầu tiên và đơn giản nhất là sử dụng hai bảng, một cho tiêu đề và một cho cơ thể. Điều này hoạt động nhưng các tiêu đề và các cột cơ thể không được căn chỉnh. Và, vì tôi muốn sử dụng kích thước tự động đi kèm với các bảng bootstrap twitter, cuối cùng tôi đã tạo ra một hàm Javascript thay đổi các tiêu đề khi: phần thân được hiển thị; các cửa sổ được thay đổi kích thước; dữ liệu trong cột thay đổi, v.v.
Đây là một số mã tôi đã sử dụng:
<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>
Các tiêu đề và cơ thể được chia thành hai bảng riêng biệt. Một trong số chúng nằm trong DIV với kiểu dáng cần thiết để tạo các thanh cuộn dọc. Đây là CSS tôi đã sử dụng:
.bodycontainer {
//height: 200px
width: 100%;
margin: 0;
}
.table-scrollable {
margin: 0px;
padding: 0px;
}
Tôi nhận xét chiều cao ở đây vì tôi muốn bảng đạt đến cuối trang, bất kể chiều cao trang có thể là bao nhiêu.
Các thuộc tính sắp xếp dữ liệu tôi sử dụng trong các tiêu đề cũng được sử dụng trong mọi td. Bằng cách này tôi có thể có được chiều rộng và phần đệm của mỗi td và chiều rộng của hàng. Sử dụng các thuộc tính sắp xếp dữ liệu tôi đặt bằng CSS, phần đệm và chiều rộng của mỗi tiêu đề tương ứng và của hàng tiêu đề luôn lớn hơn vì nó không có thanh cuộn. Đây là chức năng sử dụng 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
Ở đây tôi giả sử rằng bạn có một loạt các tiêu đề được gọi là @headers.
Nó không đẹp nhưng nó hoạt động. Hy vọng nó sẽ giúp được ai đó.