TABLEヘッダを隠さず縦横スクロール
原子番号 |
---|
元素 | 英語 | 記号 | 原子量 |
---|
1 |
---|
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
水素 | Hydrogen | H | 1.00794 (7) |
ヘリウム | Helium | He | 4.002603 (2) |
リチウム | Lithium | Li | [6.941 (2)] |
ベリリウム | Helirm | Be | 9.012182 (3) |
ホウ素 | Boron | B | 10.811 (7) |
炭素 | Carbon | C | 12.0107 (8) |
窒素 | Nitorogen | N | 14.0067 (2) |
酸素 | Oxygen | O | 15.9994 (3) |
フッ素 | Fluorine | F | 18.9984032 (5) |
ネオン | Neon | Ne | 20.1797 |
ナトリウム | Sodium | Na | 22.98976928 (2) |
マグネシウム | Magnesium | Mg | 24.3050 (6) |
アルミニウム | Alminium | Al | 26.9815386 (8) |
データ部が上下左右にスクロールするテーブル
データ部のみが上下にスクロールするテーブルの作成例を
◇データ部だけスクロールするTABLE;HTMLメモに作成してあります。
今回は上下左右にスクロールするテーブルです。
上のテーブルは以下のコードで出しています。
<style type="text/css"> /* 基本のテーブル定義 */ table.t {border:1px solid #000000;border-collapse:collapse;table-layout:fixed;font-size:16px} table.t td{border:1px solid #000000;height:16px;} table.t th{border:1px solid #000000;font-size:16px} table.t th{background-color:#FFBB88;color:#000000;} table.t tr:nth-child(odd) td{background-color:#C8C8E8;color:#000000;} table.t tr:nth-child(even) td{background-color:#E8E8FF;color:#000000;} /* データ域 90×3+110 = 380 +スクロール域 +16 = 396 +垂直ヘッダ +90 = 486 スクロール範囲 (w×h) 280×130 バー付データ部サイズ(w×h) 296×145 (バー v16:h15) ヘッダを含むサイズ (w×h) 386×167 (ヘッダ1行18px) */ [name="T"] {width:360px;} [name="T"] th{width:90px} [name="T"] td{width:90px} [name="T"] th:nth-child(4){width:110px} [name="T"] td:nth-child(4){width:110px} [name="TV"] th{width:90px} #header_h { position: absolute;left:90px;top:0px; width:280px; overflow-x:hidden;overflow-y:hidden; } #header_v { position: absolute;left:0px;top:22px; width:90px;height:130px; overflow-x:hidden;overflow-y:hidden; } #data { position: absolute;left:90px;top:22px; overflow-x:scroll;overflow-y:scroll; width:296px;height:145px; } </style> </head> <body> <div id="zentai" style="position:relative;width:386px;height:167px; background-color:#CCCCCC;border:1px solid #000000"> <table class=t style="width:90px;position:absolute;left:0px;top:0px;"> <tr><th>原子番号</th></tr> <!-- 固定ヘッダ --> </table> <div id="header_h"> <table class=t name="T"> <!-- 水平ヘッダ --> <tr> <th>元素</th> <th>英語</th> <th>記号</th> <th>原子量</th> </tr> </table> </div> <div id="header_v"> <table class=t name="TV"> <!-- 垂直ヘッダ --> <tr><th>1</th></tr> <tr><th>2</th></tr> <tr><th>3</th></tr> <tr><th>4</th></tr> <tr><th>5</th></tr> <tr><th>6</th></tr> <tr><th>7</th></tr> <tr><th>8</th></tr> <tr><th>9</th></tr> <tr><th>10</th></tr> <tr><th>11</th></tr> <tr><th>12</th></tr> <tr><th>13</th></tr> </table> </div> <div id="data"> <table class=t name="T"> <tr><td>水素</td> <td>Hydrogen</td> <td>H</td> <td>1.00794 (7)</td></tr> <tr><td>ヘリウム</td> <td>Helium</td> <td>He</td><td>4.002603 (2)</td></tr> <tr><td>リチウム</td> <td>Lithium</td> <td>Li</td><td>[6.941 (2)]</td></tr> <tr><td>ベリリウム</td><td>Helirm</td> <td>Be</td><td>9.012182 (3)</td></tr> <tr><td>ホウ素</td> <td>Boron</td> <td>B</td> <td>10.811 (7)</td></tr> <tr><td>炭素</td> <td>Carbon</td> <td>C</td> <td>12.0107 (8)</td></tr> <tr><td>窒素</td> <td>Nitorogen</td><td>N</td> <td>14.0067 (2)</td></tr> <tr><td>酸素</td> <td>Oxygen</td> <td>O</td> <td>15.9994 (3)</td></tr> <tr><td>フッ素</td> <td>Fluorine</td> <td>F</td> <td>18.9984032 (5)</td></tr> <tr><td>ネオン</td> <td>Neon</td> <td>Ne</td><td>20.1797</td></tr> <tr><td>ナトリウム</td><td>Sodium</td> <td>Na</td><td>22.98976928 (2)</td></tr> <tr><td>マグネシウム</td><td>Magnesium</td><td>Mg</td> <td>24.3050 (6)</td></tr> <tr><td>アルミニウム</td><td>Alminium</td><td>Al</td><td>26.9815386 (8)</td></tr> </table> </div> </div> <script type="text/javascript"> function $E(name){ return document.getElementById(name); } function scroll(){ $E("header_h").scrollLeft= $E("data").scrollLeft;// データ部のスクロールをヘッダに反映 $E("header_v").scrollTop = $E("data").scrollTop;// データ部のスクロールをヘッダに反映 } $E("data").onscroll=scroll; </script>
次のパートに分けて組み合わせています。
- 水平ヘッダ部(データ部に合わせスクロール)
- 垂直ヘッダ部(データ部に合わせスクロール)
- データ部(水平垂直スクロール)
- 固定ヘッダ
データ部でスクロールイベントが発生するとscroll関数で垂直ヘッダ部、垂直ヘッダ部に 反映させています。
$E("header_h").scrollLeft= $E("data").scrollLeft;
水平ヘッダのカラム長とデータ部のカラム長は名前(ここでは"T")で同じcss定義 を参照しています。
[name="T"] {width:360px} [name="T"] th{width:90px} [name="T"] td{width:90px} [name="T"] th:nth-child(4){width:110px} [name="T"] td:nth-child(4){width:110px}
divとtable
部品をこのように並べるには本来<table>が適切です。
ところが残念なことに<tableのセル内にdivを置くと隙間の 制御がうまくできませんでした。
今回はしかたなく原始的な<div>で位置決めをして配置しています。
HTML5ではこのような配置のために新たにGridLayoutというものを 決めようとしています。
そんな愚かなことはやめ、<table>をブラッシュアップすべきです。
HTML5のtable嫌いはまともではありません。もはや狂っています。怪しい宗教です。
はやく正気を取り戻してください、
| 固定リンク