やりたかったことは、HTMLの表でヘッダ行だけスクロールせず固定表示しつつ、
2行目以降の表のみ縦スクロールさせること。
Excelで例えると「ウィンドウ枠の固定」>「先頭行の固定」みたいなものを実現したい。

普通にテーブルを2つに分けると、それぞれの列幅が微妙に変わってしまう。
固定値を指定すればもちろん、揃えられるけど、ウィンドウ幅いっぱいに使いたい。
そんでもって、表の高さもウィンドウ高さに合わせ自動調整したい。
更に、スクロールバーが表示、非表示された場合、また上下のテーブル列幅が変わってしまうので、これもピッタリ列幅を合わせたい。
そんな、感じでハマりポイントがいくつもあったけど、何とかそれっぽいのが出来たので、忘れないうちに覚書。

サンプルはこちら。
HTMLソース
<html>
<head>
<style type="text/css">
table td, table th {
border: 1px solid black;
}
table{
width: 100%;
table-layout: fixed;
overflow-wrap : break-word;
}
div.dHead {
background-color: rgb(200, 200, 255);
}
div.dBody {
width: 97vw;
overflow: auto;
height: 600px;
background-color: rgb(255, 255, 220);
}
</style>
<script>
function setTableHeight(){
document.getElementById("dBody").style.height = window.innerHeight -200 + "px";
document.getElementById("dHead").style.width = document.getElementById("dBody").clientWidth + "px";
}
window.onresize = function() {
setTableHeight();
}
</script>
</head>
<body onload="setTableHeight();">
<h3><table>のヘッダ行だけ固定し、ボディ部内のみスクロール<h3>
<div class="dHead" id="dHead">
<table>
<tr>
<th>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</th>
<th>B</th>
<th>CCC</th>
<th>DD</th>
</tr>
</table>
</div>
<div class="dBody" id="dBody">
<table>
<tr>
<td>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</td>
<td>1</td>
<td>1</td>
<td>1</td>
</tr>
<tr>
<td>BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
<td>2</td>
<td>2</td>
<td>2</td>
</tr>
<tr>
<td>CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC</td>
<td>3</td>
<td>3</td>
<td>3</td>
</tr>
<tr>
<td>DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD</td>
<td>4</td>
<td>4</td>
<td>4</td>
</tr>
<tr>
<td>EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE</td>
<td>5</td>
<td>5</td>
<td>5</td>
</tr>
<tr>
<td>FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</td>
<td>6</td>
<td>6</td>
<td>6</td>
</tr>
<tr>
<td>GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG</td>
<td>7</td>
<td>7</td>
<td>7</td>
</tr>
<tr>
<td>HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH</td>
<td>8</td>
<td>8</td>
<td>8</td>
</tr>
</table>
</div>
</body>
</html>
これを更にゴリゴリして「全力検索」に無事反映することができた。






