重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

ブラウザの表示領域から高さを指定、ブラウザを動かしても可変させたい。

ブラウザのスクロールバーのように、
ブラウザの表示領域を取得してdivのボックスのサイズを取得して、
それに合わせてボックスの高さを指定し、
overflow:autoでスクロールバーが出るようにしたいと考えております。
サイズの取得までは.clientHeightを使ってできたのですが、
表示後にブラウザを動かすと合わせて可変するようにすることができず困っております。


上記を実現する方法がおわかりの方がいらっしゃれば、
是非ご教授いただければと思います。

A 回答 (3件)

No1です。



ご提示のコード(No1の補足)では、単に以下のようなCSSを作成しているだけです。
  <style type="text/css"> .hoge { height:○○px; } </style>
○○の部分は数字で、document.allがある場合(IE)はbodyの高さ、そうでない場合でモダンブラウザならinnerHeightが入ることになります。
後半がいきなりinnerHeightになっているので、対象が何か不明です。(なんだかおかしいですね)
innerHTMLは通常は属性なのでそのもととなる要素があるはずなのですが、ご提示のコードではそれがありません。(withで指定?)あるいは、考えにくいことですが、innerHTMLをローカル変数に使っているとするならどこかで値を代入しているはずで、その部分が提示されていないので不明です。
さらに言うなら、その場合分け自体がすでに古い場合分けの方法なので、現状にあっているのか少々疑問です。


>今回jScrollPane.jsというjavascriptでスクロールバーをカスタマイズしており、
>上記方法では最初のサイズで固定されてしまい、
ご提示のコードだと「○○px」と数値で指定していますので、ご質問の通り固定サイズになっています。
No2様が示されているように、%指定などの相対指定にしておけば、リサイズされても相対的に変化してくれるので、何もしなくてもOKということになります。
ただし、 .hoge { height:100%; } とした場合、該当する要素がどのように構成されているかによって、実際のサイズが決まるので、ご提示の情報だけからではわかりません。
でも、相対指定を利用することで解決できる可能性はありそうですね。


No1で説明した方法ですと、同じルーチンを再実行するのではうまくいきません。(回答時に、document.writeを使っているなんて予想していなかったので)
正攻法でいくならリサイズイベントが発生した時に、スタイルシートを取得して、.hogeの記述を探し、あったらその内容を変更するという少々面倒な処理を追加することになります。
それよりはclass="hoge"の要素(スクリプトで生成される要素?)が都度生成されるものではなく、常に決まっているのであれば、そちらのスタイルを直接変更してしまったほうが簡単です。要素が可変(後で生成されるなど)の場合はスタイルシートを変更するしかないかも。

いずれにしろ、CSSだけで解決できるのなら、そのほうが遥かに簡単です。
    • good
    • 0
この回答へのお礼

上記を参考に、
CSSだけでできる形で対応する形式にしました。
詳しいご解説、ありがとうございました!

お礼日時:2010/08/09 09:51

横から失礼します。



#1の補足より。

> このようなコードに追記する場合どのように書けばうまく反映されますでしょうか…
そもそも、CSSだけで実現できる内容なのではないでしょうか…。

---------
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>HTML5</title>
<style type="text/css"><!--
html, body { margin: 0; padding: 0; height: 100%; }
#Test { height: 100%; background-color: #fee; }
--></style>
</head>
<body>

<div id="Test">test</div>

</body>
</html>
---------

この回答への補足

お返事ありがとうございます。

今回jScrollPane.jsというjavascriptでスクロールバーをカスタマイズしており、
上記方法では最初のサイズで固定されてしまい、
可変できないというところがありまして・・・

補足日時:2010/07/09 10:17
    • good
    • 0

>表示後にブラウザを動かすと合わせて可変するようにすることができず~


というのは、ブラウザのサイズを変えた場合という意味でしょうか?

ブラウザのサイズ変更時はonresizeイベントで捉えることが可能ですので、これを利用して再計算するようにしておけばよいのでは?
 http://www.openspc2.org/JavaScript/reference4/ev …

確認していませんが、確か、イベントは実際にサイズ変更前に発生したような記憶がありますので、ちょっとだけタイムラグを置いてサイズを取得しないとならないかも…(←記憶がかなり曖昧です)


違う意味でしたら、失礼。

この回答への補足

意味につきましてはおっしゃるとおりです!
しかし自分なりにやってみましたがうまく反映されずで・・・

<script type="text/javascript">
<!--
document.write('<style type="text/css">');
if(document.all){
document.write('.hoge { height:' + document.body.clientHeight + 'px;}');
}else if(document.layers || document.getElementById){
document.write('.hoge { height:' + innerHeight + 'px;}');
}
document.write('</style>');
// -->
</script>

このようなコードに追記する場合どのように書けばうまく反映されますでしょうか…
javascriptに関しては初心者です…よろしければお教えいただければ幸いです!

補足日時:2010/07/08 22:07
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!