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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CSS

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

Q&A

解決済

2回答

6861閲覧

テーブルでテーブル部のみスクロールさせる場合、inputの分だけ1pxずれる

K.T_build

総合スコア29

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CSS

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

0グッド

0クリップ

投稿2017/11/10 06:26

編集2017/11/10 06:51

テーブルでヘッダーを固定して、ボディのみスクロールさせたいです。
その際にヘッダーとボディ部に input 要素があると、ヘッダーとボディがborderのpx分ずれてしまいます。
どのようにすれば、ずれなくなりますでしょうか?

ご存知の方、ご教示頂ければ幸いです。
よろしくお願い致します。

例題

html

1<div style="margin:20px;"> 2<table class="table"> 3 <thead> 4 <tr> 5 <th class="record_0">ずれない</th> 6 <th class="record_0">border分ずれる</th> 7 <th class="record_1">th:120px</th> 8 <th class="record_2">いいい</th> 9 <th class="record_3">ううう</th> 10 <th class="record_4">えええ</th> 11 <th class="record_5">おおお</th> 12 </tr> 13 </thead> 14 <tbody> 15 <?php for($i=0; $i<20; $i++){?> 16 <tr> 17 <td>td:120px</td> 18 <td><input type="text" class="record_0" value="td:121px"></td> 19 <td><input type="text" class="record_1" value="input:120px"></td> 20 <td><input type="text" class="record_2"></td> 21 <td><input type="text" class="record_3"></td> 22 <td><input type="text" class="record_4"></td> 23 <td><input type="text" class="record_5"></td> 24 </tr> 25 <?php }?> 26 </tbody> 27</table> 28</div>
thead,tbody { display: block; /* スクロールさせるために変更 */ } table{ width: auto !important; } tbody, thead, td, th{ border: solid 3px; /* ずれるのがわかりやすいように線を太く */ border-collapse: collapse; /* 動いてない? */ } tbody{ overflow-y: scroll; height: 200px; } td,th { table-layout: fixed; } th{ background: #eef85766; } td{ padding: 0px !important; } .record_0, .record_1{ width:120px; height:40px; } .record_2{ width:200px; height:40px; } .record_3, .record_4, .record_5 { width:70px; height:40px; } /* スマートじゃなさそう、もっといい方法はないのか?*/ th.record_xxx{ width: 99px; } td.record_xxx{ width: 100px; }

【追記】
今回作成したい画面として、行数が最大100行近くの画面となります。
そのため、可能な限りjavascriptなどでのDOM操作は控えたいと考えています。
HTML, CSSで設定できる方法はないでしょうか?
※最初から1pxを考慮して、widthを指定するのはスマートな感じがしないため、よりよい方法があればご教授いただければ幸いです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

スクロールテーブルを実装する際の注意点
http://defghi1977-onblog.blogspot.jp/2012/02/blog-post_09.html

はるか昔に調査した内容で良ければこちらをご覧ください.
このようなtable要素に「スクロール機能」持たせる場合, 全ての要求に対処できる黄金パターンは存在しません.

※最初から1pxを考慮して、widthを指定するのはスマートな感じがしないため、よりよい方法があればご教授いただければ幸いです。

残念ながらスマートな方法が無いので, 泥臭くスタイルを指定するしかありません.

投稿2017/11/10 07:15

defghi1977

総合スコア4756

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

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

K.T_build

2017/11/10 08:05 編集

回答ありがとうございます。 リンク先拝見致しました。 ③display:block法 で進めてみてクロスブラウザテストしてみます。 わかりやすい資料で助かりました。 【追記】 最新の更新を見たらアイギスの話題だったので吹きましたw ゲームしやすいようにユーザースクリプトも書いてるとは頭黒王子の鏡ですね。 ラピスおりゅ?
defghi1977

2017/11/10 08:13

ラピスは居ませんがスクロールテーブルの実装は茨の道です. ご武運を
guest

0

tableに border-collapse: collapseを指定して
全ての列に固定値のwidthを与えるか
window.load後にヘッダ部分、body部分のそれぞれの列の幅を計算して
それぞれ長い方にあわせてはどうでしょうか?

投稿2017/11/10 06:33

yambejp

総合スコア114777

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

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

K.T_build

2017/11/10 06:44

回答有難うございます。 >>tableに border-collapse: collapseを指定   display:block に変更した関係上、上手く適用できないみたいです。   thead{ display:table }, tbody{ display:block; } でも同様でした。 >>全ての列に固定値のwidthを与える   確かにその方法ではできるのはわかっているのですが、後々の保守に影響が出そうなのが、、、。   今のところは最終手段として考えております。 >>window.load後にヘッダ部分、body部分のそれぞれの列の幅を計算   システム上、レコード数が100を超えることが想定されている画面のため、   可能な限りDOM操作を最低限にしたいと考えております。 回答を頂きながら、わがままなことを言ってしまい非常に申し訳ありません。 後出しでの情報・要望となってしまい、誠に申し訳ありませんでした。
yambejp

2017/11/10 06:50

よくみたらヘッダ部分とボディ部分が同じテーブルなのですね この手の処理はヘッダ部分とボディ部分を別のテーブルにするのが普通です はるか昔、それこそWEBの黎明期からこの話題はでていますが、 ブラウザで一向に解決する気がないようなので 正直言うといまのテーブル構成を使う限りすっきりした解決策はないと思います
K.T_build

2017/11/10 07:01

>>正直言うといまのテーブル構成を使う限りすっきりした解決策はないと思います    そうなのですか、残念です、、、 >>この手の処理はヘッダ部分とボディ部分を別のテーブルにするのが普通です    なるほど、そうなのですね。    試しにヘッダ部分とボディ部分を別のテーブルにしてみましたが、特に変化はありませんでした。    単純な疑問なのですが、別のテーブルにするのは何故なんでしょうか?      ※どんなメリットがあるのでしょう?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問