twitterブートストラップnavbar固定トップオーバーラップサイト


347

私のサイトでブートストラップを使用していて、navbar固定トップに問題があります。通常のナビゲーションバーを使用している場合は、すべて問題ありません。しかし、navbar fixed topに切り替えようとすると、navbarがなく、navbarがオーバーラップするように、サイト上の他のすべてのコンテンツがシフトアップします。ここに基本的に私がそれをレイアウトした方法があります:

.navbar.navbar-fixed-top
  .navbar-inner
    .container
.container
  .row
    //yield content

ブートストラップの例を正確にコピーしようとしましたが、navbar fixed topを使用した場合にのみこの問題が発生します。私は何を間違っていますか?

回答:


527

あなたの答えはドキュメントで正しいです:

ボディパッドが必要

padding上部に追加しない限り、固定ナビゲーションバーは他のコンテンツをオーバーレイします<body>。独自の値を試すか、以下のスニペットを使用してください。ヒント:デフォルトでは、ナビゲーションバーの高さは50pxです。

body { padding-top: 70px; }

コアBootstrap CSSの後に必ずこれを含めてください。

そしてBootstrap 4のドキュメントで...

固定ナビゲーションバーでの位置の使用:固定、つまりDOMの通常のフローから引き出され、他の要素との重複を防ぐためにカスタムCSS(例:のパディングトップ)が必要になる場合があります。


16
しかし、ウィンドウを最小化すると、ナビゲーションバーは40pxの後に表示されます。どうすればそれを処理できますか?
Aravindhan

5
「コアブートストラップCSSの後、オプションのレスポンシブCSSの前にこれを追加しない」ため、40pxの後に表示されます。
collimarco

1
この答えは本当ですが、40pxのパディングをレスポンシブなスタイルにした場合にのみうまく機能します。DanまたはNickの答えを参照してください。
トニーバスゲイト2013年

1
パディング(またはその他)を追加したくない場合は、@ qub1nからの回答を参照してください。
scharfmn 2015年

2
@JerSchneid w3schools.comのnavbar-fixed-topの例は、同じ動作を示しています。私はそれをバグと呼ぶ傾向があります。
トニーマーティン

125

他の人がボディにパディングトップを追加すると述べたように素晴らしい働きをします。ただし、画面を(携帯電話の幅に対して)狭くすると、ナビゲーションバーと本体の間に隙間ができます。また、混み合ったナビゲーションバーが複数行のバーに折り返され、一部のコンテンツが再度上書きされる場合があります。

これは私のためにこれらの種類の問題を解決しました

body { padding-top: 40px; }
@media screen and (max-width: 768px) {
    body { padding-top: 0px; }
}

これにより、デフォルトで40pxのパディングが作成され、768px幅未満の場合は0pxになります(これは、ブートストラップのドキュメントによれば、ギャップが作成される携帯電話のレイアウトのカットオフです)。


1
このソリューションは、コアBootstrap CSSとレスポンシブCSSインポートの間にも行きますか?ウィンドウの幅が980未満の場合でも、まだギャップが見られます。レスポンシブCSSオーバーライドを後でインポートすると思います。このソリューションをレスポンシブCSSインポートの下に移動しても、ボディパディングに加えて、メニューバーに1行追加されます。
ナマケモノ2013年

Twitter Bootstrap 2.3.2を使用しています。必要性はまだ残っていますが、ドキュメントに40pxの提案が含まれていないことに気付きました。
ナマケモノ2013年

1
ええと、40pxの提案はまだ残っていますが、移動しただけです。コメントスパムのため申し訳ありません。
ナマケモノ2013年

3
ブートストラップ3 +によってbody { padding-top: 40px; }十分です
andilabs

8
このソリューションは正しい方向に進んでいます。文書化されているように、本文にパディングを入れるだけでは、3。+でも十分ではありません。メディアクエリの適切な組み合わせにより、navbarがブラウザのサイズ変更で折り返されるため、目的の効果を得ることができます。私の場合、1148px、900px、768pxの幅でパディングを変更する必要があります。
John McCann

