twitter bootstrap navbar sabit üst örtüşen site


347

Sitemde bootstrap kullanıyorum ve navbar sabit üstüyle ilgili sorunlar yaşıyorum. Sadece normal gezinti çubuğunu kullandığımda her şey yolunda. Ancak, navbar sabit üstüne geçmeye çalıştığımda, navbar orada değil ve navbar örtüşüyor gibi sitedeki diğer tüm içerik yukarı kayar. temelde nasıl ortaya koydu:

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

Ben tam bootstraps örnekleri kopyalamaya çalıştı ama hala sadece navbar sabit üst kullanırken bu sorunu yaşıyor. Neyi yanlış yapıyorum?

Yanıtlar:


527

Cevabınız doğrudan dokümanlarda :

Gövde dolgusu gerekli

Sabit gezinme çubuğu padding, üstüne eklemediğiniz sürece diğer içeriğinizin üzerine yerleşecektir <body>. Kendi değerlerinizi deneyin veya aşağıdaki kod parçamızı kullanın. İpucu: Varsayılan olarak gezinme çubuğu 50 piksel yüksekliğindedir.

body { padding-top: 70px; }

Çekirdek Bootstrap CSS'sinden sonra bunu eklediğinizden emin olun .

ve Bootstrap 4 belgelerinde ...

Sabit gezinme çubukları konum kullanır: sabittir, yani DOM'un normal akışından çekilirler ve diğer öğelerle çakışmayı önlemek için özel CSS (ör. Üzerinde dolgu) gerekebilir.


16
Ama pencereyi simge
durumuna küçültürken

5
Muhtemelen "bunu temel Bootstrap CSS'sinden sonra ve isteğe bağlı duyarlı CSS'den önce eklemediğiniz için" 40 pikselden sonra görünür.
collimarco

1
Bu cevap doğrudur, ancak sadece 40 piksel dolguyu duyarlı bir stil haline getirdiğinizde iyi çalışır, Dan veya Nick'in cevabına bakın.
Tony Bathgate

1
Dolgu (veya başka bir şey) eklemek istemiyorsanız @ qub1n'nin cevabına bakın.
scharfmn

2
@JerSchneid w3schools.com'daki navbar-fixed-top örneği aynı davranışı gösterir. Buna böcek deme eğilimindeyim.
Tony Martin

125

Diğerlerinin belirttiği gibi, vücuda bir dolgu üstü eklemek harika çalışıyor. Ancak ekranı daha dar hale getirdiğinizde (cep telefonu genişliklerine) navbar ve gövde arasında bir boşluk var. Ayrıca, kalabalık bir gezinti çubuğu içeriğin bir kısmının üzerine yeniden yazarak çok satırlı bir çubuğa sarılabilir.

Bu benim için bu tür sorunları çözdü

body { padding-top: 40px; }
@media screen and (max-width: 768px) {
    body { padding-top: 0px; }
}

