ブートストラップcssはnavbar navbar-fixed-topの下のコンテナの一部を非表示にします


127

私はブートストラップでプロジェクトを構築していて、ほとんど問題はありません.Nav-topの下にコンテナーがあります。私の問題は、コンテナーの一部がnav-topヘッダーの下に隠れていることです.top-marginを使用したくないコンテナ。Plsは以下のHTMLを参照して、問題に直面しています

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<link rel="stylesheet" href="~/stylesheets/bootstrap.css"/>
<link rel="stylesheet" href="~/stylesheets/bootstrap-responsive.css"/>

</head>
<body>
    <div class="navbar navbar-fixed-top ">
        <div class="navbar-inner">
            <div class="container">
           <button data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar collapsed" type="button">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
                <div class="nav-collapse"><ul class="nav" id="navbar"><li ng-class="{active:section=='plunks'}" class="active"><a href="/plunks/trending"><i class="icon-home"></i>Home</a></li><li><a target="_self" href="/edit/"><i class="icon-calendar"></i>General Election 2014</a></li><li class="divider-vertical">
                    </li><li class="dropdown"><a class="dropdown-toggle" href="#" data-toggle="dropdown">
                        <i class="icon-eye-open">
                        </i>Assembly Elections
                        <b class="caret"></b>
                        </a>
                        <ul class="dropdown-menu">
                                <li><a href="#/HTML5Apps">Assembly Elections 2013</a></li>
                        </ul>
                         </li><li class="divider-vertical">
                    </li><li ng-class="{active:section=='tags'}"><a href="/tags"><i class="icon-th"></i>Constituecy</a></li><li ng-class="{active:section=='discuss'}"><a href="/discuss"><i class="icon-time"></i>Election News</a></li><li class="divider-vertical"></li><li><a href="https://github.com/filearts/plunker"><i class="icon-bell"></i>Candidate</a></li></ul></div>
             </div>
         </div>
    </div>
  <div  class="container" >
   <ul class="nav nav-pills">
    <li class="active">
    <a href="#">Popular</a>
    </li>
    <li><a href="#">Trending</a></li>
    <li><a href="#">Latest</a></li>
    </ul>
   </div>

    <script src="~/Scripts/jquery.js"></script>
    <script src="~/Scripts/bootstrap-dropdown.js"></script>
    <script src="~/Scripts/Collapse.js"></script>
</body>
</html>

ブートストラップのドキュメントから:トップに固定.navbar-fixed-topを追加し、<body>に少なくとも40pxのパディングを追加して、その下の非表示領域を考慮してください。これは、コアブートストラップCSSの後、オプションのレスポンシブCSSの前に必ず追加してください。
cms_mgr

回答:


215

これはpadding、の上部にいくつか追加することで処理され<body>ます。

あたりのようにブートストラップのマニュアル.navbar-fixed-top独自の値を試してみるか、下に私たちのスニペットを使用します。ヒント:デフォルトでは、navbarある50px高いです。

  body {
    padding-top: 70px;
  }

また、この例のソースを見て、を開きstarter-template.cssます。


1
レスポンシブcssと通常のcssの間に60pxのパディングを追加しましたが、うまく機能しました
Ajay Beniwal

1
問題は..カスタマイズリンクを介してブートストラップをカスタマイズした場合..レスポンシブcssを個別に取得しない...したがって、2つの宣言の「間に」これを提供する方法はありません。また、このadd-some-tag-between-my-normal-and-sensitive-cssアドバイスは、ちょっとハックっぽいようです。そうじゃない?これよりも優れたソリューションが必要です。
VJ。

LESSを使用している場合は、ブートストラップ変数@ navbar-heightを使用して、ナビゲーションバーの高さを見つけます。
ヤンキー

3
これは解決策というよりは回避策です。これはページの上部では役立ちますが、アンカーなどはまだ機能しません。アンカーを使用してサブセクションにスクロールすると、サブセクションのタイトルがナビゲーションバーの後ろに表示されます。
mastov

1
なぜこれが最初から起こっているのですか?それはどこからともなく起こったように私に起こったばかりであり、私はそれを最初に破った原因をまだ見つけることができません。
テイラーブラウン

37

あなたが持っている問題は、上部の固定navbarが持っている動的な高さに関連していると思います。たとえば、ユーザーがログインするとき、何らかの " Hello [ユーザー名] " を表示する必要があります。名前が広すぎる場合、ナビゲーションバーは高さを使用する必要があるため、このテキストはナビゲーションバーメニューと重なりません。以下のようナビゲーションバーがスタイル「が位置:固定」隠されてしまう、その下のボディ滞在し、それの背の部分をあなたがする必要があるので、「動的」上部のたびにパディングを変更するナビゲーションバーを以下に起こる高さの変更ケースシナリオ:

  1. ページがロード/再ロードされます。
  2. これが別のレスポンシブブレークポイントに到達する可能性があるため、ブラウザーウィンドウのサイズが変更されます。
  3. ナビゲーションバーのコンテンツは、高さの変化を引き起こす可能性があり、このように直接または間接的に修飾されます。

この動的性は通常のCSSではカバーされないため、ユーザーがJavaScriptを有効にしている場合にのみ、この問題を解決する1つの方法を考えることができます。ケースシナリオ1および2を解決するには、次のjQueryコードスニペットを試してください。ケースシナリオ3の場合は、ナビゲーションバーのコンテンツを変更した後、必ずonResize()関数を呼び出してください。

var onResize = function() {
  // apply dynamic padding at the top of the body according to the fixed navbar height
  $("body").css("padding-top", $(".navbar-fixed-top").height());
};

