2012-03-07 10 views
0

固定小文字のサイドバーがXXpxの高さであるとしましょう(私が意味するものを視覚化したい場合はhttp://www.getskeleton.com/を参照してください)。ブラウザの高さがサイドバーよりも大きければ、サイドバーは私が望むやり方を正確に見せます。ただし、ブラウザの高さがサイドバーの高さよりも低くなると、下部のコンテンツが途切れてしまいます。固定サイドバーのブラウザが高すぎる(下が切れている)

最初はサイドバーにposition: fixedがありますが、ブラウザがサイドバー全体を含むには小さすぎる場合は、position: abosluteに変更します。基本的には、ページの読み込みとユーザーのサイズ変更が完了したときに、ページのサイズを変更したら、下部のコンテンツが切り捨てられていないことを確認してから、適切なposition属性を割り当てます。

答えて

1

はこのような何かを行います。これはと一緒にJavaScriptメソッドで処理できるデフォルトの純粋なCSSソリューションとして使用できます。

+0

私は '.resize'関数を使ったことがありません...この関数はサイズ変更でかなり数回呼び出される可能性があるため、パフォーマンスについて心配する必要はありますか? – Wex

+0

はい、心配する必要があります。だからこそ、私はすべての「高価な」ish文を関数自体から取り除き、その中にキャッシュされたものだけを使用したのです。 – koenpeters

+0

この文をさらに最適化する方法はありますか?サイドバーの高さをキャッシュすることは、初心者のためのかなり単純なもののように思える – Wex

5

ので(のサイドバーは、背の高い700pxであるとしましょう。)のようにあなたは、このための垂直メディアクエリを使用することができ

#sidebar { 
    position: absolute; 
} 

media screen and (min-height:700px) { 
    #sidebar { position: fixed; } 
} 

を最初の絶対位置を宣言することにより、あなたはブラウザがサポートしないことを確認してくださいメディアクエリは絶対配置されたサイドバーを取得しますが、それでも機能します。

var $sidebar = $('#idOfSidebar') 
    ,$w = $(window); 
$w.resize(function() { 
    var pos = $w.height() < $sidebar.height()? 'absolute': 'fixed'; 
    $sidebar.css({position: pos}); 
}); 
+1

非常にきれいな解決策ですが、これは古いブラウザでは機能しません。 – koenpeters

+0

ありがとうございます、私は何か互換IE7 +を探しています。 – Wex

1

オプションはbrowser`sクライアントの高さよりも潜在的にも高くすることができ、固定ブロックのためoverflow: autoを使用することです:

+0

サイドバーに別のスクロールバーを追加してもらえませんか? – Wex

+1

でしょうか。一般に、複数のサイドバー要素のアクセス不能性よりも優れています。代わりにJavaScript_addition_を使用することができます。 –

+0

私はこれを私のコードに追加しています。提案していただきありがとうございます。 – Wex

関連する問題