트위터 부트 스트랩 navbar 고정 상단 겹치는 사이트


347

내 사이트에서 부트 스트랩을 사용하고 있으며 탐색 바 고정 상단에 문제가 있습니다. 일반 탐색 메뉴를 사용하면 모든 것이 정상입니다. 그러나 navbar fixed top으로 전환하려고하면 사이트의 다른 모든 콘텐츠가 navbar가없고 navbar가 겹치는 것처럼 위로 이동합니다. 다음은 기본적으로 내가 배치 한 방법입니다.

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

부트 스트랩 예제를 정확하게 복사하려고했지만 navbar fixed top을 사용할 때만이 문제가 발생합니다. 내가 뭘 잘못하고 있죠?

답변:


527

당신의 대답은 문서에 옳습니다 .

바디 패딩 필요

추가하지 않는 고정 메뉴 바는 다른 내용을 오버레이됩니다 padding의 정상에 <body>. 자신의 가치를 시험하거나 아래의 스 니펫을 사용하십시오. 팁 : 기본적으로 탐색 모음의 높이는 50 픽셀입니다.

body { padding-top: 70px; }

이를 반드시 확인 핵심 부트 스트랩 CSS.

과의 부트 스트랩 4 문서 ...

고정 탐색 막대는 position : fixed를 사용합니다. 즉, DOM의 일반적인 흐름에서 가져오고 다른 요소와 겹치지 않도록 사용자 정의 CSS (예 : 패딩 탑)가 필요할 수 있습니다.


16
그러나 창을 최소화 할 때
탐색

5
"핵심 Bootstrap CSS 이후에 그리고 선택적 반응 형 CSS 앞에 이것을 추가하지 않기"때문에 아마도 40px 후에 나타납니다.
collimarco

1
이 답변은 사실이지만 40px 패딩을 반응 형 스타일링으로 만들 때만 효과적입니다 (Dan 또는 Nick의 답변 참조).
Tony Bathgate

1
패딩 (또는 다른 것)을 추가하지 않으려면 @ qub1n의 답변을 참조하십시오.
scharfmn

2
@JerSchneid w3schools.com의 navbar-fixed-top에 대한 예제는 동일한 동작을 보여줍니다. 나는 그것을 버그라고 생각합니다.
Tony Martin

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 가져 오기 아래로 이동하면 본문 패딩 메뉴 표시 줄에 추가 줄이 계속 표시됩니다.
slothbear

Twitter Bootstrap 2.3.2를 사용하고 있습니다. doc에 더 이상 40px 제안이 포함되어 있지 않지만 여전히 필요성이 있음을 알았습니다.
slothbear

1
Eh, 40px 제안은 여전히 ​​거기에 있습니다. 댓글 스팸으로 죄송합니다.
slothbear

3
by Bootstrap 3. + body { padding-top: 40px; }로 충분
andilabs

8
이 솔루션은 올바른 길을 가고 있습니다. 문서화 된 것처럼 몸에 패딩을 넣는 것만으로는 충분하지 않습니다. 미디어 쿼리의 올바른 조합을 사용하면 navbar가 브라우저 크기 조정으로 래핑되므로 원하는 효과를 얻을 수 있습니다. 필자의 경우 1148px, 900px 및 768px 너비로 패딩을 변경해야합니다.
John McCann

34

참고로 훨씬 편리한 솔루션으로 모든 프로젝트에서 완벽하게 작동합니다.

첫 줄을 바꾸다

.navbar.navbar-fixed-top

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

1
너 방금 트롤하고 있니? 아니면 내가 뭔가를 감독 했습니까?
chyno

이것은 어떻게 10 개의 공감대를 얻었습니까? navbar-default는 색상과 배경 색상 만 추가합니다.
Denny Mueller

2
navbar-static-top은 변화이며 나를 위해 일했습니다. 감사!
kevthanewversi

1
navbar-static-top도 나를 위해 고쳤습니다. 최소한의 방해.
xpagesbeast

3
탐색 표시 줄이 항상 화면 상단에 표시 될 필요가없는 경우 작동합니다. navbar-static-top은 고정되어 있지 않으며 화면과 함께 스크롤됩니다. 이것은 다른 navbar 스타일을 보여줍니다 : getbootstrap.com/docs/3.3/examples/navbar-static-top
Victor Ionescu

26

이 문제는 알려져 있으며 트위터 부트 스트랩 사이트에 해결 방법이 있습니다.

탐색 표시 줄을 부착 할 때는 아래의 숨겨진 영역을 고려해야합니다. 에 40px 이상의 패딩을 추가하십시오 <body>. 핵심 Bootstrap CSS 이후 및 선택적 반응 형 CSS 전에 이것을 추가하십시오.

이것은 나를 위해 일했다 :

body { padding-top: 40px; }

9
그러나 창을 최소화 할 때
탐색

1
예,이 솔루션은 모바일 화면 크기에서 제대로 작동하지 않습니다. 실제로 휴대 전화의 와이드 스크린 모드에서는 기본적으로 사이트를 쓸모 없게 만듭니다.
Tony Bathgate

어떤 선택적 반응 형 CSS? 나는 오직 하나의 (코어) 부트 스트랩 CSS를 사용했다. 나는 3.7.x 이상의 버전을 말하는 것이다. UPWARDS; 3.7.x 이전 버전에서 다른 CSS로 분할 되었습니까?
joedotnot

26

