No.3ベストアンサー
- 回答日時:
ソースを修正してみました。
変更点ですが、
1.セルが勝手に縮まらないようにヘッダーのテーブルサイズを固定しました。
2.ヘッダーのスクロール方法を変更しました。
scrollTopで移動できるのは、overflow:scroll;の記述がある場合のみです。
overflow:scroll;をつけるのは製作の意図と違うと勝手に解釈して、ヘッダーブロックの表示位置をlayerからの相対位置でずらす方法に変更しました。
その方法ですが、layerにもうひとつDIVをはさみ、DIVの相対位置をずらすことで、スクロールについていくようにしました。
以下ソースです
<html>
<head>
<script language="JavaScript">
function initialize(){
var data = document.getElementById("data");
var header = document.getElementById("header");
var cell = data.rows[0].cells;
var wkWidth;
for(var i=0; i<cell.length; i ++){
wkWidth = cell[i].offsetWidth;
header.rows[0].cells[i].width = wkWidth ;
cell[i].width = wkWidth ;
}
//↓↓↓ 1.ヘッダーのサイズを固定しました
header.style.width = data.offsetWidth;
document.getElementById("layer").style.width = "585px";
document.getElementById("region").style.width = "600px";
}
//↓↓↓ 2.ヘッダーの表示方法をDIVの相対位置を変えることで行うようにしました
function SlideHeader() {
//regionがスクロールした分だけDIVの表示位置をマイナスしています
document.getElementById("ViewSpace").style.left = (document.getElementById("region").scrollLeft * (-1)) + "px";
}
</script>
</head>
<body onload="initialize();">
<div id="layer" style="border:1px; overflow-x:hidden; overflow-y:hidden;">
<!-- 新たにDIVをはさみました。
layerに対して相対位置表示できるようにしています。
このDIVの相対位置を、をregionが右にスクロールした分だけ左に動かします。-->
<div id="ViewSpace" style="top:0px; left:0px; position:relative;">
<table id="header" style="margin:0px;" rules="all" border="1">
<tr><td>1</td><td>2</td><td>3</td></tr>
</table>
</div>
</div>
<!-- onScrollを変更しています -->
<div id="region" style="height:80px; overflow-x:scroll; overflow-y:scroll" onScroll="SlideHeader()">
<table id="data" style="margin:0px;" rules="all" border="1">
<tr><td>ABCDEFABCDEFABCDABCDEFABCDEF</td><td>ABCDEFABCDEFABCEFABCDEFABCDEF</td><td>ABCDEFABCDEFABCDEFABCDEF</td></tr>
</table>
</div>
</body>
</html>
この回答への補足
ありがとうございます。
なるほど、この方法なら実現できそうです。感謝します。
最終的にdata部分に折り返しが入った場合に、問題がありましたので先に幅設定を
することで回避しています。
function initialize(){
var data = document.getElementById("data");
var header = document.getElementById("header");
var cell = data.rows[0].cells;
var wkWidth;
document.getElementById("layer").style.width = "485px";
document.getElementById("region").style.width = "500px";
for(var i=0; i<cell.length; i ++){
wkWidth = cell[i].offsetWidth;
header.rows[0].cells[i].width = wkWidth;
cell[i].width = wkWidth ;
}
//↓↓↓ 1.ヘッダーのサイズを固定しました
header.style.width = data.offsetWidth;
}
すばらしい!!
ありがとうございます。とても助かりました。
実現できない場合は、n行おきにヘッダーを挿入する必要があったため。
セル結合しているものを分断するという複雑な処理を実装せねばなりま
せんでした。(必ず1画面にひとつはヘッダーがあることの保証も難しい)
もう少し検証し問題なければ導入に踏み切ろうと思います。勉強になりま
した。すばやい回等、重ね重ね感謝します。
No.2
- 回答日時:
ソース1の場合、テーブルにDIVのサイズを合わせているようです。
ソース2の場合は、DIVのサイズを固定しているようですね。
overflowについてですが、autoと設定すると、ブラウザに依存した動作を行います。
layerの場合、overflow:auto;としていますので、ヘッダーのテーブルに空白がある分を勝手に削ってしまい、折角設定したセルの幅を勝手に縮められています。
しかしregionの場合、overflow-x:scroll; overflow-y:scroll;がありますので、表示できなかった部分はスクロールで表示し、勝手にセルを縮めたりはしません。
よってヘッダーとデータのセルの幅に違いが出てきてしまいます。
ソース1がうまくいっている要因としては、テーブルにDIVのサイズをあわせているので、勝手に縮める必要がないからです。
で、ここから質問なのですが、ヘッダーとデータのセルの幅を合わせる方法として、
1.ヘッダーもoverflow:scroll;として、データのセルに大きさをあわせる
2.データのセルを折り返しで出力して、ヘッダーのセルに大きさをあわせる
の2通り考えられると思います。
どちらがいいのでしょうか?
この回答への補足
回等ありがとうございます。助かります。
欲しいのは、1?になります。間違いないように、欲しいものを補足説明しますと
要件としては
・1024*768の画面で表示したい。
・横幅は、12ヶ月分のデータ+四半期計+上下期+年度計を表示したい。
→48列あります。折り返しては見難くなるので、幅を固定して表示したい。
表示する(レイヤーの)横幅を固定して、横長の表を見たいのです。
No.1
- 回答日時:
ソース添付ください
この回答への補足
ソース1)
<html>
<head>
<script language="JavaScript">
function initialize(){
var data = document.getElementById("data");
var header = document.getElementById("header");
var cell = data.rows[0].cells;
var wkWidth;
for(var i=0; i<cell.length; i ++){
wkWidth = cell[i].offsetWidth;
header.rows[0].cells[i].width = wkWidth ;
cell[i].width = wkWidth ;
}
with( document.getElementById("region") ){
document.getElementById("layer").style.width = header.offsetWidth + "px";
style.width = header.offsetWidth + "px";
wkWidth = header.offsetWidth + (offsetWidth - data.offsetWidth);
style.width = wkWidth + "px";
}
}
</script>
</head>
<body onload="initialize();">
<div id="layer" style="border:1px; overflow-x:hidden;overflow-y:hidden; overflow:auto;">
<table id="header" style="margin:0px;" rules="all" border="1">
<tr><td>1</td><td>2</td><td>3</td></tr>
</table>
</div>
<div id="region" style="height:80px; overflow-x:scroll; overflow-y:scroll; overflow:auto;" onScroll="layer.scrollLeft = region.scrollLeft;">
<table id="data" style="margin:0px;" rules="all" border="1">
<tr><td>ABCDEFABCDEFABCDABCDEFABCDEF</td><td>ABCDEFABCDEFABCEFABCDEFABCDEF</td><td>ABCDEFABCDEFABCDEFABCDEF</td></tr>
</table>
</div>
</body>
</html>
ソース2)関数内を一部書き換え
//with( document.getElementById("region") ){
//・
//}
document.getElementById("layer").style.width = "585px";
document.getElementById("region").style.width = "600px";
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(動画サービス) VLCメディアプレーヤーについて 1 2022/11/29 14:19
- WordPress(ワードプレス) ワードプレスで、投稿一覧ページにタグを表示する方法 投稿につけたタグを、記事一覧ページにもカテゴリと 1 2023/05/10 21:41
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- Word(ワード) word縦書き文書の分数が縦にならない 2 2023/01/07 13:27
- その他(プログラミング・Web制作) ワードプレスのプラグインであるAddQuicktagを使いたいが… 3 2022/04/18 15:03
- Excel(エクセル) [入力規則]のリストボックス内の“不揃いの林檎たち” 3 2022/09/15 18:32
- その他(Microsoft Office) エクセルでの作成データをモニター画面内に収めたい。 1 2022/04/23 11:52
- Gmail Gmailのメールの自動振り分け設定でむちゃくちゃになる 1 2022/04/19 19:30
- Excel(エクセル) Excelで質問です。 詳細(写真) ①黄色の部分を全てプルダウンを設定する。 ②リストはG列 ③リ 1 2023/06/16 21:54
- Excel(エクセル) エクセルにおいてセル内の文字を出来るだけ大きく表示する方法を教えてください。 4 2022/07/30 08:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルタグの中にdivを含めて...
-
ウィンドウのサイズを変えても...
-
テーブルの横に画像を
-
インラインフレームの隣に画像...
-
はじめて質問させていただきます。
-
テーブルの横に文字を置くタグ
-
テーブル内に画像を表示したい。
-
画像の横にテーブルを。。。
-
テーブルの位置を細かく指定し...
-
table内にiframeでテーブルが崩...
-
商品詳細を横並びに表示する方法
-
テーブルの行を折りたたみたい...
-
TABLEのセルの中の文字を行単位...
-
テーブル幅が固定できない
-
テーブルとテーブルの間隔について
-
formのinputなどの幅100%指定
-
テーブルのヘッダとボディの幅...
-
正規表現で「より前」と「より後」
-
テーブルの任意の列を非表示に...
-
この出品にある送料表の作り方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルタグの中にdivを含めて...
-
テーブルの横に画像を
-
テーブルの位置を細かく指定し...
-
ウィンドウのサイズを変えても...
-
HTMLでテーブルを横に並べる方法
-
テーブル内に画像を表示したい。
-
ヘッダー固定のスクロールが可...
-
tableのheight指定が効かない
-
箇条書きリストのすぐ横に画像...
-
【CSS】縦横スクロールテーブル...
-
DWで、デザインビューに表示さ...
-
更新するとずれる?
-
複数のテーブルを無条件に中央...
-
2つのテーブルを左右に表示した...
-
一つのテーブル内の文字色だけ...
-
<SPAN>で文字を右揃えにしたい...
-
テーブルでスクロールを同期したい
-
画像の横にテーブルを。。。
-
スタイルシートで、画像の横に...
-
テーブルの高さ幅の固定方
おすすめ情報