最近、同様の問題が発生し、さまざまなソリューションを組み合わせて修正することになりました。
最初の最も単純な方法は、2 つのテーブルを使用することでした。1 つはヘッダー用で、もう 1 つは本文用です。これは機能しますが、ヘッダーと本文の列が整列していません。そして、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 の幅とパディング、および行の幅を取得できました。data-sort 属性を使用して、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 というヘッダーの配列があると仮定します。
きれいではありませんが、機能します。それが誰かを助けることを願っています。