34

あなたの参照のためのはるかに便利な解決策、それは私のすべてのプロジェクトで完璧に機能します:

最初の行を

.navbar.navbar-fixed-top

.navbar.navbar-default.navbar-static-top

1
あなたはトローリングだけですか?または私は何かを監督しましたか?
キノ2016

これはどうして10票を獲得したのですか?navbar-defaultは、色と背景色を追加するだけです
Denny Mueller

2
navbar-static-topが変更され、私にとってはうまくいきました。ありがとう!
kevthanewversi 2017年

1
navbar-static-topでも修正されました。邪魔にならない。
xpagesbeast 2018年

3
これは、画面の上部に常にナビゲーションバーを表示する必要がない場合に機能します。navbar-static-topは固定されておらず、画面とともにスクロールします。これは、さまざまなナビゲーションバーのスタイルの例です:getbootstrap.com/docs/3.3/examples/navbar-static-top
Victor Ionescu

26

この問題は既知であり、Twitterブートストラップサイトに回避策があります。

ナビゲーションバーを貼り付けるときは、その下の非表示領域を考慮してください。に40px以上のパディングを追加し<body>ます。これは、コアブートストラップCSSの後、オプションのレスポンシブCSSの前に必ず追加してください。

これは私のために働きました:

body { padding-top: 40px; }

9
しかし、ウィンドウを最小化すると、ナビゲーションバーは40pxの後に表示されます。どうすればそれを処理できますか?
Aravindhan

1
はい、このソリューションはモバイル画面サイズではうまく機能しません。実際、私の携帯電話のワイドスクリーンモードでは、基本的にサイトが役に立たなくなります。
トニーバスゲイト

オプションのレスポンシブCSSとは?私はこれまで1つ(コア)のブートストラップCSSしか使用していませんでした-バージョン3.7.xの上で話しています。バージョン3.7.xより前の別のCSSで分割されていましたか?
joedotnot

26

@ライアン、正解です。高さをハードコーディングすると、カスタムナビゲーションバーの場合に正しく機能しなくなります。これは私がBS 3.0.0に喜んで使用しているコードです:

$(window).resize(function () { 
   $('body').css('padding-top', parseInt($('#main-navbar').css("height"))+10);
});

$(window).load(function () { 
   $('body').css('padding-top', parseInt($('#main-navbar').css("height"))+10);         
}); 

3
parseInt高さのcss値を使用する代わりに、を使用しました$('#main-navbar').height()が、それ以外の場合、これは非常に役立ち、私の問題を解決しました。ありがとうございます。
タイラーワル2016

ナビゲーションバーの高さが固定されていない限り、これが必要です。
CraigP

21

これを収量コンテナの前に置きます:

<div id="fix-for-navbar-fixed-top-spacing" style="height: 42px;">&nbsp;</div>

このアプローチが好きなのは、それを機能させるために必要なハックを文書化しているだけでなく、モバイルナビゲーションでも機能するためです。

編集-これははるかにうまく機能します:

@media (min-width: 980px) {
  body {
    padding-top: 60px;
    padding-bottom: 42px;
  }
}

16

問題はnavbar-fixed-topにあり、ボディパディングを指定しない限りコンテンツをオーバーレイします。ここで提供されるソリューションは、100%のケースでは機能しません。JQueryソリューションは、ページが読み込まれた後にページを点滅/シフトしますが、奇妙に見えます。

私にとっての本当の解決策は、navbar-fixed-topではなくnavbar-static-topを使用することです。

.navbar { margin-bottom:0px;} //for jumtron support, see http://stackoverflow.com/questions/23911242/gap-between-navbar-and-jumbotron

<nav class="navbar navbar-inverse navbar-static-top">
...
</nav>

1
はい、それはより良いです。本体のパディングは画面サイズごとに動的であるため、それらのソリューションは適切ではありません。
Ronen Festinger 2015年

