페이지의 상단 내용을 차단하는 상단 탐색 모음


296

이 트위터 부트 스트랩 코드가 있습니다

  <div class='navbar navbar-fixed-top'>
    <div class='navbar-inner'>
      <div class='container'>
        <a class='btn btn-navbar' data-target='.nav-collapse' data-toggle='collapse'>
          <span class='icon-bar'></span>
          <span class='icon-bar'></span>
          <span class='icon-bar'></span>
        </a>
        <div class='nav-collapse'>
          <ul class='nav'>
            <li class='active'>
              <a href='some_url'>My Home</a>
            </li>
            <li>
              <a href='some_url'>Option 1 </a>
            </li>
            <li>
              <a href='some_url'>Another option</a>
            </li>
            <li>
              <a href='some_url'>Another option</a>
            </li>
          </ul>
        </div>
      </div>
    </div>
  </div>

그러나 페이지의 시작 부분을 볼 때 탐색 모음이 페이지 상단에있는 일부 내용을 차단합니다. 탐색 모음에 의해 콘텐츠가 차단되지 않도록 페이지 상단을 볼 때 나머지 콘텐츠를 아래로 내리는 방법에 대한 아이디어가 있습니까?



2
@ user2428107이 질문은 나중에 게시되었습니다.
— jazzpi

답변:


254

CSS에 추가하십시오.

body { 
    padding-top: 65px; 
}

로부터 부트 스트랩 문서 :

본문 상단에 패딩을 추가하지 않는 한 고정 탐색 메뉴가 다른 컨텐츠를 오버레이합니다.


11
반응 형 부트 스트랩을 위해 이것을 코딩하는 방법은 @Spajus의 추가 답변을 참조하십시오.
— Jason Capriotti

4
@media (min-width : 980px) {body {padding-top : 60px;로 좀 더 간결하게 다른 답변으로 확실히 굴립니다. }}
— Ted

3
다른 답변이 더 설득력이 문제를 해결 할 수 있지만,이 고정 Navbar의의의 부트 스트랩 문서에서 언급 한 바와 같이 공식 답변입니다 링크
— Caffeinius

1
사용자가 더 좁은 화면을 가지고 있거나 단순히 창 크기를 조정하면 어떻게 작동합니까? 확장 된 탐색 모음 섹션에 의해 최상위 컨텐츠가 다시 차단됩니다.
— Konrad Viltersten

366

반응 형 부트 스트랩을 사용하는 경우 이와 같은 패딩을 추가하는 것만으로는 충분하지 않습니다. 이 경우 창의 크기를 조정하면 페이지 상단과 탐색 모음 사이에 간격이 생깁니다. 적절한 해결책은 다음과 같습니다.

body {
  padding-top: 60px;
}
@media (max-width: 979px) {
  body {
    padding-top: 0px;
  }
}

19
완전한. 이것은 어떻게 든 부트 스트랩에 통합되어야합니다. 풀 요청을 포크하고 제출해야합니다.
— brittohalloran

1
좋은 해결책이지만 여전히 해결되지 않은 것이 있습니다. 내가 방금 만든이 질문을보고 누군가가 그것에 손을 줄 수 있는지보십시오. stackoverflow.com/questions/12763707/…
— ElPiter

27
더 간결하게 : @media (최소 너비 : 981px) {body {padding-top : 60px; }}
— Ted

4
@Ted 나를 위해 그것은 최소 너비이어야합니다 : 980px ;-)
— white_gecko 17:07에

3
@white_gecko lol. 네. 그 980은 조금 더 특별한 특별한 존재가되고 싶었습니다. ;-)
— Ted

143

부트 스트랩 3의 경우 항상 탐색 표시 줄이 필요하지 않으면 클래스 navbar-static-top대신 navbar-fixed-top이 문제 를 방지합니다.


2
그러나 이것은 탐색 표시 줄 위에 약간의 공간을 남길 수 있습니다. site.css를 수정하고 body에서 padding-top 80px를 제거해야 할 수도 있습니다.
— ZZZ

9
나는 모든 것을 시도했고 이것이 유일한 답이었습니다. 이것이 가장 일반적인 해결책이며 화면 크기에 의존하지 않기 때문에 정답입니다.
— Blairg23

1
문제가 해결되었습니다. navbar-fixed-top 대신 왜 작동합니까?
— hlyates

부트 탭 3.3.4에서는 작동하지 않았습니다. 부트 스트랩 사이트 getbootstrap.com/examples/navbar-fixed-top 에서 고정 탐색 예제를 봅니다 . 패딩 탑을 사용합니다.
— Alireza Fattahi

2
이것이 작동하는 동안 탐색 표시 줄을 고정적이고 고정되지 않습니다. 즉, 아래로 스크롤하면 탐색 표시 줄이 사라집니다 ... 적어도 나에게는 좋지 않습니다.
— tbkn23

62

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

