2012-04-14 10 views
3

私は基本的な3つの行にレイアウトを設定しようとしています:ヘッダー、コンテンツ、およびフッターdiv。 2つの最も外側のdivは固定高さです。中央のdivは、流体でなければならず、ブラウザ画面の高さに適応しなければなりません。流体のある高さの固定された水平divを作成する

Sample of layout

誰かが適切なCSSでこれに対処するための方法を正しい方向に私を指すもらえますか? 今のところ私はまだjavascriptソリューションに興味がありません。 CSSはきれいな答えを提供していないので、javascriptのソリューションが卓越しています!

これは私が来たどこまである:

<div id='header'>Header</div> 
    <div id='content'> 
     <div id='innerContent'> 
      This is the fluid part 
     </div> 
    </div> 
<div id='footer'>footer</div> 

CSS:

#header { 
    position:absolute; 
    top:0px; 
    left:0px; 
    height:100px; 
    z-index:5; 
} 
#content { 
    position:absolute; 
    top:0px; 
    left:0px; 
    height:100%; 
    z-index:2; 
} 
#innerContent { 
    margin-top:100px; 
    height:100%; 
} 
#footer { 
    height:400px; 
} 
+1

あなたは、ヘッダーとフッターは関係なく、常にメインのコンテンツがスクロールされたかどうかの、ビューになりたいですか? –

+0

いいえ、ブラウザの画面に固定する必要はありません! – stUrb

+0

ジャバスクリプトはどうですか? – Starx

答えて

4

EDIT: ごめんなさい、私は恥ずかしい感じ。私は1年前に似たようなことをしましたが、最初はこの状況に調整することはできないと思いました。どうやらそれはそうだった。

私はすでに他の人が言っていたと思うので、それを絶対に配置して下部にフッターdivを置くことは可能です。問題は、コンテンツdivが大きくなるとその位置を調整することです。フッタは完全に配置されているため、コンテンツdivのフローに従わないため、コンテンツが拡大しても同じ場所に留まります。

このトリックは、絶対配置されたdiv内のすべてをラップすることです。内容が大きくなると展開され、フッターdivはドキュメントの枠の代わりにラッパーの罫線に従って配置されます。

ここにコードがあります。コンテンツのdivに<br />タグの束を入れてみると、すべてが調整されることがわかります。

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Layout test</title> 
    <style type="text/css"> 
    * { 
     margin: 0; 
     padding: 0; 
    } 

    #wrapper { 
     min-height: 100%; 
     min-width: 100%; 
     position: absolute; 
    } 

    #header { 
     height: 100px; 
     background-color: red; 
    } 

    #content { 
     background-color: gray; 
     margin-bottom: 50px; 
    } 

    #footer { 
     height: 400px; 
     min-width: 100%; 
     position: absolute; 
     bottom: 0px; 
     margin-bottom: -350px; 
     background-color: blue; 
    } 

    </style> 
</head> 
<body> 
    <div id="wrapper"> 
     <div id='header'>Header</div> 
     <div id='content'> 
      Content 

     </div> 
     <div id='footer'>footer</div> 
    </div> 
</body> 
</html> 

ORIGINAL: は悲しいことに、CSSはこれを行うにはきれいな方法を欠いています。viewportの高さ(hと呼んでいます)がわからないため、h-100-50を計算できません。のフッタのdivの50pxが表示されるようにウェブサイトを構築する必要があります。その方法は、コンテンツdivの最小高さを設定することです。

最小高さの値は、標準のビューポートの高さから派生する必要があります。グーグルLabsは彼らの訪問者のためのビューポートのサイズにそのデータを公表し、ここでの偉大な可視化を行った。 http://browsersize.googlelabs.com/

私は(Googleによると〜80%が、このビューポートの高さを持っている)高620pxである私自身のビューポートのための設計します。したがって、コンテンツdivの最小高さは、620-100-50 = 470ピクセルでなければなりません。

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Layout test</title> 
    <style type="text/css"> 
    * { 
     margin: 0; 
     padding: 0; 
    } 

    #header { 
     height: 100px; 
     background-color: red; 
    } 

    #content { 
     min-height: 470px; 
     background-color: gray; 
    } 

    #footer { 
     height: 400px; 
     background-color: blue; 
    } 

    </style> 
</head> 
<body> 
    <div id='header'>Header</div> 
    <div id='content'> 
     Content 
    </div> 
    <div id='footer'>footer</div> 
</body> 
</html> 
+0

あなたはすべての高さを定義しています。 – Starx

+1

+1、グーグルの統計情報を参照しています。 JavaScriptが許可されていれば、ブラウザのサイズ変更イベントにスクリプトを記述してバインドすることができ、コンテンツが常にヘッダー/フッターを除いたサイズの100%になるようにすることは重要です。あなたが言ったように、CSSはまだこれを独自に処理しません。 –

+0

@Starx「すべてのもの」とは何を意味するのかよく分かりません。 –

0

を、私はそれで突くを取りますよ。あなたのスクリーンショットを正しく読んだかどうかは分かりませんが、コンテンツのdivを50〜100pxの高さに設定しています。ここで

は私jsfiddleです:http://jsfiddle.net/AX5Bh/

私はmin-heightmax-height CSSが#innerContent div要素を制御するために属性を使用しています。

結果ウィンドウを水平に展開すると、一部のテキストが強調表示されます。私はそれが#innerContent divより大きい場合、コンテンツを隠すように設定しました。あなたは何か違うことが必要かもしれません。 max-heightが動作していたことを示すために、<em>というタグを付けたテキストを強調表示しました。

最初の文章以外のすべてのテキストを削除すると、高さが50pxになることがわかります。ここで

min-heightmax-heightのブラウザのサポートへのリンクです:http://caniuse.com/#search=max-height

関連する問題