thanh điều hướng hàng đầu chặn nội dung hàng đầu của trang


296

Tôi có mã Bootstrap Twitter này

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

Nhưng khi tôi đang xem phần đầu của trang, thanh điều hướng sẽ chặn một số nội dung ở gần đầu trang. Bất kỳ ý tưởng nào về cách làm cho nó đẩy phần còn lại của nội dung xuống thấp hơn khi phần trên cùng của trang được xem để nội dung không bị chặn bởi thanh điều hướng?



2
@ user2428107 Câu hỏi đó đã được đăng sau đó.
jazzpi

Câu trả lời:


254

Thêm vào CSS của bạn:

body { 
    padding-top: 65px; 
}

Từ các tài liệu Bootstrap :

Thanh điều hướng cố định sẽ che phủ nội dung khác của bạn, trừ khi bạn thêm phần đệm vào phần trên cùng của thân máy.


11
Xem câu trả lời bổ sung dưới đây của @Spajus để biết cách mã hóa mã này cho Bootstrap đáp ứng
Jason Capriotti

4
Chắc chắn cuộn với câu trả lời khác với một chút cô đọng hơn với @media (min-width: 980px) {body {padding-top: 60px; }}
Ted

3
Mặc dù các câu trả lời khác giải quyết vấn đề này một cách hùng hồn hơn, đây là câu trả lời chính thức như được ghi chú trong tài liệu Bootstrap cho liên kết
Caffeinius

1
Nó sẽ hoạt động như thế nào nếu người dùng có màn hình hẹp hơn hoặc đơn giản là thay đổi kích thước cửa sổ? Các nội dung trên cùng sẽ bị chặn lại bởi phần thanh điều hướng mở rộng.
Konrad Viltersten

366

Thêm một phần đệm như thế là không đủ nếu bạn đang sử dụng bootstrap đáp ứng. Trong trường hợp này khi bạn thay đổi kích thước cửa sổ của mình, bạn sẽ có một khoảng cách giữa đầu trang và thanh điều hướng. Một giải pháp thích hợp trông như thế này:

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

19
Hoàn hảo. Điều này thực sự nên được tích hợp vào bootstrap bằng cách nào đó. Bạn nên rẽ nhánh và gửi yêu cầu kéo.
brittohalloran

1
Giải pháp tốt, nhưng vẫn còn một cái gì đó không được giải quyết. Hãy xem câu hỏi này tôi vừa thực hiện và xem có ai có thể giúp đỡ không. stackoverflow.com/questions/12763707/
trộm

27
Thậm chí ngắn gọn hơn: @media (min-width: 981px) {body {padding-top: 60px; }}
Ted

4
@Ted đối với tôi nó phải là min-width:
980px

3
@white_gecko lol. Vâng. Đó là 980 muốn chỉ là một chút đặc biệt đặc biệt ;-)
Ted

143

Đối với bootstrap 3, lớp navbar-static-topthay vì navbar-fixed-topngăn chặn vấn đề này, trừ khi bạn cần hiển thị thanh điều hướng.


2
Điều này hoạt động tuy nhiên có thể để lại một số không gian trên thanh điều hướng. Bạn có thể cần sửa đổi site.css và xóa phần đệm 80px khỏi phần thân.
ZZZ

9
Tôi đã thử tất cả mọi thứ và đây là câu trả lời duy nhất có hiệu quả. Vì đây là giải pháp chung nhất và không phụ thuộc vào kích thước màn hình, nên đây là câu trả lời chính xác.
Blairg23

1
Điều này đã khắc phục vấn đề. Tại sao điều này hoạt động thay vì navbar-fixed-top?
hlyates 23/2/2015

Nó không hoạt động cho bootstap 3.3.4. Tôi thấy ví dụ điều hướng cố định tại trang web bootstrap getbootstrap.com/examples/navbar-fixed-top , Nó sử dụng padding-top
Alireza Fattahi

2
trong khi điều này hoạt động, nó làm cho thanh điều hướng tĩnh và không cố định. điều đó có nghĩa là khi bạn cuộn xuống thanh điều hướng sẽ biến mất ... ít nhất là đối với tôi điều đó không tốt.
tbkn23