ただし、ナビゲーションバーの上には空白の空白スペースがあります。
user2075599 2017

16

同様の質問で投稿したので、実際の固定ナビゲーションバーの直前にダミーの固定されていないナビゲーションバーを作成することに成功しました。

<nav class="navbar navbar-default"></nav> <!-- Dummy nav bar -->
<nav class="navbar navbar-default navbar-fixed-top"> <!-- Real nav bar -->
    <!-- Nav bar details -->
</nav>

間隔はすべての画面サイズでうまく機能します。


これが私たちが行うことです..推測やその他の何もせずに、JSコードなしで本文のコンテンツを正確な場所に配置します。。
FredArters

1
Thidはより多くの投票に値し、完全にうまく機能し、地獄のように醜いですが、コードだけが:D
JRsz

おかげで、これは...トップパディングやマージンのピクセルやものよりもはるかにエレガントなソリューションです
ペドロ・レイス

3
残念ながら、ナビゲーションが1列に入ると、これはモバイルでは機能しません。
Pedro Reis

16

Bootstrap 4のソリューションは、私のすべてのプロジェクトで完璧に機能します。

最初の行を

navbar-fixed-top

sticky-top

ブートストラップドキュメントリファレンス

彼らがこれを正しく行った時間について:D


ページを下にスクロールするときにリンクを表示するために、固定トップを使用する人もいます。ただし、この機能は、気にしない場合に役立ちます。:)
knowledge_is_power

また、.sticky-topはposition:stickyを使用することに注意してください。これは、すべてのブラウザーで完全にサポートされているわけではありません。
live-love

14

これまでのすべてのソリューションでは、40ピクセルを具体的にHTMLまたはCSSに何らかの方法でハードコードしていました。ナビゲーションバーに別のフォントサイズまたは画像が含まれている場合はどうなりますか?そもそもボディパディングを台無しにしない正当な理由がある場合はどうなりますか?私はこの問題の解決策を探していましたが、これが私が思いついたものです:

