[英]twitter bootstrap navbar fixed top overlapping site
我在我的網站上使用引導程序,但導航欄固定頂部有問題。 當我只使用常規導航欄時,一切都很好。 但是,當我嘗試將其切換到固定頂部導航欄時,網站上的所有其他內容都會向上移動,就像導航欄不存在並且導航欄重疊一樣。 這基本上是我的布局方式:
.navbar.navbar-fixed-top
.navbar-inner
.container
.container
.row
//yield content
我試圖完全復制引導程序示例,但僅在使用導航欄固定頂部時仍然存在此問題。 我究竟做錯了什么?
您的答案在文檔中是正確的:
需要身體填充
固定導航欄將覆蓋您的其他內容,除非您在
<body>
的頂部添加padding
。 嘗試您自己的價值觀或使用我們下面的代碼片段。 提示:默認情況下,導航欄高 50 像素。body { padding-top: 70px; }
確保在核心 Bootstrap CSS之后包含它。
並在Bootstrap 4 文檔中...
固定導航欄使用 position: fixed ,這意味着它們是從 DOM 的正常流中拉出來的,並且可能需要自定義 CSS(例如, 上的 padding-top )以防止與其他元素重疊。
正如其他人所說,在 body 上添加一個 padding-top 效果很好。 但是當你把屏幕變窄(到手機寬度)時,導航欄和主體之間就會出現間隙。 此外,擁擠的導航欄可以換行到多行欄,再次覆蓋某些內容。
這為我解決了這些問題
body { padding-top: 40px; }
@media screen and (max-width: 768px) {
body { padding-top: 0px; }
}
默認情況下,這會產生 40 像素的填充,寬度低於 768 像素時會產生 0 像素(根據引導程序的文檔,這是將創建間隙的手機布局截止點)
一個更方便的解決方案供您參考,它在我的所有項目中都能完美運行:
改變你的第一行
.navbar.navbar-fixed-top
到
.navbar.navbar-default.navbar-static-top
@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);
});
這個問題是已知的,在 twitter bootstrap 站點中有一個解決方法:
粘貼導航欄時,請記住考慮下方的隱藏區域。 向
<body>
添加 40px 或更多的填充。 確保在核心 Bootstrap CSS 之后和可選的響應式 CSS 之前添加它。
這對我有用:
body { padding-top: 40px; }
只需使用sticky-top
更改fixed-top
sticky-top
。 這樣你就不必計算填充。
它有效!!
我把它放在產量容器之前:
<div id="fix-for-navbar-fixed-top-spacing" style="height: 42px;"> </div>
我喜歡這種方法,因為它記錄了讓它工作所需的 hack,而且它也適用於移動導航。
編輯 - 這效果更好:
@media (min-width: 980px) {
body {
padding-top: 60px;
padding-bottom: 42px;
}
}
正如我在一個類似的問題中發布的那樣,我在我真正的固定導航欄之前創建了一個虛擬的非固定導航欄,並取得了很好的成功。
<nav class="navbar navbar-default"></nav> <!-- Dummy nav bar -->
<nav class="navbar navbar-default navbar-fixed-top"> <!-- Real nav bar -->
<!-- Nav bar details -->
</nav>
間距適用於所有屏幕尺寸。
問題在於導航欄固定頂部,除非指定正文填充,否則它將覆蓋您的內容。 此處提供的任何解決方案都無法在 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>
以前的所有解決方案都以一種或另一種方式將 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”來上下移動它。 無論導航欄中內容的大小如何,在調整大小之前和之后,它似乎都對我有用。
我很好奇其他人對此有何看法:請分享您的想法。 (它會被重構為不再重復,順便說一句。)除了使用 jQuery,還有沒有其他理由不以這種方式解決問題? 我什至讓它與這樣的輔助導航欄一起工作:
$('.contentwrap') .css({'margin-top': (($('.navbar-fixed-top').height())
+ $('.admin-nav').height() + 1 )+'px'});
PS:以上是在 Bootstrap 2.3.2 上 - 它可以在 3.x 中工作,只要通用類名仍然存在......事實上,它應該獨立於引導程序工作,對嗎?
編輯:這是一個完整的 jquery 函數,它處理兩個動態大小的堆疊、響應式固定導航欄。 它需要 3 個 html 類(或可以使用 id 的):user-top、admin-top 和 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'
});
});
要處理菜單欄中的換行,請將 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>
這樣,身體的頂部填充會自動調整。
對於 Bootstrap 3.+ ,我將使用以下 CSS 來修復基於https://github.com/twbs/bootstrap/issues/1768 的導航欄固定頂部和錨點跳轉重疊問題
/* 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;
}
在導航標簽中使用這個類
class="navbar navbar-expand-lg navbar-light bg-light sticky-top "
對於引導程序 4
你所要做的就是
@media (min-width: 980px) { body { padding-top: 40px; } }
除了 Nick Bisby 的回答之外,如果您在 Rails 中使用 HAML 遇到此問題,並且您在此處應用了 Roberto Barros 的修復程序:
我將“bootstrap_and_overrides.css”中的要求替換為:
= 需要 twitter-bootstrap-static/bootstrap.css.erb
(見https://github.com/seyhunak/twitter-bootstrap-rails/issues/91 )
...您需要將 body CSS 放在 require 語句之前,如下所示:
@import "twitter/bootstrap/bootstrap";
body { padding-top: 40px; }
@import "twitter/bootstrap/responsive";
=require twitter-bootstrap-static/bootstrap.css.erb
如果 require 語句在 body CSS 之前,則不會生效。
我會這樣做:
// add appropriate media query if required to target mobile nav only
.nav { overflow-y: hidden !important }
這應該確保導航塊不會向下拉伸並覆蓋頁面內容。
這對我有用並且看起來不錯。
<body class="pt-5 mt-4">....</body>
我只是將導航欄包裹在一個
<div width="100%">
<div class="nav-? ??">
...
</nav>
</div>
沒有花哨的 hocus pocus 但它有效..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.