Quantcast
Channel: 円周率近似値の日に生まれて理系じゃないわけないだろ! - knifeのblog
Viewing all articles
Browse latest Browse all 5376

tableのスクロール

$
0
0

tbodyにCSSでheightで高さ、overflorでscrollを設定しても動かないという記事をよく見かける。

その原因は、おそらくcssのdisplay設定である。

例えば、displayの設定として、divはblock、spanはinline、とデフォルトがあり、overflowでscrollさせるには、displayがblockかinline-blockである必要があると考える。

tableタグ内での各タグのdisplayのデフォルト設定は、tableやtable-cellといったもので、blockではないのだろう。


やりたいことは、表組で、theadでタイトル、tbodyでデータ、として、縦に長いデータをスクロールバーを付けてコンパクトに表示したい。

ここで考えなければいけないのが、データが大量にあるということ。

何が言いたいかと言えば、tdタグの全てにclass=とか、データが多いのでやりたくない。

colgroupタグやcolタグで、一括で列の設定をできればよいのだが、果たしてうまくいくのだろうか。


tableをdivで括ってdivに縦スクロールを付けてみる。


CASE 1

1奥田美香おくだ みか
2榎田道子えのきだ みちこ
3吉野佳代子よしの かよこ
4新田恵利にった えり
5中島美春なかじま みはる
6樹原亜紀きはら あき
7友田麻美子ともだ まみこ
8国生さゆりこくしょう さゆり
9名越美香なごや みか
10佐藤真由美さとう まゆみ
11福永恵規ふくなが さとみ
12河合その子かわい そのこ
13内海和子うつみ かずこ
14富川春美とみかわ はるみ
15立見里歌たつみ りか
16高井麻巳子たかい まみこ
17城之内早苗じょうのうち さなえ
18永田ルリ子ながた るりこ
19岩井由紀子いわい ゆきこ
20寺本容子てらもと ようこ
21五味岡たまきごみおか たまき
22白石麻子しらいし まこ
23林香織はやし かおり
24三田文代みた ふみよ
25吉沢秋絵よしざわ あきえ
26赤坂芳恵あかさか よしえ
27松本亜紀まつもと あき
28横田睦美よこた むつみ
29渡辺美奈代わたなべ みなよ
30三上千晶みかみ ちあき
31矢島裕子やじま ゆうこ
32山本スーザン久美子やまもと すーざん くみこ
33布川智子ふかわ ともこ
34弓岡真美ゆみおか まみ
35岡本貴子おかもと たかこ
36渡辺満里奈わたなべ まりな
37大貫かおりおおぬき かおり
38工藤静香くどう しずか
39高畠真紀たかばたけ まき
40生稲晃子いくいな あきこ
41貝瀬典子かいせ のりこ
42斉藤満喜子さいとう まきこ
43守屋寿恵もりや としえ
44高田尚子たかだ なおこ
45吉田裕美子よしだ ゆみこ
46中島早苗なかじま さなえ
47山森由里子やまもり ゆりこ
48我妻佳代あがつま かよ
49吉見美津子よしみ みつこ
50杉浦美雪すぎうら みゆき
51宮野久美子みやの くみこ
52鈴木和佳子すずき わかこ


<div style="display: inline-block; height: 100px; overflow-x: hidden; overflow-y: scroll;">
<table>・・・</table>
</table>
</div>

まぁ、コレでもHTMLやCSS初心者にしては上出来なのかもしれない。

キモは、displayをblockではなくinline-blockにしているところである。

divのdisplay設定をしないと、デフォルトのblockになり、divが横幅いっぱいまで広がり、スクロールバーが右端までいってしまうことでしょう。

ここからの発想として、各列の幅を決め打ちして、タイトル行をdivの外に作れば良いのでは?と考えに及ぶでしょう。