첫 번째 'div'를 다음에서 변경하십시오.

<div class='navbar navbar-fixed-top'>

에

<div class="navbar navbar-default navbar-static-top">

28
스크롤하면 정적 탐색 표시 줄이 사라집니다.
— Daniel C. Sobral

1
재 : DanielC.Sobral 응답 @ - 그것은 정상 떨어져 스크롤하는 경우는 JS에서 고정 된 하나 그것을 전환 할 수
— 오비

17

이 문제를 해결하기 위해 jQuery를 사용하고 있습니다. 다음은 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);        
});

2
탐색 표시 줄 위에 이미지를 사용하고 내용이 숨겨지는 데 실제로 문제가있었습니다. 이것은 완벽하게 작동했습니다! 감사!
— Richard Varno

2
귀하의 솔루션에 감사드립니다. 이 대답은 나를 위해 매력처럼 작동했습니다. :) 한 가지를 추가하고 싶습니다. 페이지를로드하면 jquery가 즉시 실행되지 않기 때문에 본문이 자동으로 조정되기 전에 본문이 맨 위로 설정됩니다. 더 매끄럽게하기 위해 CSS body {padding-top에 이것을 추가했습니다 : // 처음 높이 navbar; } 이것은 부드러운 전환에 도움이됩니다! 다시 감사합니다!
— AAA

1
프로그래밍 방식의 솔루션에 영감을 주셔서 감사합니다! JavaWT가 부족하여 잘 캡슐화 된 잘 구조화 된 코드로 GWT에서 훌륭한 구현을하고 있습니다. ;-)
— Alex Worden

9

실제 고정 탐색 막대 바로 앞에 더미 고정되지 않은 탐색 막대를 만드는 데 성공했습니다.

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

간격은 모든 화면 크기에서 잘 작동합니다.


나는 이것이 처음에 답이라고 생각했고 모두 공감대를 제공하기로 결정했다. 그러나 크기가 좁아서 메뉴 버튼을 쌓을 수있을 때 작동하지 않는다는 것을 깨달았습니다. :-(
— Steve In CO

추가 코드가 없으면 메뉴 스태킹으로 작동하지 않습니다. 나는 보통 메뉴 막대를 한 줄 높이로 유지하고 크기가 좁을 때 메뉴 옵션을 햄버거 버튼으로 바꿉니다.
— Jason Butler

왜 그런지 모르겠지만 작동합니다. 왜 작동하는지 자세히 설명 할 수 있습니까?
— 적색 보안

좋은 생각이야! css 파일과 구별 할 수 없으므로 일부 페이지에 탐색 표시 줄이 있고 그렇지 않은 경우 유용합니다.
— Laurent

이것은 분명히 갈 길입니다. 탐색 표시 줄이 두 줄로 나뉘어도 모든 장치에서 작동합니다. +1

7

MVC 5 튜토리얼 에서 파생 된 프로젝트에서 바디 패딩을 변경해도 아무런 영향이 없음을 알았습니다. 다음은 나를 위해 일했습니다.

@media screen and (min-width:768px) and (max-width:991px) {
    body {
        margin-top:100px;
    }
}
@media screen and (min-width:992px) and (max-width:1199px) {
    body {
        margin-top:50px;
    }
}

탐색 표시 줄이 2 ~ 3 줄로 접히는 경우를 해결합니다. 이것은 라인 본문 {margin : 0; 이후의 bootstrap.css에 삽입 될 수 있습니다. }



4

Twitter 의이 예제 에서 볼 수 있듯이 반응 형 스타일 선언이 포함 된 행 앞에 이것을 추가하십시오.

<style> 
    body {
        padding-top: 60px;
    }
</style>

이렇게 :

<link href="Z/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<style type="text/css">
    body {
        padding-top: 60px;
    }
</style>
<link href="Z/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" />

2

와 네비게이션 바 네비게이션 바 기본 다 잘 작동하지만, 당신이 사용하는 경우 메뉴 바 고정 정상을 사용자 정의 스타일 본체 포함 할 필요가 {패딩 탑 : 60 픽셀을} 그렇지 않으면 컨텐츠 아래를 차단합니다.


3
아직 다른 답변에없는 정보는 추가하지 않습니다.
— Tom Zych

2

여기서 두 가지 문제가 발생합니다.

  1. 페이지로드 (콘텐츠 숨김)
  2. 이와 같은 내부 링크는 맨 위로 스크롤되고 탐색 표시 줄에 의해 숨겨집니다.
<nav>...</nav>              <!-- 70 pixels tall -->
<a href="#hello">hello</a>  <!-- click to scroll down -->
<hr style="margin: 100px">
<h1 id="hello">World</h1>   <!-- Help!  I'm 70 pixels hidden! -->

내부 페이지 링크가있는 부트 스트랩 4

1)을 수정하기 위해 Martijn Burger가 위에서 말했듯이 부트 스트랩 v4 스타터 템플릿 CSS는 다음을 사용합니다.

