bilah nav atas memblokir konten teratas halaman


296

Saya punya kode Bootstrap Twitter ini

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

Tetapi ketika saya melihat awal halaman, bilah nav memblokir beberapa konten yang ada di dekat bagian atas halaman. Adakah ide untuk membuatnya menekan sisa konten lebih rendah ketika bagian atas halaman dilihat sehingga konten tidak diblokir oleh bilah navigasi?



2
@ user2428107 Pertanyaan itu diposting kemudian.
jazzpi

Jawaban:


255

Tambahkan ke CSS Anda:

body { 
    padding-top: 65px; 
}

Dari dokumentasi Bootstrap :

Navbar tetap akan overlay konten Anda yang lain, kecuali jika Anda menambahkan padding ke bagian atas tubuh.


11
Lihat jawaban tambahan di bawah ini oleh @Spajus untuk cara membuat kode ini untuk Bootstrap responsif
Jason Capriotti

4
Gulung dengan jawaban lain dengan sedikit lebih ringkas dengan @media (min-width: 980px) {body {padding-top: 60px; }}
Ted

3
Sementara jawaban lain mengatasi ini dengan lebih fasih, ini adalah jawaban resmi sebagaimana tercantum dalam dokumentasi Bootstrap untuk tautan
Caffeinius

1
Bagaimana cara kerjanya jika pengguna memiliki layar yang lebih sempit atau hanya mengubah ukuran jendela? Konten paling atas akan diblokir lagi oleh bagian bilah nav yang diperluas.
Konrad Viltersten

366

Menambahkan padding seperti itu tidak cukup jika Anda menggunakan bootstrap responsif. Dalam hal ini ketika Anda mengubah ukuran jendela Anda, Anda akan mendapatkan celah antara bagian atas halaman dan navbar. Solusi yang tepat terlihat seperti ini:

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

19
Sempurna. Ini harus benar-benar diintegrasikan ke dalam bootstrap. Anda harus bercabang dan mengajukan permintaan tarik.
brittohalloran

1
Solusi yang bagus, tetapi masih ada sesuatu yang tidak terpecahkan. Lihatlah pertanyaan ini yang baru saja saya buat dan lihat apakah ada yang bisa membantu. stackoverflow.com/questions/12763707/…
ElPiter

27
Bahkan lebih ringkas: @ media (lebar minimum: 981px) {body {padding-top: 60px; }}
Ted

4
@Ted untuk saya itu harus min-width: 980px ;-)
white_gecko

3
@white_gecko lol. Ya. Yang 980 ingin menjadi sedikit istimewa khusus ;-)
Ted

143

Untuk bootstrap 3, kelas navbar-static-topbukannya navbar-fixed-topmencegah masalah ini, kecuali jika Anda memerlukan navbar untuk selalu terlihat.


2
Namun ini berfungsi mungkin meninggalkan ruang di atas navbar. Anda mungkin perlu memodifikasi site.css dan menghapus 80px padding-top dari tubuh.
ZZZ

9
Saya mencoba segalanya dan ini adalah satu-satunya jawaban yang berhasil. Karena ini adalah solusi paling umum dan tidak tergantung pada ukuran layar, ini harus menjadi jawaban yang benar.
Blairg23

1
Ini memperbaiki masalah. Mengapa ini berfungsi alih-alih navbar-fix-top?
hlyates

Itu tidak bekerja untuk bootstap 3.3.4. Saya melihat contoh nav tetap di situs bootstrap getbootstrap.com/examples/navbar-fixed-top , Menggunakan padding-top
Alireza Fattahi

2
sementara ini berfungsi, itu membuat navbar statis dan tidak diperbaiki. itu berarti bahwa ketika Anda gulir ke bawah navbar akan menghilang ... setidaknya bagi saya itu tidak baik.
tbkn23

62

solusi yang jauh lebih berguna untuk referensi Anda, ini berfungsi sempurna di semua proyek saya:

ubah 'div' pertama Anda dari

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

untuk

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

28
Navbar statis menghilang ketika bergulir.
Daniel C. Sobral

1
Re: @ DanielC.Sobral response - Anda dapat mengaktifkannya untuk yang tetap dalam js jika bergulir dari atas
obie

17

Saya menggunakan jQuery untuk mengatasi masalah ini. Ini cuplikan untuk 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
Saya menggunakan gambar di atas navbar dan mengalami masalah nyata dengan konten yang disembunyikan. Ini bekerja dengan sempurna! Terima kasih!
Richard Varno

2
terima kasih banyak atas solusinya. jawaban ini bekerja seperti pesona bagi saya :) Saya ingin menambahkan satu hal. Ketika Anda memuat halaman, tubuh diatur ke atas sebelum menyesuaikan sendiri secara otomatis karena jquery tidak berjalan secara instan. Untuk membuatnya lebih halus, saya menambahkan ini di tubuh CSS {padding-top: // ketinggian awal navbar saya; } Ini membantu dalam transisi yang lancar! Terima kasih lagi!
AAA

1
Terima kasih telah menginspirasi solusi programatik! Saya memiliki implementasi yang bagus sekarang di GWT dengan kode terstruktur yang terkapsulasi dengan baik ... terima kasih karena kurangnya Javascript ;-)
Alex Worden

9

Saya sudah sukses dengan membuat nav bar non-fix dummy tepat sebelum nav bar tetap saya yang sebenarnya.

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

Spasi bekerja dengan baik pada semua ukuran layar.


