Нещодавно у мене була подібна проблема, і я закінчив її виправити за допомогою суміші різних рішень.
Першим і найпростішим було використання двох таблиць, однієї для заголовків і однієї для тіла. Це працює, але заголовки та стовпці тіла не вирівняні. І, оскільки я хотів використовувати автоматичний розмір, що поставляється із таблицями завантажувального твітера, я в кінцевому підсумку створив функцію 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, підкладку та ширину кожного заголовка відповідно та рядка заголовка, який завжди більший, оскільки у нього немає смуги прокрутки. Ось функція за допомогою 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
Тут я припускаю, що у вас є масив заголовків під назвою @headers.
Це не дуже, але це працює. Сподіваюся, це комусь допоможе.