Bu, varsayılan olarak 40px dolgu ve 768px genişlik altındayken 0px yapar (bu, bootstrap'ın belgelerine göre, boşluğun oluşturulacağı cep telefonu düzeni kesmesidir)


1
Bu çözüm aynı zamanda çekirdek Bootstrap CSS ile duyarlı CSS içe aktarma arasında mı yer alıyor? Pencere genişliği 980'den az olduğunda hala boşluğu görüyorum. Duyarlı CSS geçersiz kılmaların daha sonra içe aktarılmasını tahmin ediyorum. Ben duyarlı CSS ithalat altında bu çözümü taşırsanız, o zaman ben hala vücut dolgu, olsun artı menü çubuğunda ek bir satır.
tembellik

Twitter Bootstrap 2.3.2 kullanıyorum. Dokümanın artık 40 piksel öneri içermediğini fark ettim, ancak ihtiyaç hala var.
slothbear

1
Eh, 40 piksel öneri hala orada, yeni taşındı. Yorum spam'ı için üzgünüm.
slothbear

3
3. + body { padding-top: 40px; }yeterlidir
andilabs

8
Bu çözüm doğru yolda. Belgede olduğu gibi, vücuda sadece dolgu koymak 3. + 'da bile yeterli değildir. Medya sorgularının doğru kombinasyonu ile, gezinme çubuğu tarayıcı yeniden boyutlandırmasıyla sarıldığında istenen etki elde edilebilir. Benim durumumda dolguyu 1148px, 900px ve 768px genişliklerinde değiştirmem gerekiyor.
John McCann

34

referans için çok daha kullanışlı bir çözüm, tüm projelerimde mükemmel çalışıyor:

ilk satırınızı

.navbar.navbar-fixed-top

için

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

1
sadece trollüyor musun? ya da bir şey mi denetledim?
chyno

Bu nasıl 10 oy aldı? navbar-default sadece renk ve arka plan rengi ekler ...
Denny Mueller

2
navbar-static-top bu değişiklik ve benim için çalıştı. Teşekkürler!
kevthanewversi

1
navbar-static-top da benim için düzeltti. En az müdahaleci.
xpagesbeast

3
Bu, ekranın her zaman görünür olması için gezinme çubuğuna ihtiyacınız yoksa çalışır. Gezinme çubuğu statik sabit değil, ekranla birlikte kayar. Bu, farklı gezinme çubuğu stillerini örneklendirmektedir: getbootstrap.com/docs/3.3/examples/navbar-static-top
Victor Ionescu

26

Bu sorun bilinmektedir ve twitter bootstrap sitesinde bir geçici çözüm vardır:

Gezinme çubuğunu yapıştırdığınızda, altındaki gizli alanı hesaba katmayı unutmayın. 'E 40px veya daha fazla dolgu ekleyin <body>. Bunu çekirdek Bootstrap CSS'sinden sonra ve isteğe bağlı duyarlı CSS'den önce eklediğinizden emin olun.

Bu benim için çalıştı:

body { padding-top: 40px; }

9
Ama pencereyi simge
durumuna küçültürken

1
evet, bu çözüm mobil ekran boyutlarında iyi çalışmıyor. Aslında telefonumdaki geniş ekran modunda, siteyi işe yaramaz hale getiriyor.
Tony Bathgate

hangi isteğe bağlı duyarlı CSS? Şimdiye kadar sadece bir (çekirdek) bootstrap CSS kullandım - 3.7.x sürümünün üstünde konuşuyorum UPWARDS; 3.7.x sürümünden önceki farklı CSS'lere bölündü mü?
joedotnot

26

@Ryan, haklısın, yüksekliği zor kodlamak, özel gezinme çubuklarında kötü çalışmasını sağlayacaktır. Ben mutlu BS 3.0.0 için kullanıyorum kodu:

$(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
parseIntYüksekliğin css değerlerini kullanmak yerine, sadece kullandım $('#main-navbar').height(), ancak aksi takdirde bu çok yardımcı oldu ve sorunumu çözdü, teşekkür ederim.
tylerwal

Gezinme çubuğunuz sabit yükseklik değilse, ihtiyacınız olan şey budur.
CraigP

21

Bunu verim konteynerinin önüne koydum:

<div id="fix-for-navbar-fixed-top-spacing" style="height: 42px;">&nbsp;</div>

Bu yaklaşımı seviyorum çünkü çalışmasını sağlamak için gereken kesmek belgeliyor, ayrıca mobil nav için de çalışıyor.

EDIT - bu çok daha iyi çalışır:

@media (min-width: 980px) {
  body {
    padding-top: 60px;
    padding-bottom: 42px;
  }
}

16

Sorun, gövde dolgusu belirtilmedikçe içeriğinizin üzerine bindirilecek olan navbar sabit üstündedir. Burada sağlanan hiçbir çözüm% 100 vakada işe yaramaz. JQuery çözümü, sayfa yüklendikten sonra sayfayı yanıp sönüyor / kaydırıyor, bu da garip görünüyor.

Benim için asıl çözüm, navbar sabit-üstü kullanmak değil, navbar-statik-üst kullanmaktır.

.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
Evet, bu daha iyi, çünkü vücudun dolgusu her ekran boyutu için dinamik, çözümleri iyi değil.
Ronen Festinger

Ama sonra gezinme çubuğunun üzerinde boş bir boşluk var.
user2075599

16

Benzer bir soruda yayınladığım gibi, gerçek sabit gezinme çubuğumun hemen önünde kukla sabit olmayan bir gezinme çubuğu oluşturma konusunda iyi bir başarı elde ettim.

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

Aralık, tüm ekran boyutlarında harika çalışır.


Yaptığımız budur .. vücut içeriği herhangi bir js kodu, tahmin veya herhangi bir şey olmadan tam olarak doğru yere yerleştirir. .
FredArters

1
Thid daha fazla oylar hak ediyor, Mükemmel çalışıyor, cehennem kadar çirkin ama sadece kod: D
JRsz

Teşekkürler, bu üst dolgu veya kenar boşluğu pikselleri ve diğer şeylerden çok daha zarif bir çözüm ...
Pedro Reis

3
Ne yazık ki bu, mobil cihazlar 1 sütuna girdiğinde mobil cihazlar için geçerli değildir.
Pedro Reis

16

Bootstrap 4 için çözüm, tüm projelerimde mükemmel çalışıyor:

ilk satırınızı

navbar-fixed-top

için

sticky-top

Bootstrap dokümantasyon referansı

Zamanla bunu doğru yaptılar: D


Bazı kullanıcılar sayfayı aşağı kaydırdıkça bağlantıları görmek için sabit üstü kullanabilir; O :) umurumda değil eğer bu özellik yararlı olabilir gerçi
knowledge_is_power

Ayrıca .sticky-top'un her tarayıcıda tam olarak desteklenmeyen bir konum: yapışkan kullandığını unutmayın.
canlı aşk

14

Önceki tüm çözümler 40 pikseli özellikle html veya CSS'ye bir şekilde kodlar. Gezinme çubuğu farklı bir yazı tipi boyutu veya resim içeriyorsa ne olur? İlk etapta vücut dolgusu ile uğraşmamak için iyi bir nedenim varsa ne olur ? Bu soruna bir çözüm arıyordum ve işte burada bulduğum şey:

$(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'i ayarlayarak yukarı veya aşağı hareket ettirebilirsiniz. Yeniden boyutlandırmadan önce ve sonra gezinme çubuğundaki içeriğin boyutundan bağımsız olarak benim için çalışıyor gibi görünüyor.

Başkalarının bu konuda ne düşündüğünü merak ediyorum: lütfen düşüncelerinizi paylaşın. (Tekrar etmeyecek şekilde yeniden düzenlenecektir, btw.) JQuery kullanmanın yanı sıra, soruna bu şekilde yaklaşmamak için başka nedenler var mı? Hatta böyle bir ikincil navbar ile çalıştım:

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

Not: Yukarıdaki Bootstrap 2.3.2 üzerindedir - 3.x'te çalışır mı Genel sınıf isimleri kaldığı sürece ... aslında, bootstrap'tan bağımsız olarak çalışmalıdır, değil mi?

EDIT: İşte dinamik boyutta iki yığın, duyarlı sabit navbar işleyen tam bir jquery işlevi. 3 html sınıfı gerektirir (veya id'leri kullanabilir): user-top, admin-top ve contentwrap:

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

Sadece FYI Bunu kullanıyorum ve harika çalışıyor, ancak garip bir nedenden dolayı, iki normal, biri normal boyutta ve biri küçük ekranlar içinse, sadece büyük olanda çalışıyor mu?
NaughtySquid

@LiamDawe sayfada birden fazla '.user-top' (örneğin) var, bu durumda .height () karışabilir ...?
Ryan


11

Menü çubuğundaki sarma hatlarını işlemek için gezinme çubuğuna aşağıdaki gibi bir kimlik uygulayın:

<div class="navbar navbar-default navbar-fixed-top" role="navigation" id="topnavbar">

ve jquery'yi ekledikten sonra bu küçük komut dosyasını başınıza ekleyin, örneğin:

<script>
    $(document).ready(function(){
        $(document.body).css('padding-top', $('#topnavbar').height() + 10);
        $(window).resize(function(){
            $(document.body).css('padding-top', $('#topnavbar').height() + 10);
        });
    });
</script>

Bu şekilde, gövdenin üst dolgusu otomatik olarak ayarlanır.


Örnekte ikinci referansı yükseklik olarak değiştirmek zorunda kaldım $ ('# topnavbar'). Height () ve sonra bu benim için mükemmel çalıştı. Teşekkürler!
notruthless

1
Yorum için teşekkürler! Cevapta düzelttim.
Oliver Konig

Bu, PC, iOS, Android - tüm cihazlarda çalışan en iyi çözümdür. Diğerlerinin tümü sabit kodlu piksel değerleridir veya çok uzundur ve tüm cihazlarda çalışmaz.
Oracular Man

Güzel çözüm. Hesaplamada dikkate alınmayan bazı küçük ofsetlerim vardı. Sanırım bunun nedeni gezinme çubuğumun bazı kenar boşlukları olmasıydı. Bunun yerine dikkate almak için outerHeight () çağrısı için height () çağrısını değiştirmeyi seçtim.
Leonardo Santos

4

Bootstrap 3. + için, navps-fixed-top ve çapa atlaması çakışan sorunu https://github.com/twbs/bootstrap/issues/1768 adresine göre düzeltmek için aşağıdaki CSS'yi kullanırdım

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

Aynı konu, güzel cevap.
McGrady

2

bu etiketi nav etiketi içinde kullan

class = "navbar navbar-expand-lg navbar-light bg-light yapışkan-üst "

Bootstrap 4 için


Benim ve diğerleri için çalıştığı için neden indirildiğini asla bilemeyeceğim.
Kynginthenorth

Doğru. Tek sorun, dokümanlarda ".sticky-top yardımcı programı CSS'nin konumunu kullanıyor: yapışkan, tüm tarayıcılarda tam olarak desteklenmiyor"
José

1

Tüm yapman gereken

@media (min-width: 980px) { body { padding-top: 40px; } } 

0

Nick Bisby'nin cevabına ek olarak, bu sorunu raylarda HAML kullanarak alırsanız ve Roberto Barros'un düzeltmesini buraya uyguladıysanız:

Ben "bootstrap_and_overrides.css" için gerekli yerine:

= twitter-bootstrap-static / bootstrap.css.erb gerektirir

(Görmek Https://github.com/seyhunak/twitter-bootstrap-rails/issues/91 )

... vücut CSS'sini aşağıdaki ifadeden önce koymanız gerekir :

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

Require ifadesi gövde CSS'sinden önce ise geçerli olmaz.


0

Bunu yapardım:

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

Bu, gezinme bloğunun aşağı sayfayı genişletmediğinden ve sayfa içeriğini kapsadığından emin olmalıdır.


-4

Navbar'ı

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

Süslü hocus pocus ama işe yaradı ..


Cevabınız net değil ve sorunu çözemiyor. Neyi nav-? ??temsil eder?
fragilewindows
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.