2016-09-10 4 views
2

私はウェブページの上部に固定ナビゲーションを作成しています。しかし、ラッパーの内容は重複します。だから私はjQueryを使ってマージントップを設定しています:固定要素との重複を避ける

$('#wrapper').css('margin-top', function() {return $('nav').height();});
nav { 
 
    background-color: #cccccc; 
 
    position: fixed; 
 
    top: 0; 
 
    width: 100%; 
 
    line-height: 2.5; 
 
} 
 

 
@media screen and (min-width: 800px) { 
 
    nav { 
 
     line-height: 1.5; 
 
    } 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
 

 
<nav> 
 
    NAV 
 
</nav> 
 
<div id="wrapper"> 
 
    <header id="header" class="alt"> 
 
     HEADER 
 
    </header> 
 
    <main> 
 
     Lorem <br> 
 
     ipsum <br> 
 
     dolor <br> 
 
     sit <br> 
 
     amet <br> 
 
    </main>  
 
</div>

しかし、私は小さなウィンドウでページを開くと、それを最大化した場合、その後、NAVは、サイズ変更が、margin-top意志ますそのまま。

私が理解するように、css関数は1回だけ呼び出されます。 #wrappermargin-topheightnavにバインドすることは可能ですか?

答えて

1

の準備ができて、ウィンドウのサイズ変更に文書でそれを設定します。たとえば、

function setWrapper() { 
    $('#wrapper').css('margin-top', $('nav').height()); 
}; 

$(setWrapper); 
$(window).resize(setWrapper); 

また、機能の呼び出しを抑制またはデバウンスすることもできます。

代わりに、「通常の」CSSとメディアクエリを使用してマージントップを設定することもできます。

+0

しかし、私は 'line-height' navのピクセルの高さなので、通常のCSS、afaikでは実際に使用できません。さらに、 '$( 'nav').resize(...)'を使うとどうなるでしょうか?これは、今後のナビゲーションバーの高さの変更に対してフェイルセーフになります。ウィンドウのサイズ変更には関係しません。スロットルやデバウンスはどういう意味ですか? – marmistrz

+0

ああ、私はあなたが高さを知っていると思っていましたが、それはウィンドウの幅(それゆえ、メディアクエリ)で頻繁に変化します。とにかく、jqueryは行く方法です。私は、サイズ変更イベントはウィンドウ上でトリガーだと思うので、それを使うべきです。 – yezzz

+0

ところで、あなたは関数と戻り値を必要としません – yezzz

0

リコールウィンドウのサイズ変更の設定:

$(window).resize(function(){ 
$('#wrapper').css('margin-top', function() {return $('nav').height();}); 
}) 
+0

を次のようにも開始にresizeイベントをトリガする必要があります私? – marmistrz

+0

はい。私は '$(document).ready()'と '$(window).resize()'で一度だけ呼び出さなければならないので、** Recall **と言っています –

0

あなたは、私がいない、オリジナルの `の.css(...)`コールと `resize`ハンドラの両方が必要なのです

$(window).resize(function(){ 
    $('#wrapper').css('margin-top', $('nav').height()); 
}).trigger('resize'); 
関連する問題