CASE 2
No
氏名
読み仮名
1奥田美香おくだ みか
2榎田道子えのきだ みちこ
3吉野佳代子よしの かよこ
4新田恵利にった えり
5中島美春なかじま みはる
6樹原亜紀きはら あき
7友田麻美子ともだ まみこ
8国生さゆりこくしょう さゆり
9名越美香なごや みか
10佐藤真由美さとう まゆみ
11福永恵規ふくなが さとみ
12河合その子かわい そのこ
13内海和子うつみ かずこ
14富川春美とみかわ はるみ
15立見里歌たつみ りか
16高井麻巳子たかい まみこ
17城之内早苗じょうのうち さなえ
18永田ルリ子ながた るりこ
19岩井由紀子いわい ゆきこ
20寺本容子てらもと ようこ
21五味岡たまきごみおか たまき
22白石麻子しらいし まこ
23林香織はやし かおり
24三田文代みた ふみよ
25吉沢秋絵よしざわ あきえ
26赤坂芳恵あかさか よしえ
27松本亜紀まつもと あき
28横田睦美よこた むつみ
29渡辺美奈代わたなべ みなよ
30三上千晶みかみ ちあき
31矢島裕子やじま ゆうこ
32山本スーザン久美子やまもと すーざん くみこ
33布川智子ふかわ ともこ
34弓岡真美ゆみおか まみ
35岡本貴子おかもと たかこ
36渡辺満里奈わたなべ まりな
37大貫かおりおおぬき かおり
38工藤静香くどう しずか
39高畠真紀たかばたけ まき
40生稲晃子いくいな あきこ
41貝瀬典子かいせ のりこ
42斉藤満喜子さいとう まきこ
43守屋寿恵もりや としえ
44高田尚子たかだ なおこ
45吉田裕美子よしだ ゆみこ
46中島早苗なかじま さなえ
47山森由里子やまもり ゆりこ
48我妻佳代あがつま かよ
49吉見美津子よしみ みつこ
50杉浦美雪すぎうら みゆき
51宮野久美子みやの くみこ
52鈴木和佳子すずき わかこ


Noと1のtdタグにwidth="30"
氏名と奥田美香のtdタグにwidth="150"
読み仮名とおくだみかのtdタグにwidth="190"
をそれぞれ設定
タイトル用のtableをclass="case2h"
データ用のtableをclass="case2d"
とクラス名を指定し、
<style type="text/css">
table.case2h tr:last-child td { border-bottom: none; }
table.case2d tr:first-child td { border-top: none; }
</style>
とスタイル設定して、それぞれのtableの結合部分を綺麗に装飾してみました。


さて、こんな面倒なことをしなくとも、tableタグだけで簡潔に完結出来ないものかと考えるのは普通ですね。


CASE 3
No氏名読み仮名
1奥田美香おくだ みか
2榎田道子えのきだ みちこ
3吉野佳代子よしの かよこ
4新田恵利にった えり
5中島美春なかじま みはる
6樹原亜紀きはら あき
7友田麻美子ともだ まみこ
8国生さゆりこくしょう さゆり
9名越美香なごや みか
10佐藤真由美さとう まゆみ
11福永恵規ふくなが さとみ
12河合その子かわい そのこ
13内海和子うつみ かずこ
14富川春美とみかわ はるみ
15立見里歌たつみ りか
16高井麻巳子たかい まみこ
17城之内早苗じょうのうち さなえ
18永田ルリ子ながた るりこ
19岩井由紀子いわい ゆきこ
20寺本容子てらもと ようこ
21五味岡たまきごみおか たまき
22白石麻子しらいし まこ
23林香織はやし かおり
24三田文代みた ふみよ
25吉沢秋絵よしざわ あきえ
26赤坂芳恵あかさか よしえ
27松本亜紀まつもと あき
28横田睦美よこた むつみ
29渡辺美奈代わたなべ みなよ
30三上千晶みかみ ちあき
31矢島裕子やじま ゆうこ
32山本スーザン久美子やまもと すーざん くみこ
33布川智子ふかわ ともこ
34弓岡真美ゆみおか まみ
35岡本貴子おかもと たかこ
36渡辺満里奈わたなべ まりな
37大貫かおりおおぬき かおり
38工藤静香くどう しずか
39高畠真紀たかばたけ まき
40生稲晃子いくいな あきこ
41貝瀬典子かいせ のりこ
42斉藤満喜子さいとう まきこ
43守屋寿恵もりや としえ
44高田尚子たかだ なおこ
45吉田裕美子よしだ ゆみこ
46中島早苗なかじま さなえ
47山森由里子やまもり ゆりこ
48我妻佳代あがつま かよ
49吉見美津子よしみ みつこ
50杉浦美雪すぎうら みゆき
51宮野久美子みやの くみこ
52鈴木和佳子すずき わかこ

1つのtableタグだけで完結させてみました。
簡単に書くと、
<style type="text/css">
table.case3 thead, tbody { display: block; }
table.case3 tbody { height: 100px; overflow-x: hidden; overflow-y: scroll; }
table.case3 td:nth-child(1) { width: 25px; text-align: right; }
table.case3 td:nth-child(2) { width: 150px; }
table.case3 td:nth-child(3) { width: 180px; }
</style>
<table class="case3">
<thead><tr><td>・・・</td></tr></thead>
<tbody><tr><td>・・・</td></tr></tbody>
</table>

本来tableタグではcolgroupやcolといった内部タグが存在するのですが、それでセルの横幅やセル内の配置などを設定できませんでした。

ですので、各列をtd:nth-child(n)で設定するほうが極めて楽だと考えるに至ったわけです。

そうすれば、theadとtbodyの垣根も関係ないでしょう。



Viewing all articles
Browse latest Browse all 5376

Trending Articles