はい、分かりました:
テーブルを 2 つの DIV でラップする必要があります。
<div class="outerDIV">
<div class="innerDIV">
<table></table>
</div>
</div>
DIV の CSS は次のとおりです。
.outerDIV {
position: relative;
padding-top: 20px; //height of your thead
}
.innerDIV {
overflow-y: auto;
height: 200px; //the actual scrolling container
}
その理由は、基本的に内側の DIV をスクロール可能にし、外側の DIV に貼り付けて THEAD を引き出すためです。
今thead
それを与えることによってouterDIVに貼り付けます
table thead {
display: block;
position: absolute;
top: 0;
left: 0;
}
持っているtbody
必要display: block
もあります。
これで、スクロールは機能しますが、幅が完全にめちゃくちゃになっていることに気付くでしょう。それがJavascriptの登場です。どのように割り当てるかを自分で選択できます。私自身、テーブルの TH に固定幅を与え、幅を取り、それらを の最初の TD 行に割り当てる単純なスクリプトを作成しましたtbody
。
このようなものが動作するはずです:
function scrollingTableSetThWidth(tableId)
{
var table = document.getElementById(tableId);
ths = table.getElementsByTagName('th');
tds = table.getElementsByTagName('td');
if(ths.length > 0) {
for(i=0; i < ths.length; i++) {
tds[i].style.width = getCurrentComputedStyle(ths[i], 'width');
}
}
}
function getCurrentComputedStyle(element, attribute)
{
var attributeValue;
if (window.getComputedStyle)
{ // class A browsers
var styledeclaration = document.defaultView.getComputedStyle(element, null);
attributeValue = styledeclaration.getPropertyValue(attribute);
} else if (element.currentStyle) { // IE
attributeValue = element.currentStyle[vclToCamelCases(attribute)];
}
return attributeValue;
}
もちろん、jQuery を使用すると、これははるかに簡単になりますが、今のところ、このプロジェクトでサードパーティのライブラリを使用することは許可されていません。