CSS で tbody 要素を一定の高さにして、 overflow: auto でスクロール表示にする tips

http://hxxk.jp/2007/03/18/2000

記事データ

投稿者

真琴

投稿日時

2007-03-18T20:00+09:00

タグ
概要

tbody { height: 300px; overflow: auto; } tbody tr { height: auto; /* for WinIE */ } のように指定することで、 tbody 要素をスクロール表示することが可能になります。

リプライ

8 件のリプライがあります。

記事本文

Re: Sybianの日記 - tbodyをスクロール可能に

Sybianの日記 - tbodyをスクロール可能にのきっかけになった 404 Blog Not Found:CSS - スクロール可能なテーブル w/o JavaScriptも、さらにそのきっかけになったスクロール可能なテーブルを作成するJavaScriptライブラリ「ScrollableTable」:phpspot開発日誌も、 ( さらにはおおもとの Scrollable HTML table も ) やたらと遠回りなことをしているなあという印象。

tbody {
  height: 300px;
  overflow: auto;
}

tbody tr {
  height: auto; /* for WinIE */
}

table 要素内の各要素の display プロパティをあれこれいじらなくても、 tbody 要素に高さ (height) を指定して、溢れる部分の表示を overflow プロパティで指定するだけで大丈夫だと思います。

tbody 要素の子要素の tr 要素に height: auto; を指定しているのは、 IE では 表の行グループ要素に指定した height プロパティの値がセル要素に継承されるというバグがあるためです。 ( height プロパティの値は、 CSS1 および CSS2 および CSS 2.1 のいずれにおいても Inherited: no とされているため、 IE が完全準拠しているのは CSS1 までだとしても、 tbody 要素の height プロパティの値を tbody 要素の子要素の tr 要素が継承するというのはおかしいのです。 )

hello hi goodbye
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)
test(6) aa(6) cols(6)
test(7) aa(7) cols(7)
test(8) aa(8) cols(8)
test(9) aa(9) cols(9)
test(10) aa(10) cols(10)
test(11) aa(11) cols(11)
test(12) aa(12) cols(12)
test(13) aa(13) cols(13)
test(14) aa(14) cols(14)
test(15) aa(15) cols(15)
test(16) aa(16) cols(16)
test(17) aa(17) cols(17)
test(18) aa(18) cols(18)
test(19) aa(19) cols(19)

Gecko エンジンでしかスクロールされないのが難点と言えば難点なのですが。 (IE と Opera では tbody 要素の height プロパティの指定が無視されているようです。 Safari は環境が無いので表示確認していません。 )

tfoot は tbody の前に書いた方がいいよ | WWW WATCH にて tfoot の記述位置についてご指摘を受けたので、修正しました。 ( 修正前は thead->tbody->tfoot の順番で書いていました。 ) 数年前にも似たような間違いをしていたことがあったのに何故学習していないんだ !

hxxk.jp さんのアプローチ (私も同じこと書こうとしていたわけですが) だと IE でスクロールバーが出ない とのことですが、言われてみればそうですね。 個人的には IE が対応していなくても知ったことか、という感じなので「代替案として適切かどうか」と問われると不適切です。

トラックバック送信先

Sybianの日記 - tbodyをスクロール可能に

table 要素内の各要素の display プロパティをあれこれいじらなくても、 tbody 要素に高さ (height) を指定して、溢れる部分の表示を overflow プロパティで指定するだけで大丈夫だと思います。

リプライ

8 件のリプライが送られています。

2007-03-18T21:23+09:00 - 望月真琴

もしかして、 display プロパティをあれこれしているのは横スクロールバーが出ないためなのかも、と思いました。

2007-03-18T21:30+09:00 - Piro

>Gecko エンジンでしかスクロールされないのが難点と言えば難点なのですが ちょwwwwwwwwwwww それが一番問題wwwwwwwwwwwwww

2007-03-18T23:47+09:00 - 望月真琴

WWW WATCH でも突っ込まれていますが、この場合は IE でもスクロールできないと代替足りえないですね。 まあ、 <a href="http://d.hatena.ne.jp/Sybian/20070317/p2">http://d.hatena.ne.jp/Sybian/20070317/p2</a> の方では tbody 要素の height:7em; を IE が tr 要素に継承してしまっているので、結局代替にはなってないという。ほんと IE さんどうにか頑張って !

2007-03-19T04:06+09:00 - atty

Safariもダメでした。

2007-03-21T13:20+09:00 - tfoot は tbody の前に書いた方がいいよ < WWW WATCH

【真琴によるトラックバック】hxxk.jp さんのサンプルソース (XHTMLの方) で一点気になったんでそれについて書いてみることに。

2007-03-21T13:22+09:00 - tfoot に関するエントリーの補足 < WWW WATCH

【真琴によるトラックバック】前のエントリー、「tfoot は tbody の前に書いた方がいいよ」では、行グループ、tfoot 要素の記述位置に関して h...

2007-03-21T18:46+09:00 - 望月真琴

ということは Gecko だけですか、これが有効になるのは。 でも、この記事の内容でちょっと説明不足な点がありますね。時間が取れたら再考します。

2009-01-15T17:48+09:00 - 通りすがり

IE7だとまともに表示されないものなのでしょうか?

この記事に対するご意見やご質問、ご感想などありましたらこのフォームに簡潔に記入して下さい。 簡潔に記入できない場合や、関連記事にてご意見をお寄せいただく場合は、ご自身の weblog にて記事を書かれた上で あてにトラックバックとして送信してください。

記入フォーム

補足情報

著作、講演、制作実績など