2007年03月16日 19:00 [Edit]

CSS - スクロール可能なテーブル w/o JavaScript

これ、うまく行ったのはfirefoxだけでした。

スクロール可能なテーブルを作成するJavaScriptライブラリ「ScrollableTable」:phpspot開発日誌
スクロール可能なテーブルを作成するJavaScriptライブラリ「ScrollableTable」。 次のようなスクロールしてもカラム名が消えず、小さいスペースで配置できるテーブルを作成できます。

Safariではスクロールバーそのものが表示されず、OperaではTableが丸ごと消えてしまいます。

そもそもこれならCSSだけで出来るのではということで試作してみたのが以下です。

Firefox, Safari, Operaではきちんと表示されます。IE5では横スクロールが表示されましたが、それ以外は当初の目的を満たしています。

日本語中文English
0ぜろzero
1いちone
2two
3さんthree
4four
5five
6ろくsix
7ななseven
8はちeight
9きゅうnine
10じゅうten
日本語中文English

詳しくは末尾のソースをご覧頂くとして、要点をまとめると、

  1. 本来一つのtableで表示するところを、三つのtableに分ける
  2. table一つ一つをdivで囲む
  3. 上下のdivには、thead,tfootに対応するtableをおく
  4. 真ん中のdivに、tbodyに対応するtableを置き、scrollの設定はdivで行う
  5. 上中下の各table内のtd,thは、一番右の要素を除いてwidthを指定する

この「一番右の要素を除いて」というところがミソです。

それにしても、CSSはJavaScript以上にブラウザー依存が激しくて大変です。デザイナーのみなさんはほんとすごいと思います。

Enjoy!

Dan the CSSphobia

HTML Source:
<style>
#scrollable th,td{ border: outset 1px; }
</style>

<div id="scrollable" style="width:320"><!-- table -->

<div style="margin:0;padding:0"><table width="100%"><!-- thead -->
<thead>
<tr style="text-align:left"><th width="32"></th><th width="64">日本語</th><th width="64">中文<th>English</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
<div style="height:100px; overflow:auto"><table width="100%"><!-- thead -->
<tbody>
<tr><th width="32">0</th><td width="64">ぜろ</td><td width="64">零</td><td>zero</td></tr>
<tr><th>1</th><td>いち</td><td>一</td><td>one</td></tr>
<tr><th>2</th><td>に</td><td>二</td><td>two</td></tr>
<tr><th>3</th><td>さん</td><td>三</td><td>three</td></tr>
<tr><th>4</th><td>し</td><td>四</td><td>four</td></tr>
<tr><th>5</th><td>ご</td><td>五</td><td>five</td></tr>
<tr><th>6</th><td>ろく</td><td>六</td><td>six</td></tr>
<tr><th>7</th><td>なな</td><td>七</td><td>seven</td></tr>
<tr><th>8</th><td>はち</td><td>八</td><td>eight</td></tr>
<tr><th>9</th><td>きゅう</td><td>九</td><td>nine</td></tr>
<tr><th>10</th><td>じゅう</td><td>十</td><td>ten</td></tr>
</tbody>
</table></div>
<div style="margin:0;padding:0"><table width="100%"><!-- tfoot -->
<tbody></tbody>
<tfoot>
<tr style="text-align:left"><th width="32"></th><th width="64">日本語</th><th width="64">中文<th>English</th></tr>
</tfoot>
</table></div><!-- tfoot -->

</div><!-- /table -->

この記事へのトラックバックURL

この記事へのトラックバック
404 Blog Not Found:CSS - スクロール可能なテーブル w/o JavaScript そのHTMLは許せないので試行錯誤してみた。 hello hi goodbye test(0) aa(0) cols(0) test(1) aa(1) cols(1) test(2) aa(2) cols(2) test(3) aa(3) cols(3) test(4) aa(4) cols(4) test(5) aa(5) cols(5)
[HTML+CSS]tbodyをスクロール可能に【Sybianの日記】at 2007年03月17日 22:14
404 Blog Not Found:CSS - スクロール可能なテーブル w...
これはだめじゃないか > スクロール可能なテーブル【メモランダム】at 2007年03月19日 21:37
なかなか興味深いなあと思っていたら、Yahoo UI Libraryでできるらしい。- [404 Blog Not Found:CSS - スクロール可能なテーブル w/o JavaScript](http://blog.livedoor.jp/dankogai/archives/50787785.html)- [Sybianの日記 - tbodyをスクロール可能に](http://d.haten...
それ、yuiで 【memo-space】at 2007年03月27日 14:50
IE8 beta2対応版IETesterがリリースされたので、beta1では未対応だった table ヘッダ固定のCSS定義について再確認しました。 以前、当サイトで紹介した「IE5.5, IE6, IE7, IE8の確認が同時にできる -IETester」が、IE8 beta2に対応したv0.2.3をリリースしました。 IETester
[Javascript][CSS]IE8 beta2対応版IETesterでtableヘッダ固定のCSS定義を確認した【Cyokodog::Diary】at 2008年09月10日 03:07
この記事へのコメント
いいですね。と思って手元で試すと、なかなか難しいです。
テーブルを三つにわけているので、セル内の文字数が変わるとヘッダ・フッタとずれてみたり。IEでは、ですが。(そこを気合いでpxであわせるのがWEBデザイナ様?でもシステム埋め込みとかではぞっとする)
いい加減、何とかならないんでしょうかね、このブラウザでの無駄な苦労w。

あと、
<div id="scrollable" style="width:320"><!-- table -->

<div id="scrollable" style="width:320px"><!-- table -->
がCSSとしては正しいでしょうか。この違いでもだいぶ挙動(表示)が変わりそうです。
Posted by souto at 2007年03月16日 20:41
thead, tbody, tfootをブラウザがうまい具合に処理してくれるといいんですけどね。
ん?JavaScriptでDanさんのに書き換えればいいのか!
Posted by aoix at 2007年03月17日 01:19