- - PR -
CSS:ウィンドウリサイズに対応するスクロールバー付きのブロック
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-10-07 20:19
こんにちは。
CSS(カスケードスタイリングシート)のことでお尋ねします。(ここで良いのかわかりませんが) ウィンドウ内に2つのブロックがあり、1つはウィンドウ下部に固定的な高さで表示し、 他方はその上の残りの領域一杯に縦スクロールバー付きで表示し、ウィンドウの高さ が変更されたら、スクロールバーのブロックの方だけが、その変更量に合わせて、 下部のブロックを差し引いた高さに自動調整される、というような指定をCSSで 作りたいのですが、「下部のブロックを差し引いた高さに自動調整」させる方法が わかりません。 どなたかご教唆願います。 | ||||
|
投稿日時: 2004-10-07 20:44
一応、自分のコーディングを載せます。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>スクロール</title> <style type="text/css"> <!-- .scrl {position:absolute; overflow:auto; height:88%; z-index:1;} .footer {position:absolute; bottom:0px; height:40px; background:green; z-index:2;} body {margin-top:0; margin-left:0; margin-bottom:0; margin-right:0;} --> </style> </head> <body> <div class="scrl" id="mdfrm"> <table border=4 width=400 align=center> <tr bgcolor="#cccccc"> <th><br></th> <th>列-A</th> <th>列-B</th> <th>列-C</th> </tr> <tr align=center> <td rowspan=3>行-1〜3</td> <td>A1</td> <td>B1</td> <td rowspan=2>C1-C2</td> </tr> ・・・(以下テーブルの行がずっと続きます) </table> <hr> </div> <div class="footer"> This is FOOTER<br>    <input type="button" value="button1">  <input type="button" value="button2">  <input type="button" value="button3"> <hr color="green"> </div> </body> </html> | ||||
|
投稿日時: 2004-10-12 20:55
CSSじゃなく、JavaScriptとかDHTMLですね。
window.documentに、onresizeというイベントがあります。このイベントは、ウインドウのサイズが変更されると発生します。なので、このイベントにハンドラを追加して、その中で「ブロックの高さを変える」処理を追加します。ブロックの位置は、positionをrelativeにすると、取ることができます。この属性は、要素の位置を「次に表示するべき位置からの相対位置で指定する」ですが、表示された後にx,yを参照すると、absoluteと同じ値が返ってきます。 要素の値とブロックの位置の関係については、MSDNに記述があります。VS.NET2003の場合、次のURIを、ヘルプのアドレス欄に入力してください。 ms-help://MS.MSDNQTR.2003FEB.1041/jpisdk/dhtml/measure/measuring.htm オンラインはこちら #「MS.MSDNQTR.2003FEB.1041」を、 #インストールされているMSDNにあわせて変更します。 #「2003FEB」の部分だけ書き換えればよいはずです。 これで「表示するべきものの大きさ」、「表示する領域の大きさ」がわかりますから、「表示する領域の大きさ」から、「下に表示される固定の大きさ」と「上に表示される固定の大きさ」を引いたものが、「可変の大きさを持つ表示領域の大きさ」になります。 なお、IEとそれ以外では取れる値が違いますので、その辺は調べてください。 と、書き終わってから気がついた。
無理でしょう。CSSでは動的に変化する値を宣言できませんから。横の場合、col、colgroupに*を使うことで、できるんですけどね。縦の場合、ファイルすべてを表示した後に計算、そして計算によって縦の長さが変わった場合、再計算をする?みたいなところで、無理があると思います。 | ||||
|
投稿日時: 2004-10-14 16:17
Jittaさん、皆さん、こんにちは。
当初、Javascriptを検討したのですが、取れる値が怪しかったので、やめました。 でも、
で、★★★★CSSで出来ました。★★★★ でも私が解決したのではなく、別のサイトへ同様な事を投げかけたところ、答えてくれました。 ここにそのまま掲載するのは、サイトとその方へ失礼になると思いますので、リンクを掲載します。 "CSSなんでも質問箱"(No.612 Re: CSSで画面3分割) http://hpcgi2.nifty.com/yoshi-m/makehp/q_a/css/wforum.cgi?no=612&reno=608&oya=608&mode=msgview&page=0 | ||||
|
投稿日時: 2004-10-14 17:54
仕組みは、自分の可変サイズを指定するのでなく、
3面別々に、外枠からの変位量(これは固定)を指定する、ですね。 頭のDOCTYPEも含めて、参考になります | ||||
|
投稿日時: 2004-10-14 23:31
ほう!おもしろい!!
bodyのパディングを100px取って、headerを(0,0)絶対位置から高さ100px取るので、bbodyのパディング内に収まると。ということは、ヘッダーの高さを変えるには、2つの値(フッターも同じく)を変更する必要がある、と。 へぇ、IEは、コメントをこんな風にif文つけられるのか。これは、『(Conditional Commentsなんか使ってるんだから正しい訳ないか・・)』のあたり、IE特有ですね。 _________________ | ||||
|
投稿日時: 2004-10-15 09:51
本当にすごいです。 もし、headerのheightを40pxに変えた場合は、bodyのmargin-topと.scrlのtopを40pxに する、という事になります。(I.E.の場合) | ||||
|
投稿日時: 2004-10-15 21:19
詳しく見てみました。ブラウザに依存しますね。
FireFox0.9、IE6.0SP1、Opera7.53jaで試してみました。FF、IEでは希望通りの動作をしますが、Operaではウインドウサイズの変更に追従しません。また、IEでも、DOCTYPE宣言を変更して「標準モード」でレンダリングするようにすると、うまくいきません。FF、Operaとも、「標準モード」でも、同じ動作になります。 IEの場合は、DOCTYPEを「互換モード」に設定することで、IEの互換モードでのHEIGHT要素が「パディングとボーダーと内容の和」であるという、CSSの仕様から外れた仕様、を利用しているようです。また、条件コメント内で再定義しているscrlの「HEIGHT:100%」も、「互換モード」でのみ、希望通りの解釈がされます。 その他のブラウザでは、srclクラスを「(直前の要素の)上から100ピクセル、底から100ピクセル」と指定することで、オーバーフローを「自動スクロール」とすることで、表示しています。IEでは「底から100px」が解釈されないようです。この100ピクセルが、同時にヘッダー、フッターの「高さ」になります。そして、「底から100ピクセル」の、解釈になるのかな?Operaはバグっぽいなぁ。互換モードでは最初の描画時のみ計算されるようです。標準モードにすると、サイズ変更時も計算しようと試みているようでが、表示が崩れました。 |