62

một giải pháp tiện dụng hơn nhiều để bạn tham khảo, nó hoạt động hoàn hảo trong tất cả các dự án của tôi:

thay đổi 'div' đầu tiên của bạn từ

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

đến

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

28
Thanh điều hướng tĩnh biến mất khi cuộn.
Daniel C. Sobral

1
Re: @ DanielC.Sobral hồi đáp - bạn có thể chuyển nó ra cho cái đã được sửa trong js nếu nó cuộn ra khỏi đầu
obie

17

Tôi đang sử dụng jQuery để giải quyết vấn đề này. Đây là đoạn trích cho 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
Tôi đã sử dụng một hình ảnh trên thanh điều hướng và có vấn đề thực sự với nội dung bị ẩn. Điều này làm việc hoàn hảo! Cảm ơn!
Richard Varno

2
cảm ơn bạn rất nhiều vì giải pháp của bạn Câu trả lời này có tác dụng như một cơ duyên đối với tôi :) Tôi muốn thêm một điều. Khi bạn tải trang, phần thân được đặt lên trên cùng trước khi nó tự động điều chỉnh vì jquery không chạy ngay lập tức. Để làm cho nó mượt mà hơn, tôi đã thêm phần này vào phần thân CSS {padding-top: // chiều cao ban đầu của thanh điều hướng của tôi; } Điều này giúp chuyển tiếp suôn sẻ! Cám ơn bạn một lần nữa!
AAA

1
Cảm ơn đã truyền cảm hứng cho một giải pháp lập trình! Bây giờ tôi có một triển khai làm việc tuyệt vời trong GWT với mã được cấu trúc tốt được đóng gói tốt ... nhờ thiếu Javascript ;-)
Alex Worden

9

Tôi đã thành công với việc tạo ra một thanh điều hướng không cố định giả ngay trước thanh điều hướng cố định thực sự của mình.

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

Khoảng cách hoạt động tuyệt vời trên tất cả các kích thước màn hình.


Tôi nghĩ rằng đây là câu trả lời lúc đầu và tất cả đã sẵn sàng để đưa ra một upvote. Nhưng sau đó tôi nhận ra nó không hoạt động khi kích thước đủ hẹp để nó xếp các nút menu. :-(
Steve In CO

Bạn đúng nó sẽ không hoạt động với ngăn xếp menu mà không cần mã bổ sung. Tôi thường chỉ giữ các thanh menu của mình ở một dòng độ cao và biến các tùy chọn menu thành nút hamburger khi kích thước thu hẹp.
Jason Butler

tôi không biết tại sao, nhưng điều này hoạt động. bạn có thể giải thích lý do tại sao nó hoạt động?
an ninh đỏ

Ý tưởng tuyệt vời! vì nó hữu ích khi một số trang có thanh điều hướng và một số thì không, vì không thể phân biệt được tệp css.
Laurent

Điều này chắc chắn là con đường để đi. Nó hoạt động trên tất cả các thiết bị, ngay cả khi thanh điều hướng bị vỡ thành hai dòng. +1

7

Trong dự án của tôi bắt nguồn từ hướng dẫn MVC 5, tôi thấy rằng việc thay đổi phần đệm cơ thể không có hiệu quả. Sau đây làm việc cho tôi:

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

Nó giải quyết các trường hợp thanh điều hướng gấp thành 2 hoặc 3 dòng. Điều này có thể được chèn vào bootstrap.css ở bất cứ đâu sau thân dòng {lề: 0; }



4

Như đã thấy trong ví dụ này từ Twitter, hãy thêm phần này trước dòng bao gồm các khai báo kiểu phản hồi:

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

Thích như vậy:

<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

với thanh điều hướng mặc định, mọi thứ đều hoạt động tốt, nhưng nếu bạn đang sử dụng navbar-fixed-top, bạn phải bao gồm phần thân kiểu tùy chỉnh {padding-top: 60px;} nếu không nó sẽ chặn nội dung bên dưới.


3
Điều này không thêm bất kỳ thông tin nào chưa có trong các câu trả lời khác.
Tom Zych

2

Hai vấn đề sẽ xảy ra ở đây:

  1. Tải trang (ẩn nội dung)
  2. Các liên kết nội bộ như thế này sẽ cuộn lên trên cùng và được ẩn bởi thanh điều hướng:
<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! -->

Bootstrap 4 w / liên kết trang nội bộ

Để sửa lỗi 1), như Martijn Burger đã nói ở trên, mẫu khởi động bootstrap v4 css sử dụng:

