質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

2回答

3588閲覧

tableのスクロールについて

limitman80

総合スコア40

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/11/28 07:53

編集2018/11/28 09:09

テーブルの縦スクロールを表示しようとしてますが、各項目の幅が固定できずに困ってます。

html

1<table id="table"> 2 <thead class="scrollHead"> 3 <tr class=""> 4 <th><input type="checkbox" id ="checkAll"/></th> 5 <th>社員番号</th> 6 <th>社員名</th> 7 </tr> 8 </thead> 9 <tbody class="scrollBody"> 10 <tr class="list"> 11 <td class="checkboxParent"> 12 <input class="Select" type="checkbox" name="chk1"> 13 </td> 14 <td class="Data">1</td> 15 <td class="Data">社員A</td> 16 </tr> 17 <tr class="list"> 18 <td class="checkboxParent"> 19 <input class="Select" type="checkbox" name="chk1"> 20 </td> 21 <td class="Data">2</td> 22 <td class="Data">社員B</td> 23 </tr> 24 </tbody> 25</table>

実際はtdは数百件のデータが入っています。
これに以下のcssを適用しています。

css

1main #table{ 2 display: grid; 3 grid-auto-flow: row; 4 grid-auto-rows: 2.5em; 5 width: 100%; 6 height: 500px; 7 overflow: scroll; 8 grid-gap: 2px; 9} 10main #table th,td{ 11 width: 8%; 12 min-width: 8%; 13 max-width: 8%; 14} 15thead.scrollHead,tbody.scrollBody{ 16 display:block; 17 width: 100%; 18} 19tbody.scrollBody{ 20 overflow-y:scroll; 21 height:390px; 22}

htmlにはチェックボックスと社員番号と社員名しか出してませんが、実際は12項目表示しています。

これで実行するとスクロールが表示され、ヘッダ部も固定表示されるのですが、
ヘッダ部とデータ部にズレが出てます。
thとtdで同じ幅を指定しているのでズレは出ないと思ってました。
divで囲む方法等試してみたのですが、何故かヘッダ部のみズレてしまいます。
何か対処方法はあるでしょうか?

追記------------------------------------
cssのdisplay:gridを削除するとthタグも問題なく表示されます。
ただ、それを削除するとスクロールバーも表示されなくなりますが・・・。
何か他のcssと競合してるんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2018/11/28 09:12

display: gridは必要なのでしょうか?
limitman80

2018/11/28 23:28

これがないとスクロールバーが表示されませんでした。
x_x

2018/11/29 00:25

blockでいいのでは?
limitman80

2018/11/29 00:30

blockも試したのですが、結果は同じくズレが出ます。
x_x

2018/11/29 00:38

ズレの話ではなく、スクロールバーの話ですが
limitman80

2018/11/29 00:44

blockにしたらスクロールバーは表示されますが、thead部とtbody部のズレが発生します。各th、td1つずつにwidthを設定しても設定した値になりません。
x_x

2018/11/29 00:49

ズレに関しては回答を参考にしてもらえれば解決します。グリッドレイアウトの必要性がなければ不要でしょう
guest

回答2

0

テーブルのスクロールというよりヘッダの固定をしたいのだと思います。
過去に同様の質問があるので見てみてはいかがでしょうか?
https://teratail.com/questions/150020

投稿2018/11/28 09:15

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

thとtdで同じ幅を指定しているのでズレは出ないと思ってました。

divで囲む方法等試してみたのですが、何故かヘッダ部のみズレてしまいます。

スクロールバーの分ずれている、なんてことはありませんか?

投稿2018/11/28 07:56

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

limitman80

2018/11/28 08:07

スクロールバーはテーブルの外に表示されてます。 スクロールバーの幅だけではないんですよ。ズレ幅は。 chromeのデバッグツールでtheadをクリックした時とtbodyをクリックした時に表示される横幅の値は同じなのですが、 その次のtrをクリックすると、tbody側はtbodyタグと同じ値なのに、 thead側のtrは3割ほど少ない値になってます。 thead tr:916 tbody tr:1323 1項目だけwidthを1%にするとtheadのtrが1323になります。 thのwidthが入りきってないってことでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問