2011-12-23 13 views
2

ヘッダー、コンテンツ、およびフッターセクションが垂直にレイアウトされた単純なHTMLレイアウトを作成しようとしています。フレキシブルなヘッダー、スクロール可能なボディーとフッターのHTML

ヘッダーとフッターの高さは、内容によって決まります。

コンテンツセクションの高さは残りの高さである必要があります。したがって、レイアウト全体がウィンドウの高さ全体を使用します。コンテンツセクションはスクロール可能です。

ので、順番に:

  1. ヘッダー。高さはコンテンツの高さに依存します。スクロールバーはありません。
  2. コンテンツ。高さは残りの部分です。 window_height - (header_height + footer_height)です。必要に応じてスクロールバー(オーバーフロー:自動;)
  3. フッター。高さはコンテンツの高さに依存します。スクロールバーはありません。

静的なヘッダーとフッターの高さの例はたくさんありますが、コンテンツベースの高さに対応できるものは何も見つかりませんでした。

私は絶対位置/相対位置/固定位置のプレーンdivを試しました。私はいくつかの設定でdisplay:table/table-row/table-cellを使ってdivを試しました。私は実際のものを使ってみました。しかし、これらのどれもうまくいかないようです。 http://jsbin.com/uveloj/15/edit

スクリプトを作成せずにこれを行うにはどうすればいいですか(可能な場合は常にJSに頼らないことをお勧めします)。

+1

答えは簡単です:これは、あなたが、ヘッダおよび/またはフッタ用の柔軟な高さを必要とするだけで、いない場合はCSSを行うことはできません。 – ptriek

+0

私はまた、 "float:bottom;"存在する...しかしそれは事実ではない。純粋なCSSでこれを行う方法は知られていません。 – Wis

答えて

1

JavaScriptを使用しない場合、これは可能ではないと思います。あなたが望む中間のスクロールを得るために、コンテンツ領域は、設定された高さを持たなければなりません。ヘッダーとフッターが動的に変更できる場合は、JavaScriptを使用せずにスクロールできるようにコンテンツ領域の高さを更新する方法はありません。しかし、JSのいくつかの行を書くだけなら、これはかなりシンプルなレイアウトです。

http://jsfiddle.net/rogerblanton/8ctJJ/

フレームを使用すべきでない:私はあなたのための良い例があります。

+0

私はJSが確かに唯一の方法であるように思えます。おそらく、レイアウト用にJSを使用したくない場合は、UIレイアウトを再考する必要があります。 – Martijn

+0

おそらく、私はあなたが何をしようとしているのかは完全には分かっていませんが、JavaScriptを使って何か簡単にこれを使うと、私はユーザー体験を妨げるとは思わないでしょう。私はこのようなことを何度もやったことがあり、私は何の問題にも気付かなかった。何か他の理由でそれを使用したくない場合を除きます。 – Roger

+1

あなたが与えた例では、フッター/ヘッダーの高さを動的に変更することはできません。しかし、これは良い出発点でした: http://jsfiddle.net/AJUCh/ – Martijn

1

フレームの使用について考えましたか?

+0

私が取り組んでいるサイトでは、JavaScriptベースのドラッグ&drop;フレームを使用すると、不可能ではないにしても非常に困難になります。 – Martijn

1

私はずっと後でこのスレッドに出会いましたが、それは有用であることがわかりました。

私はあなたが助けるためにjQueryのouterHeight()関数を使用することができます一般的なケースでは、あなたがなど、アカウントのマージン、ボーダー、を考慮する必要があることがわかった:

$(window).resize(function() { 
    var windowHeight = $(window).height(); 
    var headerHeight = $('div#header').outerHeight(true) 
    var footerHeight = $('div#footer').outerHeight(true); 

    var contentHeight = windowHeight - (footerHeight + headerHeight); 
    var contentMargins = $('div#content').outerHeight(true) - $('div#content').height(); 
    var contentInnerHeight = contentHeight - contentMargins; 

    $('div#content').height(contentInnerHeight); 
}).resize(); 

コンテンツの高さを固定jsのほかに、本当に重要なのは、コンテンツのオーバーフロースタイルをスクロールまたは自動にすることだけです。

はここでロジャーのフィドルの変形例です:

http://jsfiddle.net/nuAmG/1/

+0

'box-sizing'属性はこれを助けることができます... – ErikE

関連する問題