body {
  padding-top: 5rem;
}

2) 이 문제를 확인하십시오 . 이 코드는 대부분 작동하지만 동일한 해시의 두 번째 클릭에는 작동하지 않습니다.

window.addEventListener("hashchange", function() { scrollBy(0, -70) })

이 코드는 jQuery (slim jQuery 아님)를 사용하여 A 링크에 애니메이션을 적용합니다.

  // inline theme global code here
  $(document).ready(function() {
    var body = $('html,body'), NAVBAR_HEIGHT = 70;
    function smoothScrollingTo(target) {
      if($(target)) body.animate({scrollTop:$(target).offset().top - NAVBAR_HEIGHT}, 500);
    }
    $('a[href*=\\#]').on('click', function(event){
      event.preventDefault();
      smoothScrollingTo(this.hash);
    });
    $(document).ready(function(){
      smoothScrollingTo(location.hash);
    });
  })

2

지금까지 내가 찾은 최고의 솔루션은 하드 코딩 높이와 중단 점이 포함되지 않은 <nav...태그에 태그를 추가하는 것 입니다.

<nav class="navbar navbar-expand-md" aria-hidden="true">
    <a class="navbar-brand" href="#">Navbar</a>
</nav>
<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
    <a class="navbar-brand" href="#">Navbar</a>

이 방법으로 @media중단 점을 동일하게 설정하면 높이가 동일합니다 (단 navbar-brand, 키가 가장 큰 객체 navbar이지만 비 fixed-top네비게이션 바의 다른 요소를 쉽게 대체 할 수 있습니다) .

이것이 실패한 곳은 이제 스크린 리더로 2 가지 navbar-brand요소를 제시 합니다. 이는 not-for-sr해당 요소가 화면 판독기에 표시되지 않도록 하는 클래스가 필요함을 나타냅니다 . 그러나 해당 클래스는 존재하지 않습니다 https://getbootstrap.com/docs/4.0/utilities/screenreaders/

나는 함께 화면 판독기 문제를 보상하기 위해 노력했습니다 aria-hidden="true"하지만 https://www.accessibility-developer-guide.com/examples/sensible-aria-usage/hidden/는 화면 판독기가있는 경우이 아마 작동하지 않습니다 표시하는 것 초점 모드에서 실제로 작동하는 데 필요한 유일한 시간입니다 ...


1

사용 percentage하는 것보다 훨씬 더 나은 솔루션 pixels입니다.

body {
  padding-top: 10%; //This works regardless of display size.
}

필요한 경우 breakpoints다른 답변에서 언급 한 것처럼 다르게 추가하여 명시 적으로 나타낼 수 있습니다.@spajus


1

편집 : navbar-inverse 및 navbar-static-top 클래스를 사용할 수없는 최신 버전의 Bootstrap에는이 솔루션을 사용할 수 없습니다.

MVC 5를 사용하여 수정 한 방식은 다음 줄과 함께 내 Site.css를 추가하는 것입니다. body{padding: 0}

_Layout.cshtml의 시작 부분에서 코드를 다음과 같이 변경했습니다.

<body>
    <div class="navbar navbar-inverse navbar-static-top">
        <div class="container">
            @if (User.Identity.IsAuthenticated) {
                <div class="top-navbar">

navbar-static-topBootstrap4에 정의되어 있지 않습니다. 어느 쪽도 없습니다navbar-inverse
— boatcoder

그렇다면이 답변이 구식이라고 생각합니다. 답변에 메모를 추가하겠습니다.
— Ultroman the Tacoman

0
<div class='navbar' data-spy="affix" data-offset-top="0">

탐색 표시 줄이 원래 페이지 맨 위에 있으면 값을 0으로 설정하십시오. 그렇지 않으면 data-offset-top탐색 표시 줄 위의 컨텐츠 값으로 값을 설정하십시오 .

한편 다음 css과 같이 수정해야합니다 .

.affix{
  width:100%;
  top:0;
  z-index: 10;
}


0

당신은 추가해야합니다

#page {
  padding-top: 65px
}

끈적 끈적한 바닥 글이나 다른 것을 파괴하지 않기 위해


-1

JS에 추가하십시오.

jQuery(document).ready(function($) {
  $("body").css({
    'padding-top': $(".navbar").outerHeight() + 'px'
  })
});

안쪽 여백은 문서 준비시에만 적용되므로 창의 크기를 조정하면 작동하지 않습니다.
— 보트 코더

-2

화면 해상도에 따라 여백을 설정할 수 있습니다

@media screen and (min-width:768px) and (max-width:991px) {
body {
    margin-top:100px;
}

@media screen and (min-width:992px) and (max-width:1199px) {
  body {
    margin-top:50px;
  }
}

body{
  padding-top: 10%;
}

#nav{
   position: fixed;
   background-color: #8b0000;
   width: 100%;
   top:0;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.