부트 스트랩 CSS는 navbar navbar-fixed-top 아래 컨테이너 부분을 숨 깁니다.


127

나는 Bootstrap으로 프로젝트를 구축 중이며 약간의 문제에 직면하고 있습니다 .Nav-top 아래에 컨테이너가 있습니다. 내 문제는 내 컨테이너의 일부가 nav-top 헤더 아래에 숨겨져 있다는 것입니다 .I do n't want to use top-margin with 컨테이너. Pls는 IM이 문제에 직면 한 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>

부트 스트랩 문서에서 : Fixed to top .navbar-fixed-top을 추가하고 <body>에 최소 40px 패딩을 추가하여 그 아래의 숨겨진 영역을 고려해야합니다. 핵심 Bootstrap CSS 뒤와 선택적 반응 형 CSS 앞에 추가해야합니다.
cms_mgr 2013

답변:


215

이것은 몇 가지를 추가하여 처리 padding의 정상에 <body>.

에 부트 스트랩의 문서.navbar-fixed-top , 자신의 가치를 시도하거나 아래의 코드 조각을 사용합니다. 팁 : 기본적으로 navbar50px높습니다.

  body {
    padding-top: 70px;
  }

또한,의 소스를 살펴 받아 이 예 와 오픈 starter-template.css.


1
나는 반응 형 CSS와 일반 CSS 사이에 60px 패딩을 추가했고 잘 작동했습니다
Ajay Beniwal

1
문제는 .. 내가 사용자 정의 링크를 통해 부트 스트랩을 사용자 정의하는 경우 .. 반응 형 CSS를 별도로 얻지 못하므로 두 선언 사이에 이것을 제공 할 방법이 없습니다. 또한 내 정상과 반응 형 css 조언 사이에 추가 태그가 추가되었습니다. 그렇지 않습니까? 이것보다 더 나은 해결책이 있어야합니다.
VJ.

LESS를 사용하는 경우 부트 스트랩 변수 @ navbar-height를 사용하여 navbar 높이를 찾으십시오.
yankee

3
이것은 해결책 이라기보다는 해결 방법에 가깝습니다. 페이지 상단에는 도움이되지만 앵커 등은 여전히 ​​작동하지 않습니다. 앵커를 사용하여 하위 섹션으로 스크롤하면 하위 섹션의 제목이 탐색 모음 뒤에 있습니다.
mastov

1
왜 이런 일이 일어나기 시작하는지 아는 사람이 있습니까? 그것은 갑자기 나에게 일어나기 시작했고 갑자기 시작된 것의 근원을 여전히 찾을 수 없습니다.
Taylor Brown

37

나는 당신이 가진 문제 가 상단 의 고정 된 navbar 가 가진 동적 높이와 관련이 있다고 생각합니다 . 예를 들어, 사용자가 로그인 할 때 일종의 " Hello [User Name] " 을 표시해야 하며 이름이 너무 넓 으면 이 텍스트가 navbar 메뉴 와 겹치지 않도록 navbar에 더 많은 높이를 사용해야 합니다. 는 AS 네비게이션 바는 스타일 "이 위치 : 고정 "숨겨진된다, 그 아래 몸 숙박 및 그것의 키 부분을 당신이 필요하므로 "동적"상단에있는 때마다 패딩을 변경 네비게이션 바의 다음에 일어날 높이 변경 사례 시나리오 :

  1. 페이지가로드 / 다시로드됩니다.
  2. 다른 응답 중단 점에 도달 할 수 있으므로 브라우저 창 크기가 조정됩니다.
  3. 네비게이션 바 의 콘텐츠는 높이 변화를 야기 할 수이로 직접 또는 간접적으로 수정됩니다.

이 역학은 일반 CSS에서 다루지 않으므로 사용자가 JavaScript를 활성화 한 경우이 문제를 해결할 수있는 한 가지 방법 만 생각할 수 있습니다 . 다음 jQuery 코드 스 니펫을 사용하여 케이스 시나리오 1과 2를 해결하십시오. 시나리오 3의 경우 navbar 내용이 변경된 후 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 2010 년

20

고정 된 것보다 먼저 빈 navbar를 정의하면 필요한 공간이 생성됩니다.

<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

닫기,하지만 모든 메뉴를 복제하지 않는 한 실제 navbar의 항목 래핑을 고려하지 않습니다.
Ripside

@DotSlashCoding에 동의합니다.이 접근 방식은 좋은 코딩 방법이 아닙니다 (좋은 이유없이 유지 관리 테스트에 실패 함). 이 추가 기능 navbar이 무엇을하는지 즉시 명확 하지 않습니다.
fragilewindows

실용적이고 시원합니다. 나는 또한이 문제에 대한 모든 해결책이 불쾌하다고 생각합니다.
드.

8

함께하기 때문에 발생 navbar-fixed-top클래스 네비게이션 바의를 가져옵니다 position:fixed. 이것은 차례로 문서 흐름에서 navbar를 제거하고 본문은 뒤에 공간을 차지합니다. 하고 navbar 의 .

당신은 적용 할 필요가 padding-top또는 margin-top당신에 container, 가치와 요구 사항에 기반을>= 50px . (또는 다른 값으로 장난)

기본 부트 스트랩 navbar 는 높이가 40px. 당신이주는 그래서 경우 padding-top또는 margin-top50px 이상, 당신은 항상 사이의 호흡 공간이됩니다 컨테이너와 네비게이션 바있다.


6

나도이 문제가 있었지만 스크립트없이 CSS 만 사용하여 해결했습니다. 부트 스트랩 웹 사이트에 설명 된 60px로 설정하여 고정 메뉴에 권장되는 패딩 상단을 따르는 것으로 시작합니다. 그런 다음 메뉴 크기도 조정되는 컷오프 지점에서 패딩 크기를 조정하는 세 개의 미디어 태그를 추가했습니다.

<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> 옵션이 메뉴를 두 줄로 줄 바꿈하게합니다. 따라서 메뉴가 콘텐츠를 덮지 않도록 패딩 상단을 조정해야했기 때문에 110px입니다.

도움이 되었기를 바랍니다...


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.