私は最近同様の問題を抱えており、さまざまなソリューションを組み合わせて修正することになりました。
最初の最も簡単な方法は、ヘッダー用と本体用の2つのテーブルを使用することでした。これは機能しますが、ヘッダーと本文の列が揃っていません。そして、Twitterブートストラップテーブルに付属する自動サイズを使用したかったので、次の場合にヘッダーを変更する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>
ヘッダーと本文は2つの別々のテーブルに分かれています。それらの1つは、垂直スクロールバーを生成するために必要なスタイルを持つDIV内にあります。ここに私が使用したCSSがあります:
.bodycontainer {
//height: 200px
width: 100%;
margin: 0;
}
.table-scrollable {
margin: 0px;
padding: 0px;
}
ページの高さがどうであれ、テーブルをページの下部に到達させたいので、ここで高さをコメントしました。
ヘッダーで使用したdata-sort属性は、すべてのtdでも使用されます。このようにして、すべてのtdの幅とパディング、および行の幅を取得できます。CSSを使用して設定したdata-sort属性を使用して、それに応じて各ヘッダーのパディングと幅、およびスクロールバーがないため常に大きいヘッダー行のパディングと幅を使用します。これは、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というヘッダーの配列があると想定しています。
それはきれいではありませんが、動作します。それが誰かを助けることを願っています。