@Ryan, 맞습니다. 높이를 하드 코딩하면 사용자 정의 탐색 표시 줄의 경우 작동하지 않을 수 있습니다. 이것은 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()했지만 그렇지 않으면 매우 유용하고 문제를 해결했습니다. 감사합니다.
tylerwal

탐색 표시 줄의 높이가 고정되어 있지 않으면 필요한 것입니다.
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

그러나 navbar 위에 빈 공백이 있습니다.
user2075599

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는 더 많은 찬사를받을 자격이 있고, 완벽하게 잘 작동하며, 추악하지만 못
생겼습니다

고마워, 이것은 상단 패딩이나 여백 픽셀보다 훨씬 더 우아한 솔루션입니다 ...
Pedro Reis

3
불행히도 탐색이 1 열에 들어갈 때 모바일에서는 작동하지 않습니다.
Pedro Reis

16

Bootstrap 4 솔루션은 모든 프로젝트에서 완벽하게 작동합니다.

첫 줄을 바꾸다

navbar-fixed-top

sticky-top

부트 스트랩 문서 참조

시간에 대해 그들은 이것을 올바르게했다 : D


일부 사람들은 페이지를 아래로 스크롤 할 때 링크를보기 위해 고정 상단을 사용할 수 있습니다. 당신이 :) 걱정하지 않을 경우이 기능이 유용 할 수 있지만
knowledge_is_power

또한 .sticky-top은 position : sticky를 사용하며 모든 브라우저에서 완벽하게 지원되는 것은 아닙니다.
라이브 사랑

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'을 조정하여 위 또는 아래로 이동할 수 있습니다. 크기 조정 전후에 탐색 표시 줄의 내용 크기에 관계없이 작동하는 것 같습니다.

다른 사람들이 이것에 대해 어떻게 생각하는지 궁금합니다. 생각을 나누십시오. (반복하지 않기로 리팩토링됩니다, btw.) jQuery를 사용하는 것 외에도 이런 식으로 문제에 접근하지 않는 다른 이유가 있습니까? 나는 다음과 같은 보조 navbar로 작업하고 있습니다.

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

추신 : 위의 부트 스트랩 2.3.2에 있습니다-3.x에서 작동합니까 일반 클래스 이름이 유지되는 한 실제로는 부트 스트랩과 독립적으로 작동해야합니까?

편집 : 다음은 동적 크기의 두 개의 반응 형 고정 고정 탐색 막대를 처리하는 완전한 jquery 함수입니다. user-top, admin-top 및 contentwrap : 3 개의 HTML 클래스가 필요합니다 (또는 ID를 사용할 수 있음).

$(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'
        });
});

참고로, 나는 이것을 사용하고 있으며 훌륭하게 작동하지만 어떤 이상한 이유 때문에 두 개의 탐색 표시 줄, 하나의 일반 크기 및 작은 화면의 경우 큰 화면에서만 작동합니까?
NaughtySquid

@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>

이렇게하면 바디의 상단 패딩이 자동으로 조정됩니다.


귀하의 예제에서 높이에 대한 두 번째 참조를 $ ( '# topnavbar'). height ()으로 변경해야했는데 이것이 완벽하게 작동했습니다. 감사!
notruthless

1
의견 주셔서 감사합니다! 나는 그것을 대답으로 고쳤다.
Oliver Konig

이것은 PC, iOS, Android-모든 장치에서 작동하는 최고의 솔루션입니다. 다른 모든 하드 코딩 된 픽셀 값이거나 너무 길어서 모든 장치에서 작동하지는 않습니다.
Oracular Man

좋은 해결책. 계산에서 고려되지 않은 작은 오프셋이있었습니다. 내 탐색 표시 줄에 여백이 있었기 때문인 것 같습니다. 이것을 고려하기 위해 outerHeight () 호출에 대한 height () 호출을 변경하기로 선택했습니다.
레오나르도 산토스

4

Bootstrap 3. +의 경우 https://github.com/twbs/bootstrap/issues/1768에 따라 navbar-fixed-top 및 앵커 점프 겹침 문제를 해결하기 위해 다음 CSS를 사용합니다.

/* 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

2

이 클래스를 탐색 태그 안에 사용하십시오.

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

부트 스트랩 4


그것이 저와 다른 모든 사람들을 위해 일하고 있었기 때문에 왜 그것이 다운 투표되었는지 알 수 없습니다.
Kynginthenorth

맞습니다. 유일한 문제는 문서에서 ".sticky-top 유틸리티는 CSS의 위치를 ​​사용합니다. sticky는 모든 브라우저에서 완벽하게 지원되지 않습니다"
José


0

Nick Bisby의 대답에 덧붙여 HAML을 레일에 사용 하여이 문제가 발생하고 여기에 Roberto Barros의 수정 사항을 적용한 경우 :

"bootstrap_and_overrides.css"의 요구 사항을 다음과 같이 바 꾸었습니다.

= twitter-bootstrap-static / bootstrap.css.erb 필요

( https://github.com/seyhunak/twitter-bootstrap-rails/issues/91 참조 )

... 다음과 같이 require 문 앞에 body CSS를 넣어야합니다 .

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

require 문이 본문 CSS 앞에 있으면 적용되지 않습니다.


0

나는 이것을 할 것이다 :

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

이렇게하면 탐색 블록이 다운 페이지를 늘리지 않고 페이지 내용을 덮어야합니다.


-4

방금 navbar를

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

공상적인 호 커스 pocus는 없지만 작동했습니다 ..


답변이 명확하지 않아 문제를 해결하지 못했습니다. 무엇을 nav-? ??나타내는가?
fragilewindows
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.