body {
  padding-top: 5rem;
}

Để khắc phục 2) kiểm tra vấn đề này . Mã này chủ yếu hoạt động (nhưng không phải trên lần nhấp thứ 2 của cùng một hàm băm):

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

Mã này hoạt hình Một liên kết với jQuery (không phải jQuery mỏng):

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

Giải pháp tốt nhất mà tôi tìm thấy cho đến nay, không liên quan đến chiều cao và điểm dừng mã hóa cứng là thêm một <nav...thẻ phụ vào đánh dấu.

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

Bằng cách làm theo cách này, các @mediađiểm dừng giống hệt nhau, chiều cao giống hệt nhau (với điều kiện bạn navbar-brandlà đối tượng cao nhất trong navbarnhưng bạn có thể dễ dàng thay thế một yếu tố khác trong khôngfixed-top điều hướng.

Trường hợp thất bại là với trình đọc màn hình hiện sẽ trình bày 2 navbar-brandyếu tố. Điều này chỉ ra sự cần thiết của một not-for-srlớp để ngăn phần tử đó hiển thị cho trình đọc màn hình. Tuy nhiên, lớp đó không tồn tại https://getbootstrap.com/docs/4.0/utilities/screenreaders/

Tôi đã cố gắng bù đắp cho vấn đề trình đọc màn hình aria-hidden="true"nhưng https://www.accessibility-developer-guide.com/examples/sensible-aria-usage/hidden/ dường như cho thấy điều này có thể sẽ không hoạt động khi trình đọc màn hình trong chế độ lấy nét, dĩ nhiên là lần duy nhất bạn thực sự cần nó để làm việc ...


1

sử dụng percentagelà giải pháp tốt hơn nhiều pixels.

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

Nếu cần bạn vẫn có thể rõ ràng bằng cách thêm khác nhau breakpointsnhư được đề cập trong câu trả lời khác bằng cách@spajus


1

EDIT: Giải pháp này không khả thi đối với các phiên bản Bootstrap mới hơn, trong đó các lớp top-navverse-inverse và navbar-static-top không có sẵn.

Sử dụng MVC 5, cách tôi sửa lỗi của tôi, chỉ đơn giản là thêm Site.css của riêng tôi, được tải sau các dòng khác, với dòng sau: body{padding: 0}

và tôi đã thay đổi mã vào đầu _Layout.cshtml, thành:

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

navbar-static-topkhông được xác định trong Bootstrap4. Cũng không phảinavbar-inverse
thuyền viên

Tôi đoán câu trả lời này là lỗi thời, sau đó. Tôi sẽ thêm một ghi chú cho câu trả lời.
Ultroman the Tacoman

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

Nếu thanh điều hướng của bạn ở trên cùng của trang ban đầu, hãy đặt giá trị thành 0. Nếu không, hãy đặt giá trị cho data-offset-top giá trị của nội dung phía trên thanh điều hướng của bạn.

Trong khi đó, bạn cần sửa đổi cssnhư vậy:

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


0

bạn nên thêm

#page {
  padding-top: 65px
}

để không phá hủy một footer dính hoặc cái gì khác


-1

Thêm vào JS của bạn:

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

Điều này sẽ không hoạt động nếu cửa sổ được thay đổi kích thước vì phần đệm của bạn chỉ được áp dụng tại tài liệu sẵn sàng.
thuyền viên

-2

bạn có thể đặt lề dựa trên độ phân giải màn hình

@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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.