Saya pikir ini adalah jawabannya pada awalnya dan siap untuk memberikan dukungan. Tapi kemudian saya menyadari itu tidak berfungsi ketika ukurannya menjadi cukup sempit untuk membuatnya menumpuk tombol menu. :-(
Steve In CO

Anda benar, itu tidak akan bekerja dengan susunan menu tanpa kode tambahan. Saya biasanya hanya menyimpan bilah menu di satu garis ketinggian dan mengubah opsi menu menjadi tombol hamburger ketika ukurannya menyempit.
Jason Butler

Saya tidak tahu mengapa, tetapi ini berhasil. dapatkah Anda menjelaskan mengapa ini berhasil?
keamanan merah

Ide yang hebat! karena berguna ketika beberapa halaman memiliki navbar dan beberapa tidak, karena tidak mungkin untuk membedakan dari file css.
Laurent

Ini jelas cara untuk pergi. Ini bekerja pada semua perangkat, bahkan ketika navbar terbagi menjadi dua baris. +1

7

Dalam proyek saya yang berasal dari tutorial MVC 5 saya menemukan bahwa mengubah bantalan tubuh tidak berpengaruh. Berikut ini bekerja untuk saya:

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

Ini menyelesaikan kasus di mana navbar dilipat menjadi 2 atau 3 baris. Ini dapat dimasukkan ke dalam bootstrap.css di mana saja setelah baris body {margin: 0; }



4

Seperti terlihat pada contoh ini dari Twitter, tambahkan ini sebelum baris yang menyertakan deklarasi gaya responsif:

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

Seperti itu:

<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

dengan navbar navbar-default semuanya berfungsi dengan baik, tetapi jika Anda menggunakan navbar-fix-top Anda harus memasukkan custom style body {padding-top: 60px;} jika tidak, ia akan memblokir konten di bawahnya.


3
Ini tidak menambahkan informasi apa pun yang belum ada dalam jawaban lain.
Tom Zych

2

Dua masalah akan terjadi di sini:

  1. Memuat halaman (konten disembunyikan)
  2. Tautan internal seperti ini akan bergulir ke atas, dan disembunyikan oleh navbar:
<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 / tautan halaman internal

Untuk memperbaiki 1), seperti yang dikatakan Martijn Burger di atas, css template starter bootstrap v4 menggunakan:

body {
  padding-top: 5rem;
}

Untuk memperbaiki 2) lihat masalah ini . Sebagian besar kode ini berfungsi (tetapi tidak pada klik kedua hash yang sama):

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

Kode ini menjiwai tautan A dengan jQuery (bukan slim jQuery):

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

Solusi terbaik yang saya temukan sejauh ini, yang tidak melibatkan ketinggian dan breakpoint pengkodean yang sulit adalah menambahkan <nav...tag tambahan ke markup.

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

Dengan melakukannya dengan cara ini @mediabreakpoint identik, tingginya identik (asalkan Anda navbar-brandadalah objek tertinggi di navbartetapi Anda dapat dengan mudah mengganti elemen lain di non fixed-topnavbar.

Di mana ini gagal adalah dengan pembaca layar yang sekarang akan menyajikan 2 navbar-brandelemen. Ini menunjukkan perlunya not-for-srkelas untuk mencegah elemen tersebut muncul untuk pembaca layar. Namun kelas itu tidak ada https://getbootstrap.com/docs/4.0/utilities/screenreaders/

Saya telah mencoba untuk mengkompensasi masalah pembaca layar dengan aria-hidden="true"tetapi https://www.accessibility-developer-guide.com/examples/sensible-aria-usage/hidden/ tampaknya menunjukkan ini mungkin tidak akan berfungsi ketika pembaca layar dihidupkan. dalam mode fokus yang tentu saja satu-satunya saat Anda benar-benar membutuhkannya untuk bekerja ...


1

menggunakan percentageadalah solusi yang jauh lebih baik daripada pixels.

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

Jika perlu Anda masih bisa eksplisit dengan menambahkan berbeda breakpointsseperti yang disebutkan dalam jawaban lain oleh@spajus


1

EDIT: Solusi ini tidak dapat digunakan untuk versi Bootstrap yang lebih baru, di mana kelas atas navbar-inverse dan navbar-static-top tidak tersedia.

Menggunakan MVC 5, cara saya memperbaiki tambang, adalah dengan menambahkan Site.css saya sendiri, dimuat setelah yang lain, dengan baris berikut: body{padding: 0}

dan saya mengubah kode di awal _Layout.cshtml, menjadi:

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

navbar-static-toptidak didefinisikan dalam Bootstrap4. Tidak juganavbar-inverse
boatcoder

Saya kira jawaban ini sudah ketinggalan zaman. Saya akan menambahkan catatan pada jawabannya.
Ultroman the Tacoman

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

Jika navbar Anda ada di bagian atas halaman, atur nilainya menjadi 0. Jika tidak, tetapkan nilai untuk data-offset-topnilai konten di atas navbar Anda.

Sementara itu, Anda perlu memodifikasi css:

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


0

Anda harus menambahkan

#page {
  padding-top: 65px
}

untuk tidak menghancurkan footer lengket atau sesuatu yang lain


-1

Tambahkan ke JS Anda:

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

Ini tidak akan berfungsi jika jendela diubah ukurannya karena padding-top Anda hanya diterapkan pada dokumen siap.
boatcoder

-2

Anda dapat mengatur margin berdasarkan resolusi layar

@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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.