// attach the function to the window resize event
$(window).resize(onResize);

// call it also when the page is ready after load or reload
$(function() {
  onResize();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>


これは私が探していたものです。ウィンドウの幅を保存し、垂直方向のサイズ変更のみが変更されたかどうかを確認することで最適化しました。
Ripside 2016年

20

固定の前に空のナビゲーションバーを定義するだけで、必要なスペースが作成されます。

<nav class="navbar navbar-default ">
</nav>
<nav class="navbar  navbar-default navbar-fixed-top ">
     <div class="container-fluid">
// Your menu code 
     </div>
</nav>

8
これは厄介な方法です。
DotSlashCoding 2016

閉じるが、実際のナビゲーションバーのアイテムの折り返しは考慮されない-メニューをすべて複製しない限り。
Ripside 2016年

@DotSlashCodingに同意すると、このアプローチは適切なコーディング方法ではありません(理由もなくメンテナンス性テストに失敗します)。このエキストラnavbarが何をするかはすぐにはわかりません。
fragilewindows 2016

実用的でクール。また、この問題のすべての解決策は厄介だと思います。
de。

8

これは、navbar-fixed-topクラスでnavbarがを取得するために発生しposition:fixedます。これにより、ドキュメントフローからnavbarが削除さ、navbarの後ろのスペースがボディから離れます。

値を持つ要件に基づいて、padding-topまたはに適用する必要があります。(または異なる値で遊んでください)margin-topcontainer>= 50px

基本的なブートストラップnavbarの高さはおよそ40pxです。あなたが与えるのであればpadding-topまたはmargin-top50px 以上、常にあなたの間の呼吸スペースがありますコンテナーとナビゲーションバーを。


6

私もこの問題を抱えていましたが、スクリプトなしでCSSのみを使用して解決しました。まず、BootstrapのWebサイトで説明されている60pxに設定して、固定メニューの推奨パディングトップをフォローします。次に、メニューのサイズが変更されるカットオフポイントでパディングのサイズを変更する3つのメディアタグを追加しました。

<style>      
    body{
        padding-top:60px;
    }
    /* fix padding under menu after resize */
    @media screen and (max-width: 767px) {
        body { padding-top: 60px; }
    }
    @media screen and (min-width:768px) and (max-width: 991px) {
        body { padding-top: 110px; }
    }
    @media screen and (min-width: 992px) {
        body { padding-top: 60px; }
    }
</style>

メニューの幅が768から991の場合、レイアウトのメニューロゴと<li>オプションにより、メニューが2行に折り返されます。したがって、メニューがコンテンツをカバーしないように、パディングトップを調整する必要がありました。

お役に立てれば...


6

私はこのスレッドが古いことを知っていますが、ちょうどその問題page-headerに巻き込まれ、ナビゲーションの下で自分のページのクラスを使用するだけで修正しました。また、<nav>代わりにタグを使用しました<div>が、異なる動作をするかどうかはわかりません。

page-headerページのコンテナとして使用すると、が提供<body>するデフォルトのスペースに同意できない場合にのみ、をいじる必要がなくなりpage-headerます。

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>



   <div class="container-fluid">
        <nav class="navbar navbar-default navbar-fixed-top">
    
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#">Bootstrap</a>
            </div>
            <div id="navbar" class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li class="active"><a href="#">Home</a></li>
                    <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
                            <ul class="dropdown-menu">
                                <li><a href="#">Action</a></li>
                                <li><a href="#">Another action</a></li>
                                <li><a href="#">Something else here</a></li>
                                <li role="separator" class="divider"></li>
                                <li class="dropdown-header">Nav header</li>
                                <li><a href="#">Separated link</a></li>
                                <li><a href="#">One more separated link</a></li>
                            </ul>
                        </li>
                </ul>
                <div class="navbar-right">
                </div>
            </div>
        </nav>
    </div>
    <div class="page-header">
        <div class="clearfix">
            <div class="col-md-12">
                <div class="col-md-8 col-sm-6 col-xs-12">
                    <h1>Registration form <br /><small>A Bootstrap template showing a registration form with standard fields</small></h1>
                </div>
            </div>
        </div>
    </div>
        <div class="container">
        <div class="row">
            <form role="form">
                <div class="col-lg-6">
                    <div class="well well-sm"><strong><span class="glyphicon glyphicon-asterisk"></span>Required Field</strong></div>
                    <div class="form-group">
                        <label for="InputName">Enter Name</label>
                        <div class="input-group">
                            <input type="text" class="form-control" name="InputName" id="InputName" placeholder="Enter Name" required>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="InputEmail">Enter Email</label>
                        <div class="input-group">
                            <input type="email" class="form-control" id="InputEmailFirst" name="InputEmail" placeholder="Enter Email" required>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="InputEmail">Confirm Email</label>
                        <div class="input-group">
                            <input type="email" class="form-control" id="InputEmailSecond" name="InputEmail" placeholder="Confirm Email" required>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="InputMessage">Enter Message</label>
                        <div class="input-group">
                            <textarea name="InputMessage" id="InputMessage" class="form-control" rows="5" required></textarea>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                        </div>
                    </div>
                    <input type="submit" name="submit" id="submit" value="Submit" class="btn btn-info pull-right">
                </div>
            </form>
    </div>


3

私はjqueryを使用してそれを解決しました

<script type="text/javascript">
$(document).ready(function(e) {
   var h = $('nav').height() + 20;
   $('body').animate({ paddingTop: h });
});
</script>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.