$(document).ready(function(){
    $('.contentwrap') .css({'margin-top': (($('.navbar-fixed-top').height()) + 1 )+'px'});
    $(window).resize(function(){
        $('.contentwrap') .css({'margin-top': (($('.navbar-fixed-top').height()) + 1 )+'px'});
});

「1」を調整することで、上下に移動できます。サイズ変更の前後で、ナビゲーションバーのコンテンツのサイズに関係なく、私にとってはうまくいくようです。

他の人がこれについてどう思っているか知りたいです。あなたの考えを共有してください。(繰り返さないようにリファクタリングされます、ところで)。jQueryを使用する以外に、この方法で問題に対処しない他の理由はありますか?次のようなセカンダリナビゲーションバーでも機能します。

$('.contentwrap') .css({'margin-top': (($('.navbar-fixed-top').height())
        + $('.admin-nav').height() + 1 )+'px'});

PS:上記はBootstrap 2.3.2にあります-3.xでも機能しますか?総称クラス名が残っている限り...実際、ブートストラップとは関係なく機能するはずですよね?

編集:動的なサイズの2つの積み重ねられた応答性のある固定ナビゲーションバーを処理する完全なjquery関数を次に示します。3つのHTMLクラスが必要です(またはIDを使用できます):user-top、admin-top、およびcontentwrap:

$(document).ready(function(){

    $('.admin-top').css({'margin-top':($('.user-top').height()+0)+'px'});
    $('.contentwrap') .css({'padding-top': (
        $('.user-top').height()
         + $('.admin-top').height()
         + 0 )+'px'
    });

    $(window).resize(function(){
        $('.admin-top').css({'margin-top':($('.user-top').height()+0)+'px'});
        $('.contentwrap') .css({'padding-top': (
            $('.user-top').height()
             + $('.admin-top').height()
             + 0 )+'px'
        });
});

ちょうど私がこれを使用していて、それはうまく機能しますが、奇妙な理由で、2つのナビゲーションバーがあり、1つは通常のサイズで、もう1つは小さな画面用である場合、大きいものでのみ機能しますか?
NaughtySquid 2014年

@LiamDawe多分あなたはページに複数の '.user-top'(例えば)を持っています、その場合.height()は混乱するかもしれません...?
Ryan


11

メニューバーの折り返し行を処理するには、次のように、ナビゲーションバーにIDを適用します。

<div class="navbar navbar-default navbar-fixed-top" role="navigation" id="topnavbar">

次のように、jqueryを含めた後に、この小さなスクリプトを先頭に追加します。

<script>
    $(document).ready(function(){
        $(document.body).css('padding-top', $('#topnavbar').height() + 10);
        $(window).resize(function(){
            $(document.body).css('padding-top', $('#topnavbar').height() + 10);
        });
    });
</script>

こうすることで、ボディの上部パッドが自動的に調整されます。


私はあなたの例の高さへの2番目の参照を$( '#topnavbar')。height()に変更する必要があり、これは私にとっては完璧に機能しました。ありがとう!
2014年

1
コメントをありがとう!私は答えでそれを修正しました。
Oliver Konig 2014年

これは、PC、iOS、Android-すべてのデバイスで動作する、私が遭遇した最高のソリューションです。他のすべては、ハードコードされたピクセル値であるか、長すぎるため、すべてのデバイスで機能しません。
Oracular Man

素晴らしい解決策。計算で考慮されなかったいくつかの小さなオフセットがありました。ナビゲーションバーに余白があったためだと思います。これを考慮に入れるために、代わりにouterHeight()呼び出しのheight()呼び出しを変更することを選択しました。
Leonardo Santos

4

Bootstrap 3. +の場合、次のCSSを使用して、navbar-fixed-topと、https://github.com/twbs/bootstrap/issues/1768に基づくアンカージャンプの重複問題を修正し ます

/* fix fixed-bar */
body { padding-top: 40px; }
@media screen and (max-width: 768px) {
  body { padding-top: 40px; }
}

/* fix fixed-bar jumping to in-page anchor issue */
*[id]:before { 
  display: block; 
  content: " "; 
  margin-top: -75px; 
  height: 75px; 
  visibility: hidden; 
}

同じ問題、いい答え。
McGrady 2017年

2

navタグ内でこのクラスを使用します

class = "navbar navbar-expand-lg navbar-light bg-light sticky-top "

ブートストラップ4用


それが私と他のすべてのために働いていたので、私はそれがなぜ反対票を投じられたのか決してわかりません。
Kynginthenorth

これは正しいです。:唯一の問題はそれで、ドキュメントで、それは「スティッキー、完全にすべてのブラウザでサポートされていません.stickyトップユーティリティの使用のCSSの位置」と言う
ホセ・


0

Nick Bisbyの回答に加えて、レールでHAMLを使用してこの問題が発生し、ここでRoberto Barrosの修正を適用した場合:

「bootstrap_and_overrides.css」のrequireを次のように置き換えました:

= require twitter-bootstrap-static / bootstrap.css.erb

https://github.com/seyhunak/twitter-bootstrap-rails/issues/91を参照してください

... 次のよう、requireステートメントの前に本文のCSSを配置する必要があります。

@import "twitter/bootstrap/bootstrap";
body { padding-top: 40px; }
@import "twitter/bootstrap/responsive";
=require twitter-bootstrap-static/bootstrap.css.erb

requireステートメントがbody CSSの前にある場合、それは有効になりません。


0

私はこれを行います:

// add appropriate media query if required to target mobile nav only
.nav { overflow-y: hidden !important }

これにより、navブロックがダウンページを拡大せず、ページコンテンツをカバーするようになります。


-4

navbarを

<div width="100%">
<div class="nav-? ??">
...
</nav>
</div>

派手なhocus pocusはありませんが、うまくいきました。


あなたの答えは不明確であり、問​​題に対処できません。何をnav-? ??表していますか?
fragilewindows
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.